避免在目标架构中重复

时间:2016-04-07 15:20:45

标签: schema biztalk biztalk-mapper

我有点问题。我想将每个细节线映射到一个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 个答案:

答案 0 :(得分:2)

如果你想纯粹在XSLT中这样做,你将不得不使用Muenchian gruoping。我写了一篇博客,链接到其他一些关于如何在BizTalk中执行此操作的博客:https://blog.tallan.com/2014/12/09/muenchian-grouping-in-biztalk-while-keeping-mapper-functionality/

总结一下博客:如果你追求这个,你需要一个完全自定义XSLT的地图,但如果你仍然希望能够使用它,你可以把它放到自定义管道组件中&#34;定期&#34;在没有任何其他警告的情况下映射功能(在我的博客中,我描述了在管道组件中执行此操作的方法,以便仍然可以在预处理的输出上使用常规&#34; BizTalk映射)。 Muenchian分组有很多资源(包括StackOverflow),所以我不会在这个答案中重复所有这些。

您还可以尝试在C#组件中序列化消息并使用一些LINQ方法对/ sort / order / etc进行分组,或者如果您在某些时候将内容插入SQL,则可以在SQL中执行此操作(这将能够更自然地处理这种任务)。