Схема BizTalk FlatFile / CSV - PullRequest
       36

Схема BizTalk FlatFile / CSV

0 голосов
/ 06 марта 2019

Я выполняю рефакторинг приложения BizTalk.Существующая схема имеет нижеприведенную структуру, представляющую счет-фактуру, где Level1 - заголовок, а Level 4 - несколько позиций.

enter image description here

В старой версии 2010 года приложение выписывает данные по одному счету за раз и имеет конвейер отправки, используя схему плоского файла,Мы пытаемся улучшить старые системы и перенести их на 2013 год.

Я добавил конвейер получения, чтобы считывать данные обратно, и он отлично работает для одного счета.Но если в файле есть несколько счетов-фактур, он терпит неудачу.

Могу ли я настроить схему, которая у меня уже есть (вместо необходимости повторного запуска мастера), чтобы можно было использовать несколько счетов в одном файле?Например, добавить запись «Счет-фактура», которая содержит как Level1, так и Level4?

[Конечная цель также состоит в том, чтобы добавить уровень 0, который включает в себя общее количество счетов за день, и сделать это на карте по сравнению с конвейером в соответствии с предпочтениями нашего архитектора.]

Я попробовал следующее и получил эту ошибку:

Причина: неожиданный конец потока при поиске: ','

Я использовал подобные шаги для Несколько повторяющихся записей схемы BizTalk FlatFile :

  1. Добавлена ​​запись счета-фактуры и помещены под нее уровень 1 и уровень 4.
  2. Установить запись как несвязанную
  3. Установить дочерний инфикс
  4. Тип дочернего разделителя Hex
  5. Дочерний разделитель 0x0D 0x0A

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 Ответ

1 голос
/ 06 марта 2019

Вот схема, которая будет анализировать ваш файл.

Обратите внимание, что как у узла <Sequence>, так и у Level4 Макс. Количество событий не ограничено.

Schema structure

Хитрость при использовании тегов заключается в том, что вы должны либо включить в тег первый разделитель, либо установить для параметра «Детский порядок разделителя» значение «Префикс», если сначала не требуется пустое поле.

Также, если ваша последняя строка не заканчивается CR LF, вы должны изменить дочерний порядок корневого узла (TAR210) с Postfix на Infix

Вы захотите либо заменить повторяющееся поле правильными именами полей, вы можете сделать это одно поле за раз, добавив его перед повторяющимся, или применить эту структуру к существующей схеме.

<?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>
...