Плоский файл Biztalk Преобразование нескольких несвязанных записей, вызывающих непредвиденную ошибку данных

Я пытаюсь импортировать плоский файл в базу данных SQL через Biztalk 2006 R2. Входной файл имеет следующую компоновку, в которой каждая строка разделена символом 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

В любом случае, я запустил мастер плоских файлов, и он создал XML, но даже с выбранным «Повторением записей» он установил минимальное и максимальное количество вхождений 07,08,09 и 10. Я изменил минимальное значение на 0 и максимальное на безграничный. Теперь, что бы я ни делал, я получаю неожиданные данные, обнаруженные при поиске ошибки: '\ r \ n' при проверке. Я попытался установить дочерний порядок по умолчанию на Postfix и дочерний порядок корня на Infix и Postfix. Кажется, ничего не помогает.


person SpaceCowboy74    schedule 23.02.2011    source источник
comment
Под лишним CR / LF вы подразумеваете пустую строку между каждой записью?   -  person Shiraz Bhaiji    schedule 23.02.2011
comment
Нет, каждая линия заканчивается CR / LF. Однако в конце файла есть одна пустая строка.   -  person SpaceCowboy74    schedule 23.02.2011
comment
На самом деле, насколько мне известно, использование Мастера плоских файлов только для таких структур невозможно. Вам всегда нужно настраивать различные свойства постфактум. Однако вы можете использовать его для получения приблизительного наброска желаемой структуры. Я дал ответ ниже; пожалуйста, дайте мне знать, если вы хотите, чтобы я завершил свой ответ пошаговым руководством с использованием мастера схемы плоских файлов.   -  person Maxime Labelle    schedule 08.03.2011


Ответы (2)


Создание схемы с нуля

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

Итак, ваш пример вызывает схему, которая имеет следующую структуру:

Одна запись Header с типом 00, за которым следует последовательность записей с типом 07, 08, 09 и 10 соответственно. Каждая типизированная запись сама по себе является структурой, которая содержит любое количество повторяющихся записей. Наконец, структура заканчивается одной GroupTrailer записью, набранной 16, за которой следует общая Trailerзапись, набранная 17.

Это прекрасно соответствует следующей схеме в BizTalk:

Структура схемы плоского файла

Теперь вам нужно настроить различные свойства узлов, чтобы указать дизассемблеру плоских файлов, как анализировать входящие сообщения.

Корневая запись

Запись Root предназначена только для группирования различных дочерних записей вместе и требуется для правильно структурированного XML-документа. Однако он не участвует в разборе входящей структуры.

Следовательно, вы должны установить Child Delimiter Type на None.

Записи заголовка, группового трейлера и трейлера

Записи Header, GroupTrailer и Trailer появляются каждый раз, поэтому оставьте для их свойств Min Occurs и Max Occurs значение по умолчанию 1.

Кроме того, каждая из этих записей обозначается соответствующим Tag Identifier из 00, 16 и 17 соответственно.

Наконец, каждая из этих записей заканчивается парой или символами CR / LF в конце. Поэтому установите их свойства Child Delimiter Type на Hexadecimal, а их свойства Child Order на Postfix.

Структуры Type07, Type08, Type09 и Type10

Это сложная часть.

Один из способов взглянуть на эти структуры - это то, что они содержат повторяющиеся записи, каждая из которых разделена завершающим CR / LF. Однако сами структуры появляются только один раз.

Другой важный момент заключается в том, что вам нужна только одна пара CR / LF в качестве разделителя как для структур, так и для их дочерних записей. Итак, настройки свойств Child Delimiter Type должны это отражать.

Для записей Type07, Type08, Type09 и Type10 оставьте настройки по умолчанию. То есть установите для свойства Child Delimiter Type значение None, а для свойства Child Order значение Conditional Default. В частности, для этих записей не установлено Tag Identifier.

Структуры Type07_Record, Type08_Record, Type09_Record и Type10_Record

Однако Type07_Record, Type08_Record, Type09_Record и Type10_Record настроены на повторение несколько раз. Установите их свойства Min Occurs на 0 и свойства Max Occurs на unbounded.

Кроме того, каждая повторяющаяся запись заканчивается завершающей парой CR / LF. Поэтому установите их свойства Child Delimiter Type на Hexadecimal, их свойства Child Order на Postfix и их свойства Child Delimiter на 0x0D 0x0A.

Ссылка

Для справки, результирующие настройки:

  • Root: с разделителями, нет, условное значение по умолчанию.

  • Header: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 00.

  • <Sequence>: (необязательно), MinOccurs: 1, MaxOccurs: 1

  • Type07: с разделителями, нет, условное значение по умолчанию.

  • Type07_Record: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 07.

  • Type08: с разделителями, нет, условное значение по умолчанию.

  • Type08_Record: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 08.

  • Type09: с разделителями, нет, условное значение по умолчанию.

  • Type09_Record: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 09.

  • Type10: с разделителями, нет, условное значение по умолчанию.

  • Type10_Record: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 10.

  • GroupTrailer: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 16.

  • Trailer: с разделителями, шестнадцатеричный, 0x0D 0x0A, постфиксный, идентификатор тега 17.

person Maxime Labelle    schedule 08.03.2011

Есть несколько способов исправить это. Во-первых, на вашем узле схемы уровня записи есть свойство, которое позволяет игнорировать / подавлять завершающие разделители. Однако вы можете столкнуться с проблемами, если этот дополнительный / r / n не будет постоянно встречаться с I. Ваш файл.

Второй вариант - добавить дополнительный узел записи, не имеющий столбцов и имеющий min = 0 и max = 1. Я могу дать вам больше подробностей, если вам нужно пойти этим путем.

person JAgostoni    schedule 27.02.2011