【问题标题】:Mapping multiple source structures to a single looping destination structure in BizTalk将多个源结构映射到 BizTalk 中的单个循环目标结构
【发布时间】:2020-10-20 23:33:39
【问题描述】:

我正在尝试映射以下具有两组属性的源结构的一部分 - 一组是平面的,一组是循环的:

源文档

<root>
  <flat>
    <prop1>foo</prop1>
    <prop2>bar</prop2>
    ...
  </flat>
  <loop>
    <prop>
      <qual>propA</qual>
      <data>baz</data>
      <more>blah</more>
    </prop>
    <prop>
      <qual>propB</qual>
      <data>qux</data>
      <more>bhal</more>
    </prop>
    ...
  </loop>
</root>

具体来说,扁平部分是X12 850 EDI文档的PO1段,循环属性是后面的REF段。

这些应该映射到键值对的循环目标结构,如下所示:

目的地文件

<root>
  <props>
    <prop>
      <name>prop1</name>
      <value>foo</value>
    </prop>
    <prop>
      <name>propA</name>
      <value>baz</value>
    </prop>
  </props>
</root>

我只想映射一些值,具体取决于属性名称。

我的尝试

我已使用表格循环 functoid 和两个表格提取器 functoid 成功地将平面部分映射到目标:

我还使用循环 functoid 和一些相等性检查成功地将循环部分映射到目标,以仅选择某些 qual 值:

当我尝试同时包含这两个映射时,映射成功,但不会生成组合输出。

问题

如何将源文档的两个部分映射到目标文档中的同一个循环部分?

更新 1

原来我把问题简单化了;扁平属性组实际上包含一个节点中的属性名称和另一个节点中的值。它们实际上是这样的:

<flat>
  <name1>prop1</name1>
  <value1>foo</value1>
  <name2>prop2</name2>
  <value2>bar</value2>
  ...
</flat>

如果您使用值映射(展平)functoid 从正确的位置获取属性名称,@Dijkgraaf 的答案的概念仍然适用于此更改。

【问题讨论】:

  • 你能分享一张你目前拥有的地图示例吗?
  • @Dijkgraaf 我已经用相关地图部分的屏幕截图更新了问题。这些都是从目前不起作用的组合地图中获取的,但是如果我删除其中一个,其他的工作。 LMK,如果我可以提供任何其他详细信息。

标签: biztalk biztalk-mapper


【解决方案1】:

通常解决这个问题的唯一方法是使用任一

  • 通过 Scripting Functoid 内联自定义 XSLT
  • 自定义 XSLT 设置整个地图的自定义 XSLT 路径
  • 具有包含两个选项节点和两个映射的中间架构。第一个将平面结构映射到一个节点,将循环映射到第二个节点。然后是第二个映射,它在两者之间循环并映射到同一个节点。
  • 但是,在您的情况下,您需要将 (prop1,prop2,..) 和循环道具链接到相同的循环 functoid,并链接到名称和值,并在来自 prop1 的链接上设置链接属性, prop2 等复制名称而不是值。

您的示例输入给出了

<root>
    <props>
        <prop>
            <name>prop1</name>
            <value>foo</value>
        </prop>
        <prop>
            <name>prop2</name>
            <value>bar</value>
        </prop>
        <prop>
            <name>propA</name>
            <value>baz</value>
        </prop>
        <prop>
            <name>propB</name>
            <value>qux</value>
        </prop>
    </props>
</root>

【讨论】:

  • 谢谢,这完美地解决了我提出的问题。不幸的是,我问错了问题。我稍微简化了源文档结构。我已经相应地更新了我的问题。
  • 我已经设法使用值映射(展平)functoid 从不同的节点提取属性名称,由包含属性值的节点上的逻辑存在 functoid 触发。
  • 嗨@JensEhrich 在收到答案后更改问题然后使答案无效在 StackOverflow 中是不受欢迎的。在这种情况下,您有时最好提出一个新问题,该问题更好地提出问题并链接到原始问答(如果相关)。在这种情况下,我认为答案基本上仍然是正确的,因为您必须将两个集合链接到单个循环 functoid,但是平面结构的映射并不像您所指出的那样。
  • 好点,我会将问题恢复到原始结构,并在最后为任何处于类似情况的人保留更新。无论如何,您的答案在任何一种情况下都可以解决问题。再次感谢。
  • 我将问题还原为原始 XML 结构,以保持此答案 100% 有效。我将实际结构移到更新部分,而不是创建一个新问题,因为我认为它会被视为重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
相关资源
最近更新 更多