Biztalk循环functoid行为

Biztalk循环functoid行为,biztalk,biztalk-mapper,Biztalk,Biztalk Mapper,早上好 我正在努力学习BizTalk,它正在做一些我不理解的事情 我正在输出员工地址的XML。循环functoid创建两个“通信”元素。我希望将“CountrySubsectionCode”作为两个元素中的子元素,但它们只出现一次: <ns0:Communication sequence="1"> <ns0:ChannelCode>Telephone</ns0:ChannelCode> <ns0:UseCode>Personal&l

早上好

我正在努力学习BizTalk,它正在做一些我不理解的事情

我正在输出员工地址的XML。循环functoid创建两个“通信”元素。我希望将“CountrySubsectionCode”作为两个元素中的子元素,但它们只出现一次:

<ns0:Communication sequence="1">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Personal</ns0:UseCode>
    <ns0:DialNumber>1234567890</ns0:DialNumber>
    <ns0:Address>
        <ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
        <ns0:CityName>Some City</ns0:CityName>
        <ns0:CountrySubDivisionCode name="County">Jackson</ns0:CountrySubDivisionCode>
        <ns0:CountrySubDivisionCode name="State">MO</ns0:CountrySubDivisionCode>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>14099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
<ns0:Communication sequence="2">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Business</ns0:UseCode>
    <ns0:DialNumber>0987654321</ns0:DialNumber>
    <ns0:Address>
        <ns0:AddressLine sequence="1">1234 My St</ns0:AddressLine>
        <ns0:CityName>Some City</ns0:CityName>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>14099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>

电话
个人的
1234567890
1234我的圣
某市
杰克逊
卫生官员
美国
14099
电话
生意
0987654321
1234我的圣
某市
美国
14099
输入是一个平面模式

对于带有电话号码的通信元件,有一个循环函数。它的输出是输出模式中的通信元素

还有另一个循环functoid,包含州和县的输入,它的输出是 输出架构中的CountrySubsectionCode元素

映射如何决定什么是输出,什么不是输出?它不输出吗 第二组,因为它们是重复的?我找到的所有教程 似乎是复制和粘贴版本的同一源材料和它的相当轻


谢谢验证映射(在解决方案资源管理器中右键单击)并单击visual studio输出窗口中的XSL链接。这是了解映射器正在做什么的最佳方法,因为您将看到生成的XSLT

我通过实验解决了这个问题。我相信循环functoid的工作原理如下:

  • 它从每个输入创建一个输入值列表
  • 它遍历列表,为每个输入创建一个输出。当它这样做时,它会删除(而不是空值或清空)其他输入
  • 一旦列表用尽,就没有输出(列表为空)
我有“嵌套”循环functoid。外部functoid有三个输入,内部functoid有两个输入。在第一个外部functoid输出上,它使用了来自内部functoid的两个输入(由于位置和丢失而被抑制)。在所有后续的外部functoid输出上,内部functoid没有其他值可供使用,因此不会输出任何内容

对于我的解决方案,我必须重新排列外部functoid的输入,以便地址部分首先出现。内部functoid正确输出两个国家/地区划分。对于后续的电话行,没有剩余的输出,也没有需要的输出


迈克尔和穆西奥谢谢你们的帮助

BizTalk转换使用XSLT,从映射文件生成。它如何做到这一点不仅取决于映射文件中的functoid和链接,还取决于源模式和目标模式中的节点属性。您可以右键单击映射文件以选择Validate Map(生成XSLT以便可以查看它或将其用作自定义XSLT映射的基础)或选择Test Map(实际上转换一些输入,以便可以验证其结果)。请提供您所有的源/目标模式、一些输入和所需的输出,以及映射文件的屏幕截图?