Biztalk平面文件转换多个未绑定记录导致意外数据错误
我正在尝试通过Biztalk 2006 R2将平面文件导入SQL数据库。输入文件的布局如下所示,每行由CR/LF分隔,末尾有一个额外的尾部CR/LF: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
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结尾。那里