我有点问题。我想将每个细节线映射到一个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>
答案 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中执行此操作(这将能够更自然地处理这种任务)。