0

我创建了两个独立的地图,每个地图的来源都来自 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。

如果您需要更多信息,请与我们联系。

4

2 回答 2

1

好吧……不要那样做。 ;) 虽然在 XSL 中支持选择模板,但它会破坏 Mapper。

正确的 BizTalk 方式是使用 Mapper 为您的 Invoice 和 ConsolidatedInvoice Map,就像您已经完成的那样,然后决定在 Maps 之外应用哪个,例如在Orchestration中。

为此添加或使用编排没有任何问题。 不要担心“性能”。

另一个选项是升级属性、发送端口过滤器和环回适配器

于 2018-03-12T12:32:15.003 回答
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>
于 2018-03-12T12:08:28.657 回答