使用嵌套重复节点对Biztalk Flatfile Schema进行Debatching

时间:2016-03-23 12:50:48

标签: xsd biztalk biztalk-2013

我有一个带有嵌套重复节点的flatfile,需要将其分配到单个记录。

flatfile:

ABC DEF  1234.456789012345678
000000123456L01   Supplier 0
001000123456L01   00301Address 1                                 
000001234567L01   Supplier 1
001001234567L01   00301Address 2
001001234567L01   00301Address 3
001001234567L01   00302Address 4

以000开头的行是供应商,从001开始是供应商地址。 字符4-15是供应商代码。

目前,除了输出一个包含每个供应商所有地址的记录外,我无法做到:

<Record>
  <Supplier>
    <Supplier_code>001234567L01</Supplier_code>
    <Supplier_name>Supplier 1</Supplier_name>
  </Supplier>
  <Address>
    <Supplier_address>Address_2</Supplier_address>
    <Supplier_address>Address_3</Supplier_address>
    <Supplier_address>Address_4</Supplier_address>
  </Address>
</Record>

但是,预期的输出是每个供应商地址一条记录:

<Record>
  <Supplier>
    <Supplier_code>001234567L01</Supplier_code>
    <Supplier_name>Supplier 1</Supplier_name>
  </Supplier>
  <Address>
    <Supplier_address>Address_2</Supplier_address>
  </Address>
</Record>

<Record>
  <Supplier>
    <Supplier_code>001234567L01</Supplier_code>
    <Supplier_name>Supplier 1</Supplier_name>
  </Supplier>
  <Address>
    <Supplier_address>Address_3</Supplier_address>
  </Address>
</Record>


<Record>
  <Supplier>
    <Supplier_code>001234567L01</Supplier_code>
    <Supplier_name>Supplier 1</Supplier_name>
  </Supplier>
  <Address>
    <Supplier_address>Address_4</Supplier_address>
  </Address>
</Record>

我如何更改FlatFile架构以完成上述操作?

1 个答案:

答案 0 :(得分:3)

您无法使用平面文件反汇编程序一次完成此操作。没有办法表明需要对某些节点进行分组/拆分等。但是,在地图中执行此操作相当简单。创建一个与您的第一个结构相似的新架构,但是有一个额外的根节点允许Record重复,并且您的地图将如下所示:

looping split map sample

并确保MaxOccurs元素和目标unbounded节点上的Supplier_address设置正确(可能是Record)。将此映射添加到您的接收端口,它将根据需要进入MessageBox拆分。请注意,您确实需要新架构,因为您不能拥有包含多个根节点的消息。如果您需要进一步解析,可以将其设置为信封模式,请求响应端口订阅它,并在响应端使用XML反汇编程序来解除它。在平面文件dasm完成其魔法之后,您唯一的另一个选择是在自定义管道组件中执行此操作。