Biztalk平面文件转换多个未绑定记录导致意外数据错误

Biztalk平面文件转换多个未绑定记录导致意外数据错误,biztalk,transform,flat-file,biztalk2006r2,Biztalk,Transform,Flat File,Biztalk2006r2,我正在尝试通过Biztalk 2006 R2将平面文件导入SQL数据库。输入文件的布局如下所示,每行由CR/LF分隔,末尾有一个额外的尾部CR/LF: 00(29characters after) <=== Header 07(997characters after) <=== Record Type 07 (unbounded, 0-?? possible records) 08(86characters after) <=== Record Type 08 (unbou

我正在尝试通过Biztalk 2006 R2将平面文件导入SQL数据库。输入文件的布局如下所示,每行由CR/LF分隔,末尾有一个额外的尾部CR/LF:

00(29characters after)  <=== Header
07(997characters after) <=== Record Type 07 (unbounded, 0-?? possible records)
08(86characters after)  <=== Record Type 08 (unbounded, 0-?? possible records)
09(89characters after)  <=== Record Type 09 (unbounded, 0-?? possible records)
10(94characters after)  <=== Record Type 10 (unbounded, 0-?? possible records)
16(35characters after)  <=== Group Footer
17(30characters after)  <=== File Footer

00(后面29个字符)有几种方法可以解决这个问题。首先,记录级架构节点上有一个属性,允许您忽略/抑制尾随分隔符。但是,如果额外的/r/n不一致地出现在I.文件中,您可能会遇到问题

第二个选项是添加一个没有列且最小值为0、最大值为1的额外记录节点。如果您需要这样做,我可以为您提供更多详细信息。

从头开始创建模式 我认为,即使对于中等复杂的结构(如本例),也不值得费心使用平面文件模式向导。我的建议是考虑整体结构,并使用模式编辑器提供一个概要

因此,您的示例调用具有以下结构的模式:

键入单个
标题
记录
00
,然后依次键入
07
08
09
10
。每个类型化记录本身就是一个结构,包含任意数量的重复记录。最后,结构以单个
GroupTrailer
记录类型
16
结束,然后是一个整体
Trailer
记录类型
17

这很好地映射到BizTalk中的以下架构:

现在,您需要调整节点的各种属性,以便指示平面文件反汇编程序如何解析传入消息

根记录

Root
记录正好用于将各种子记录组合在一起,并且是正确结构化XML文档所必需的。但是,它不参与传入结构的解析

因此,您应该将
子分隔符类型设置为
None

标题、组预告片和预告片记录

标题
组拖车
拖车
记录每次发生一次,因此将其
最小发生次数
最大发生次数
属性保留为默认值
1

此外,这些记录中的每一条都分别由
00
16
17
的适当
标记标识符来标识

最后,这些记录的每一端都有一个或多个尾随CR/LF对或字符。因此,将其
子分隔符类型
属性设置为
十六进制
,将其
子顺序
属性设置为
后缀

Type07、Type08、Type09和Type10结构

这是棘手的部分

查看这些结构的一种方法是,它们包含重复的记录,每个记录用尾部的CR/LF分隔。然而,这些结构本身只出现一次

另一个要点是,您只需要一个CR/LF对作为结构及其子记录的分隔符。因此,
子分隔符类型
属性的设置应该反映这一点

对于
Type07
Type08
Type09
Type10
记录,保留默认设置。也就是说,将
子分隔符类型
属性设置为
,将
子顺序
属性设置为
条件默认值
。特别是,没有为这些记录设置
标记标识符

Type07\u记录、Type08\u记录、Type09\u记录和Type10\u记录结构

但是,
Type07\u记录
Type08\u记录
Type09\u记录
Type10\u记录
被设置为多次出现。将其
Min-occurrents
属性设置为
0
,将
Max-occurrents
属性设置为
unbounded

此外,每个重复记录都以一个尾部CR/LF对结束。因此,将其
子定界符类型
属性设置为
十六进制
,将其
子顺序
属性设置为
后缀
,将其
子定界符
属性设置为
0x0D 0x0A

参考

作为参考,结果设置为:

  • 根目录
    :带分隔符,无,条件默认值

  • 标题
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    00

  • :(可选),MinOccurs:1,MaxOccurs:1

  • Type07
    :带分隔符,无,条件默认值

  • Type07\u记录
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    07

  • Type08
    :带分隔符,无,条件默认值

  • Type08\u记录
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    08

  • Type09
    :带分隔符,无,条件默认值

  • Type09\u记录
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    09

  • Type10
    :带分隔符,无,条件默认值

  • Type10\u记录
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    10

  • GroupTrailer
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    16

  • trail
    :带分隔符、十六进制、
    0x0D 0x0A
    、后缀、标记标识符
    17


额外CR/LF是指每条记录之间的空白行吗?不,每一行以CR/LF结尾。那里