Biztalk循环functoid行为

时间:2011-04-12 15:11:57

标签: biztalk biztalk-mapper

早上好,

我正在尝试学习BizTalk,并且正在做一些我不理解的事情。

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

<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>

输入是一个平面架构。

通信元素的电话号码有一个循环功能。它的输出是输出模式中的Communication元素。

还有另一个循环的functoid与州和县的输入,它的输出是 输出模式中的CountrySubDivisionCode元素。

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

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我能够通过实验解决这个问题。我相信循环functoid是如何工作的:

  • 它会从每个输入
  • 创建一个输入值列表
  • 它遍历列表,为每个输入创建一个输出。当它执行此操作时,它会删除(不为空或清空)其他输入。
  • 列表用完后,没有输出(列表为空)。

我有“嵌套”循环functoids。外部functoid有三个输入,内部functoid有两个输入。在第一个外部functoid输出上,它使用了内部functoid的两个输入(由于位置和丢失而被抑制)。在所有后续的外部functoid输出中,内部functoid没有其他值可供使用,因此它不输出任何内容。

对于我的解决方案,我不得不重新安排外部functoid的输入,因此地址部分首先出现。内部functoid正确输出两个国家的分区。对于随后的电话行,没有剩余的输出,也没有想要的。

Michael和Mousio感谢您的帮助!