在BizTalk映射中的重复节点下合并来自重复节点的值

问题描述 投票:1回答:1

我在输入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>

[我正在尝试在这里找到解决方案,并且很久以前就问了我一个问题(链接How to Concatenate multiple repetitive nodes into a single node - BizTalk)但是用这种方法,我得到的结果如下

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

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

concatenation biztalk biztalk-mapper
1个回答
1
投票

查看文档Cumulative Concatenate Functoid

这给你第一个线索

参数2:一个可选的数值,指示应将累加到的范围。默认值为零(0),指示累积范围是整个输入实例消息。

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

enter image description here

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

第二个线索可以通过转到错误列表,显示消息并单击“双击此处以显示/隐藏编译器链接”来找到。这将导致橙色线条出现在地图表面上,显示地图认为它应该循环播放的方式。参见上面的屏幕截图,它也表明了这一点。请注意它仅在根上循环吗?

所以第二个解决方法是从OrderText到OrderItems画一条线,并在提示时选择Direct Link,这表明它也希望它循环到那里。

enter image description here

这将使您的输出接近您期望的输出

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

最后可以通过使用一些fuctoid来删除多余的#,例如字符串大小,String Left和减法functoid,或者使用脚本fuctoid。

© www.soinside.com 2019 - 2024. All rights reserved.