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

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

2 ответа

Решение

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

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

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

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

Это хорошо соответствует следующей схеме в BizTalk:

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

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

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

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

Поэтому вы должны установить Child Delimiter Type в None,

Заголовок, GroupTrailer и Trailer Records

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

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

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

Структуры Тип07, Тип08, Тип09 и Тип10

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

Один из способов взглянуть на эти структуры состоит в том, что они содержат повторяющиеся записи, каждая из которых ограничена конечным 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, Postfix, идентификатор тэга 00,

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам