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: 1Type07
: С разделителями, нет, условное значение по умолчанию.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. Я могу дать вам больше подробностей, если вам нужно пойти по этому пути.