Избегайте дубликатов в схеме назначения
У меня небольшая проблема. Я хочу сопоставить каждую линию детали с одним OrderInfo. Схема назначения не может иметь дубликатов OrderInfo. Все подробные строки должны быть в целевом порядке orderInfo, но SuppliersOrderNo и BuyersOrderNo не должны быть дважды.
Любые идеи, как это сделать, можно ли использовать XSL или встроенный скрипт?
<inv:OrderInfo>
<inv:SuppliersOrderNo>123456</inv:SuppliersOrderNo>
<inv:BuyersOrderNo>6789</inv:BuyersOrderNo>
<inv:DetailLines>
<inv:DetailLine>
<inv:InvoiceDetailLineNo>1</inv:InvoiceDetailLineNo>
<inv:Item>
<inv:SuppliersArticleNo>article2</inv:SuppliersArticleNo>
<inv:SuppliersDescription>BestArticle</inv:SuppliersDescription>
</inv:Item>
</inv:DetailLine>
<inv:DetailLine>
<inv:InvoiceDetailLineNo>2</inv:InvoiceDetailLineNo>
<inv:Item>
<inv:SuppliersArticleNo>article3</inv:SuppliersArticleNo>
<inv:SuppliersDescription>AlmostBestArticle</inv:SuppliersDescription>
</inv:Item>
</inv:DetailLine>
</inv:DetailLines>
</inv:OrderInfo>
<inv:OrderInfo>
<inv:SuppliersOrderNo>123456</inv:SuppliersOrderNo>
<inv:BuyersOrderNo>6789</inv:BuyersOrderNo>
<inv:DetailLines>
<inv:DetailLine>
<inv:InvoiceDetailLineNo>1</inv:InvoiceDetailLineNo>
<inv:Item>
<inv:SuppliersArticleNo>article1337</inv:SuppliersArticleNo>
<inv:SuppliersDescription>WOW</inv:SuppliersDescription>
</inv:Item>
</inv:DetailLine>
</inv:DetailLines>
</inv:OrderInfo>
1 ответ
Если вы хотите сделать это исключительно в XSLT, вам придется использовать мюнхенскую группировку. Я недавно написал блог, который ссылается на некоторые другие блоги о том, как сделать это в BizTalk: https://blog.tallan.com/2014/12/09/muenchian-grouping-in-biztalk-while-keeping-mapper-functionality/ while- keeping- картостроитель-функциональность /
Подводя итоги блога: если вы будете заниматься этим, вам понадобится карта с полностью настраиваемым XSLT где-то, но вы можете поместить ее в пользовательский конвейерный компонент, если вы все еще хотите иметь возможность использовать "обычные" функции карт без каких-либо других предупреждений. (в моем блоге я описываю способ сделать это в конвейерном компоненте, чтобы "обычная" карта BizTalk все еще могла использоваться в предварительно обработанном выводе). Существует множество ресурсов по группировке Muenchian (в том числе по Stackru), поэтому я не перефразирую все это в этом ответе.
Вы также можете попытаться сериализовать сообщение в компоненте C# и использовать некоторые методы LINQ для группировки / сортировки / упорядочивания / и т. Д., Или, если в какой-то момент вы вставляете содержимое в SQL, вы можете сделать это в SQL (что может чтобы решить эту задачу более естественно).