在 BizTalk 映射中的重复节点下连接来自重复节点的值

Concatenating values from the repeating nodes under repeating nodes in BizTalk Maps

我在输入中有这样的东西XML

<Root>
<OrderText>
    <item>item1</item>
    <item>item2</item>
  </OrderText>
  <OrderText>
    <item>item3</item>
    <item>item4</item>
    <item>item5</item>
  </OrderText>
</Root>

从这个输入,期望的输出是

<Root>
 <OrderItems>
  <Items>item1#item2</Items>  
 </OrderItems>
  <OrderItems>
  <Items>item3#item4#item5</Items>  
 </OrderItems>
</Root>

我试图在这里找到解决方案,并遵循了很久以前我自己提出的一个问题 (link ) 但是通过这种方法我得到了如下结果

<Root>
 <OrderItems>
  <Items>item1#item2#item3#item4#item5</Items>  
 </OrderItems>
  <OrderItems>
  <Items>item1#item2#item3#item4#item5</Items>  
 </OrderItems>
</Root>

这是完全错误的。有人可以帮我吗

查看文档Cumulative Concatenate Functoid

这给了你第一条线索

Parameter 2: An optional numeric value that indicates the scope to which the accumulation should be performed. The default value is zero (0), indicating that the accumulation scope is the entire input instance message.

尝试添加第二个参数并将其设置为 1。这将导致以下输出,更接近您想要的结果。

<Root>
    <OrderItems>
        <Items>item1#item2#</Items>
        <Items>item3#item4#item5#</Items>
    </OrderItems>
</Root>

第二条线索可以通过转到错误列表、显示消息并单击 "Double-click here to show/hide compiler links" 找到。这将导致地图表面出现橙色线条,显示地图认为它应该如何循环。请参阅上面的屏幕截图,该屏幕截图也显示了这一点。注意它是如何只在根上循环的?

所以第二个修复是从 OrderText 到 OrderItems 画一条线,当提示 select Direct Link 时,告诉它你希望它也在那里循环。

这将使您的输出接近您想要的输出

<Root>
    <OrderItems>
        <Items>item1#item2#</Items>
    </OrderItems>
    <OrderItems>
        <Items>item3#item4#item5#</Items>
    </OrderItems>
</Root>

删除末尾多余的 # 可以使用多个 fuctoid(例如字符串大小、String Left 和减法 functoid)或使用脚本 Fuctoid 来完成。