1

使用 BizTalk Map 并想知道是否有执行以下操作的好方法。

我需要将收到的发票映射到订单列表。然而,每个订单必须只包含两个行项目(假设发票有一个偶数)。

这意味着 Invoice(1, 2, 3, 4) 应该映射到 Orders(Order (1, 2), Order (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# 操作
4

1 回答 1

-1

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

于 2013-09-05T16:24:40.257 回答