【问题标题】:BizTalk mapping records into pairsBizTalk 将记录映射成对
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多