Biztalk Flat File Преобразование нескольких несвязанных записей, вызывающих непредвиденную ошибку в данных - PullRequest
0 голосов
/ 23 февраля 2011

Я пытаюсь импортировать плоский файл в базу данных 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 ]

2 голосов
/ 08 марта 2011

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

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

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

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

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

Flat File Schema Structure

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

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

Запись 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_RecordType09_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.

0 голосов
/ 27 февраля 2011

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

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

...