Пропустить элемент в сборке плоского файла BizTalk?
Мне было поручено отобразить входной XML (на самом деле SAP IDOC XML) и создать ряд плоских файлов. Каждый входной xml может давать несколько выходных файлов (один выходной файл на номер лота), поэтому я буду использовать xsl:key и функцию key() в своем отображении, основываясь на номере лота
Дело в том, что номер самой партии не будет находиться в самом файле, но имя выходного файла должно содержать значение номера этой партии.
Таким образом, вопрос на самом деле таков: могу ли я сопоставить номер партии с xml и заставить сборщик плоских файлов пропустить его при создании файла? Или есть другой способ, которым номер партии может быть применен в качестве имени файла сборкой, не имея его внутри самого файла?
2 ответа
В вашей оркестровке вы можете установить свойство контекста для каждого выходного сообщения:
msgOutput(FILE.ReceivedFileName) = "DynamicStuff";
Затем msgOutput переходит в форму отправки. В вашем порту отправки вы устанавливаете выходной файл следующим образом:
FixedStuff_%SourceFileName%.xml
Результат:
FixedStuff_DynamicStuff.xml
- Если значение не требуется в содержимом сообщения, не отображайте его. Вот и все.
- Чтобы вставить значение в имя файла, номер лота в этом случае, вам нужно будет преобразовать это значение в свойство контекста FILE.ReceivedFileName. Затем вы можете использовать макрос%SourceFileName% как часть настройки имени в порту отправки. Вы можете установить FILE.ReceivedFileName с помощью Property Promotion или xpath() в Orchestration.
Бонус: сортировка и группировка в xslt довольно громоздка, поэтому я больше так не делаю. Вместо этого вы можете использовать SQL: BizTalk: сортировка и группировка данных плоских файлов в SQL вместо XSL