使用嵌套重复节点对 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。不过,在地图中执行此操作相当简单。创建一个结构类似于您的第一个的新架构,但有一个额外的根节点以允许 Record
s 重复,您的地图将如下所示:
并确保 MaxOccurs
在 Supplier_address
元素和目标 Record
节点上正确设置(可能 unbounded
)。将此映射添加到您的接收端口,它将进入 MessageBox 按需要拆分。请注意,您确实需要一个新模式,因为您不能拥有包含多个根节点的消息。如果您需要进一步取消批处理,您可以将其设置为信封模式,让请求响应端口订阅它,并在响应端使用 XML 反汇编程序对其进行取消批处理。您唯一的其他选择是在平面文件 dasm 发挥其魔力后,在自定义管道组件中执行此操作。
我有一个包含嵌套重复节点的平面文件,需要将其分批为单个记录。
平面文件:
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。不过,在地图中执行此操作相当简单。创建一个结构类似于您的第一个的新架构,但有一个额外的根节点以允许 Record
s 重复,您的地图将如下所示:
并确保 MaxOccurs
在 Supplier_address
元素和目标 Record
节点上正确设置(可能 unbounded
)。将此映射添加到您的接收端口,它将进入 MessageBox 按需要拆分。请注意,您确实需要一个新模式,因为您不能拥有包含多个根节点的消息。如果您需要进一步取消批处理,您可以将其设置为信封模式,让请求响应端口订阅它,并在响应端使用 XML 反汇编程序对其进行取消批处理。您唯一的其他选择是在平面文件 dasm 发挥其魔力后,在自定义管道组件中执行此操作。