2 年前我曾问过这个问题(BizTalk 多输入地图问题),但随后该项目被搁置,我从未进行任何进一步的测试。我不得不再次对其进行除尘,并提供更多详细信息和屏幕截图。
我有一个 BizTalk HIPAA 解决方案,需要将 837 声明架构与我们系统中的一些数据合并。我们使用具有两个输入模式的映射来执行此操作,如下所示:
(出于测试目的,我已经大大简化了模式)。对我的原始帖子的接受答案(使用相等的 functoid 和值映射器)适用于我最初展示的简单模式,但在实际 EDI 模式中失败。
在第一条输入消息中,如果 IsReprice = 1,我想将我们的值用于 HCP_01、HCP_02 和 HCP_03。如果为 0,则使用第二条消息(原始 837 声明)中的值。只要原始 837 声明实际上包含 HCP 节点(段),显示的 functoid 就可以正常工作,但如果它不存在,我将无法从我们的数据中生成一个。
使用一些 if-then-else C# 代码将它们替换为脚本 functoid 具有相同的效果。
那么,有没有办法使用 functoids 来做到这一点,还是我需要求助于 XSLT?不幸的是,我对 XSLT 几乎一无所知,所以这将是困难的......
谢谢!
编辑:我会使用内联 XSLT 调用模板,使用以下代码:
<xsl:template name="Repricing_2000B_HCP">
<xsl:param name="IsRepriced" />
<xsl:choose>
<xsl:when test="$IsRepriced='1'">
<xsl:for-each select="//InputMessagePart_1/ns0:X12_00401_837_I/ns0:TS837Q3_2000A_Loop/ns0:TS837Q3_2000B_Loop/ns0:TS837Q3_2300_Loop/ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300">
<xsl:element name="ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300">
<xsl:copy-of select="./@*" />
<xsl:copy-of select="./*" />
</xsl:element>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="//InputMessagePart_0/ns0:X12_00401_837_I/ns0:TS837Q3_2000A_Loop/ns0:TS837Q3_2000B_Loop/ns0:TS837Q3_2300_Loop/ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300">
<xsl:element name="ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300">
<xsl:copy-of select="./@*" />
<xsl:copy-of select="./*" />
</xsl:element>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>