Избегайте дубликатов в схеме назначения

У меня небольшая проблема. Я хочу сопоставить каждую линию детали с одним 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 (что может чтобы решить эту задачу более естественно).

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