【发布时间】:2013-03-07 02:38:13
【问题描述】:
使用 BizTalk Map 并想知道是否有执行以下操作的好方法。
我需要将收到的发票映射到订单列表。然而,每个订单必须只包含两个行项目(假设发票有一个偶数)。
这意味着 Invoice(1, 2, 3, 4) 应该映射到 Orders(Order (1, 2), Order (3, 4))。
本质上,我需要在(index % 2 == 0)时创建新的父元素。
有没有functoid-only方式来做到这一点?
XML 示例如下:
<Invoice>
<Client>Client1</Client>
<Line>
<Code>1</Code>
<Price>$1.00</Price>
<Qty>1</Qty>
</Line>
<Line>
<Code>2</Code>
<Price>$2.00</Price>
<Qty>2</Qty>
</Line>
<Line>
<Code>3</Code>
<Price>$3.00</Price>
<Qty>3</Qty>
</Line>
<Line>
<Code>4</Code>
<Price>$4.00</Price>
<Qty>4</Qty>
</Line>
</Invoice>
到
<Orders>
<Order>
<Client>Client1</Client>
<OrderItem>
<Code>1</Code>
<Qty>1</Qty>
</OrderItem>
<OrderItem>
<Code>2</Code>
<Qty>2</Qty>
</OrderItem>
</Order>
<Order>
<Client>Client1</Client>
<OrderItem>
<Code>3</Code>
<Qty>3</Qty>
</OrderItem>
<OrderItem>
<Code>4</Code>
<Qty>4</Qty>
</OrderItem>
</Order>
</Orders>
我的尝试:
- 标准映射:一个包含所有行的订单,正如预期的那样
-
Client 的值映射基于
index % 2:每行订单(一半有Client) - 表循环(门控到
index % 2)+ 提取器到客户端:每行订单,只有半行
我最终可能会做什么:
- XSLT
- 或者,映射后的 C# 操作
【问题讨论】:
-
老实说,我什至不会尝试使用映射器来执行此操作。我会改为使用直接 XSLT。
-
我赞同尼克的评论。 xslt 并不难,很容易完成。
-
XSLT 可维护性通常是客户采用的一个相当大的障碍,但当需要它时我会同意。可惜这种东西不支持开箱即用。
-
我带着地图到了那里。从 Line 开始,迭代函数 2 的 Modula 和 0 的等号也链接 Order。这将创建两个订单,每行 2 和 4。
标签: biztalk biztalk-2010