BizTalk FF Disassembler - работает только с очень маленькими файлами - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть решение BizTalk 2016 / VS 2015.Существует простая схема плоского файла, которая запускает каждую строку, имея повторяющийся элемент записи, для свойства которого «Max Occurs» установлено значение 0.

Часть схемы «config» можно увидеть ниже:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
      <b:schemaInfo standard="Flat File" codepage="65001" 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="true" early_terminate_optional_fields="true" allow_message_breakup_of_infix_root="true" compile_parse_tables="false" root_reference="Employee" />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="Employee">
    <xs:annotation>
      <xs:appinfo>
        <b:recordInfo structure="delimited" child_delimiter_type="hex" child_delimiter="0xA" child_order="postfix" sequence_number="1" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" />
        <b:properties>
          <b:property distinguished="true" xpath="/*[local-name()='Employee' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='Data' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='NiNumber' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']" />
          <b:property distinguished="true" xpath="/*[local-name()='Employee' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='Data' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='OrgLeaveDate' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']" />
          <b:property distinguished="true" xpath="/*[local-name()='Employee' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='Data' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='PosLeaveDate' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']" />
          <b:property distinguished="true" xpath="/*[local-name()='Employee' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='Data' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']/*[local-name()='PostStartDate' and namespace-uri()='http://LCC.Integration.Employees.Schemas.SAP.SapEmployee_FF']" />
        </b:properties>
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:annotation>
          <xs:appinfo>
            <groupInfo sequence_number="0" xmlns="http://schemas.microsoft.com/BizTalk/2003" />
          </xs:appinfo>
        </xs:annotation>
        <xs:element maxOccurs="1" name="Data">
          <xs:annotation>
            <xs:appinfo>
              <b:recordInfo structure="delimited" child_delimiter_type="hex" child_delimiter="0x9" child_order="infix" sequence_number="1" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" />
            </xs:appinfo>
          </xs:annotation>
          <xs:complexType>

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

Единственная немного необычная вещь в схеме плоского файла - это то, что последний элемент «PostStartDate» имеет значение атрибута micOccurs, равное 0. Это потому, что есть пара провайдеров этого документа и один из провайдеров.не включает столбец "PostStartDate".

Я установил место получения, содержащее дизассемблер FF.Он имеет свойство DocumentSpecName, установленное на свойство схемы.Все остальные свойства по умолчанию.

Единственный подписчик на этот прием - это порт отправки, который отправляет в локальную папку.

Если я перетаскиваю плоский файл с 3 строками, все работает нормально.Однако, если я добавлю еще несколько строк (всего 7 в этом примере), то BizTalk приостанавливает работу в месте получения с ошибкой: «Механизм обмена сообщениями обнаружил ошибку при обработке одного или нескольких входящих сообщений».В журнале событий я вижу ошибку:

There was a failure executing the receive pipeline: "LCC.Integration.Common.Pipelines.RcvArchiveFF, LCC.Integration.Common.Pipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ff3873c2d0a7e656" Source: "Flat file disassembler" Receive Port: "SharePoint.Employees.Receive.SAPExtract" URI: "D:\FileDrop\Employees\In\*.txt" Reason: Unexpected data found while looking for:
'\t'
The current definition being parsed is Employee. The stream offset where the error occured is 1813. The line number where the error occured is 8. The column where the error occured is 0.

Еще одна вещь, которую я заметил, если я удаляю конечный LF из последней строки в файле, тогда он работает - независимо от количества строк.

Я сделал скриншот для демонстрации проблемы: Скринкаст проблемы

Я создал пример решения, чтобы продемонстрировать проблему.Это доступно в следующем репозитории github: https://github.com/RobBowman/BizTalkFFProblem

Есть идеи?

1 Ответ

0 голосов
/ 18 сентября 2018

Редактировать: я только что попробовал ваш пример GitHub в BizTalk 2013R2, и он работает без изменений.

Edit2: сломан, когда> 20 строк.

Edit3: теперь я понимаю, что это не поддерживается на самом деле, параметр: «Разрешить разрыв сообщения при Infix Root«... ваша схема не инфиксная, а postfix.Разгрузка FlatFiles на дизассемблере поддерживается только при infix.Если возможно, сделайте так, чтобы ваша схема поддерживала infix, тогда она будет работать.

...