2013-03-07 129 views
1

使用BizTalk映射,不知道是否有这样做的一个很好的方式。的BizTalk映射记录到对

我需要映射收到的发票到订单的列表。但是,每个订单只能包含两个订单项(让我们假设发票有一个偶数)。

这意味着,发票(1,2,3,4)应映射到订单(订单(1,2),单(3,4))。

从本质上讲,我需要的时候(index % 2 == 0)创建新的父元素。

是否有这样做的的functoid只方式?

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> 

我已经试过:

  • 标准映射:如预期的所有生产线单订货,
  • 价值图平基于index % 2客户:每行令(一半客户
  • 表循环(门控index % 2)+提取到客户:每行令,只有一半的行

什么我可能最终会做:

  • XSLT
  • 或者,映射后的C#操作
+2

老实说,我甚至不会尝试使用映射器来做到这一点。我会改用直接的XSLT。 – 2013-03-07 20:57:15

+1

我第二个Nick的评论。 xslt并不难,而且会轻松完成工作。 – Jay 2013-08-06 16:23:14

+0

XSLT可维护性通常是客户采用的一个相当大的障碍,但我会在需要它时根据需要达成一致。只是可惜这种东西不是开箱即用的。 – 2013-08-18 15:07:38

回答

-1

在工具箱的高级functoids部分查找'index'functoid。 在输出中添加一个脚本functoid。 添加C#代码来检查你想匹配的索引。 您可以通过从脚本functoid返回布尔值来打开和关闭输出。