首页 > 解决方案 > BizTalk 映射内联 XSLT 作为循环 functoid 的一部分

问题描述

我的目标是使用内联 xslt 交换地图循环的单个部分的内容。

我的地图目前有一个循环 functoid,它从源文档中获取节点数据以<Case>在目标中创建各种记录

下面我有一个当前输出的片段。

电流输出

                <ns11:Case>
                    <ns1:ActivityStatus>
                        <ns1:StatusText/>
                        <ns1:StatusDate>
                            <ns1:DateTime>2021-06-01T12:35:12</ns1:DateTime>
                        </ns1:StatusDate>
                    </ns1:ActivityStatus>
                    <ns1:ActivityReasonText>TimeCallInitiated</ns1:ActivityReasonText>
                </ns11:Case>
                
                <ns11:Case>
                    <ns1:ActivityStatus>
                        <ns1:StatusText>John Doe</ns1:StatusText>
                        <ns1:StatusDate>
                            <ns1:DateTime/>
                        </ns1:StatusDate>
                    </ns1:ActivityStatus>
                    <ns1:ActivityReasonText>CallEndedBy</ns1:ActivityReasonText>
                </ns11:Case>

                <ns11:Case>
                    ...
                </ns11:Case> #Cases continue on

CallEndedBy 案例由源文档中的以下数据提供。

样本输入

<CallCloser>
  <Id>111222333</Id>
  <Name>John Doe</Name>
</CallCloser>

具体来说,只有名称节点进入循环 functoid 以创建上面输出中看到的 Case。

但是,我需要<Name><CallCloser>记录中创建 2 个案例。额外的情况将与“CallEndedBy”完全相同,除了<ActivityReasonText>应该具有值“CallAdministratedBy”

我试图做一些像下面这样的内联 xslt 来获取单个名称值的两种情况

尝试过 XSLT

<xsl:template name="CallClose">

<xsl:param name="Name" />

<Case>
<ActivityStatus>
<StatusText><xsl:value-of select ="$Name"/></StatusText>
</ActivityStatus>
<ActivityReasonText><xsl:text>CallEndedBy</xsl:text></ActivityReasonText>
</Case>



<Case>
<ActivityStatus>
<StatusText><xsl:value-of select ="$Name"/></StatusText>
</ActivityStatus>
<ActivityReasonText><xsl:text>CallAdministratedBy</xsl:text></ActivityReasonText>
</Case>

</xsl:template>

地图示例

这在一定程度上可行,但是进入案例记录的所有其他数据都会中断。具体来说,其他案例松散了它们的<Case>标签,,将所有子节点上移一级,使 xml 不再有效。

例如,“TimeCallInitiated”最终是这样的

输出不正确

<ns1:ActivityStatus>
    <ns1:StatusText/>
    <ns1:StatusDate>
        <ns1:DateTime>2021-06-01T12:35:12</ns1:DateTime>
    </ns1:StatusDate>
</ns1:ActivityStatus>
<ns1:ActivityReasonText>TimeCallInitiated</ns1:ActivityReasonText>

实际上,我已经通过从地图生成 xslt、对其进行修改并将新版本用作地图的自定义 xslt 来创建我想要的东西。但是,如果可能的话,我希望找到一种使用内联 xslt 的方法。

有没有办法为这个案例记录添加内联 XSLT 而不会破坏其余记录?

标签: biztalkbiztalk-mapper

解决方案


推荐阅读