我创建了两个单独的地图,每个地图都有一个CDM模式的来源。我现在必须创建第三个映射,它应该根据子类型(标题中的字段元素)选择要使用的正确映射。
现在我创建了一个Joint.xslt文件,它包含选择和使用正确映射所需的逻辑。
在我的场景中:如果子类型是'发票',则应使用一个特定的地图。如果子类型是' ConsolidatedInvoice',则应使用其他地图。
我考虑过使用xsl:if元素对子类型进行测试:
<xsl:variable name="var:InvoiceSubType" select="string(Header/InvoiceType/text())" />
<xsl:if test="$var:InvoiceSubType = 'Invoice'">
...use invoice map
</xsl:if>
但我不确定正确的方法。在组合来自两个映射的XSLT时,许多变量名称例如被复制并导致联合XSLT中的错误。
要使用联合地图,我已将其选为地图属性中的自定义XSLT路径,而源模式是CDM。
如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
嗯...... 不要这样做。 ;;)虽然XSL支持选择模板,但它会破坏Mapper。
正确的BizTalk方式是使用Mapper作为您的Invoice和ConsolidatedInvoice Map,就像您已经完成的那样,然后决定在地图之外应用哪些,例如 Orchestration
为此添加或使用Orchestration没有任何问题。不要担心“性能”。
另一个选项是推荐属性,发送端口过滤器和Loopback Adapter。
答案 1 :(得分:0)
您可以在Joint.xsl中使用XSLT的 xsl:include和xsl:import机制来同时使用它们。
然后你可以实现xsl:template来应用地图:
<xsl:template match="Header[contains(InvoiceType,'Invoice')]">
...
</xsl>
<xsl:template match="Header[contains(InvoiceType,'ConsolidatedInvoice')]">
...
</xsl>