0

早上好,

我正在尝试学习 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>

输入是一个平面模式。

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

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

映射如何决定什么是输出,什么不是?它不是因为它们是重复的而输出第二组吗?我发现的所有教程似乎都是相同源材料的复制和粘贴版本,而且非常简单。

谢谢

4

2 回答 2

1

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

于 2011-04-12T22:34:05.463 回答
0

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

  • 它从每个输入创建一个输入值列表
  • 它遍历列表,为每个输入创建一个输出。当它这样做时,它会删除(不为空或清空)其他输入。
  • 一旦列表用尽,就没有输出(列表为空)。

我有“嵌套”循环仿函数。外部 functoid 有三个输入,内部 functoid 有两个输入。在第一个外部 functoid 输出上,它使用了来自内部 functoid 的两个输入(由于位置而被抑制并丢失)。在所有后续的外部 functoid 输出中,内部 functoid 没有其他值可以使用,因此它什么也不输出。

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

迈克尔和穆西奥感谢您的帮助!

于 2011-04-13T19:47:47.563 回答