2013-03-07 109 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返回布爾值來打開和關閉輸出。