使用嵌套重复节点对 Biztalk 平面文件架构进行分批处理

Debatching Biztalk Flatfile Schema with nested repeating nodes

我有一个包含嵌套重复节点的平面文件,需要将其分批为单个记录。

平面文件:

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 架构才能完成上述任务?

您无法使用平面文件反汇编程序一次性完成此操作。无法向它指示某些节点​​需要 grouped/split/etc。不过,在地图中执行此操作相当简单。创建一个结构类似于您的第一个的新架构,但有一个额外的根节点以允许 Records 重复,您的地图将如下所示:

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