BizTalk FlatFile / CSV架构

时间:2019-03-06 15:41:29

标签: csv xsd flat-file biztalk-2013

我正在重构BizTalk应用程序。 现有模式具有以下结构,代表发票,其中Level1是抬头,Level 4是多个行项目。

enter image description here

在旧版的应用程序2010中,它一次写一张发票的数据,并具有使用平面文件模式的发送管道。我们正在尝试改进旧系统,并将其移至2013年。

我添加了一条接收流水线来读回数据,它对于一张发票也可以正常工作。但是,如果文件中有多个发票,它将失败。

我可以将已有的架构(相对于必须重新运行向导)进行修改,以允许在同一文件中使用多个发票吗?例如,添加一个同时包含Level1和Level4的“发票”记录吗?

[最终目标是还要添加一个级别0,其中包括一天的总发票,并根据建筑师的喜好在地图或管道中进行。]

我尝试了以下操作,并收到此错误:

  

原因:寻找“,”时出现意外的流结束

我使用了与BizTalk FlatFile Schema multiple repeating records类似的步骤:

  
      
  1. 添加了发票记录,并在其下放置了1级和4级。
  2.   
  3. 将记录设置为未绑定
  4.   
  5. 设置子订单中缀
  6.   
  7. 子定界符类型为十六进制
  8.   
  9. 子定界符为0x0D 0x0A
  10.   

enter image description here

如果我尝试使用“儿童分隔符”-“无”,则会出现此错误:

  

原因:寻找时发现了意外数据:$ Delimited $

然后我尝试添加“标签标识符”(分别设置为“ Level1”和“ Level4”)。在这种情况下,带有一张发票的文件被序列化,但是带有3张发票的文件给出了一个神秘的错误:

  

消息传递引擎在处理一个消息传递引擎时遇到错误   或更多入站邮件。

样本数据:

Level1,,VO,TEST01,12/17/2018,34093092-1,,12/17/2018,60,1075,0,A,,,,12/17/2018,2/15/2019,2/15/2019,,,2000,1000,,1010,1000,,,,,EP
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,145.72,7,34093092-448-887,,,,,,,,,,,,,,,,,
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,802.67,7,34093092-492-930,,,,,,,,,,,,,,,,,
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,126.61,7,34093092-833-096,,,,,,,,,,,,,,,,,
Level1,,VO,TEST01,12/17/2018,34068721-1,,12/17/2018,60,1250,0,A,,,,12/17/2018,2/15/2019,2/15/2019,,,2000,1000,,1010,1000,,,,,EP
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,1250,7,34068721-492-930,,,,,,,,,,,,,,,,,
Level1,,VO,TEST01,12/17/2018,34094975-1,,12/17/2018,60,595,0,A,,,,12/17/2018,2/15/2019,2/15/2019,,,2000,1000,,1010,1000,,,,,EP
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,142.8,7,34094975-448-887,,,,,,,,,,,,,,,,,
Level4,N,1200,,,1000,INDFRT-ECO,0,,0,452.2,7,34094975-492-930,,,,,,,,,,,,,,,,,

1 个答案:

答案 0 :(得分:1)

这是一个解析文件的架构。

请注意,<Sequence>节点和Level4的最大出现次数都是无限制的。

Schema structure

使用标签时,技巧是必须在标签中包含第一个定界符,或者如果您不想先将空白字段设置为,则必须将定界符的子顺序设置为Prefix。

此外,如果最后一行不以CR LF结尾,则必须将“根”节点(TAR210)子顺序从“后缀”更改为“中缀”

您将要用正确的字段名称替换重复字段,可以通过在重复字段之前添加一个字段来一次完成一个字段,或者将此结构应用于现有模式。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.SO55026928" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch.SO55026928" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <b:schemaInfo standard="Flat File" root_reference="TAR210" default_pad_char=" " pad_char_type="char" count_positions_by_byte="false" parser_optimization="speed" lookahead_depth="3" suppress_empty_nodes="false" generate_empty_nodes="true" allow_early_termination="false" early_terminate_optional_fields="false" allow_message_breakup_of_infix_root="false" compile_parse_tables="false" />
      <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="TAR210">
    <xs:annotation>
      <xs:appinfo>
        <b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" sequence_number="1" child_order="postfix" child_delimiter_type="hex" child_delimiter="0x0D 0x0A" />
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:annotation>
          <xs:appinfo>
            <b:groupInfo sequence_number="0" />
          </xs:appinfo>
        </xs:annotation>
        <xs:sequence maxOccurs="unbounded">
          <xs:annotation>
            <xs:appinfo>
              <b:groupInfo sequence_number="1" />
            </xs:appinfo>
          </xs:annotation>
          <xs:element name="Level1">
            <xs:annotation>
              <xs:appinfo>
                <b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" repeating_delimiter="," sequence_number="1" tag_name="Level1" child_order="prefix" />
              </xs:appinfo>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:annotation>
                  <xs:appinfo>
                    <b:groupInfo sequence_number="0" />
                  </xs:appinfo>
                </xs:annotation>
                <xs:element maxOccurs="unbounded" name="Field" type="xs:string">
                  <xs:annotation>
                    <xs:appinfo>
                      <b:fieldInfo justification="left" sequence_number="1" />
                    </xs:appinfo>
                  </xs:annotation>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element maxOccurs="unbounded" name="Level4">
            <xs:annotation>
              <xs:appinfo>
                <b:recordInfo sequence_number="2" structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" repeating_delimiter="," tag_name="Level4" child_order="prefix" />
              </xs:appinfo>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:annotation>
                  <xs:appinfo>
                    <b:groupInfo sequence_number="0" />
                  </xs:appinfo>
                </xs:annotation>
                <xs:element maxOccurs="unbounded" name="Field" type="xs:string">
                  <xs:annotation>
                    <xs:appinfo>
                      <b:fieldInfo justification="left" sequence_number="1" />
                    </xs:appinfo>
                  </xs:annotation>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>