BizTalk HIPAA EDI多输入映射不';t生成节点

BizTalk HIPAA EDI多输入映射不';t生成节点,biztalk,edi,biztalk-mapper,Biztalk,Edi,Biztalk Mapper,两年前我曾问过这个问题(),但后来项目被搁置了,我再也没有做任何进一步的测试。我不得不再次掸掉灰尘,再加上一些细节和截图 我有一个BizTalk HIPAA解决方案,需要将837声明模式与系统中的一些数据合并。我们使用一个具有两个输入模式的映射来实现这一点,如下所示: (为了测试的目的,我已经大大简化了模式)。 我的原始帖子的公认答案(使用相等的functoid和值映射器)适用于我最初展示的简单模式,但在实际的EDI模式中失败 在第一条输入消息中,如果IsRepriced=1,我想使用HCP_

两年前我曾问过这个问题(),但后来项目被搁置了,我再也没有做任何进一步的测试。我不得不再次掸掉灰尘,再加上一些细节和截图

我有一个BizTalk HIPAA解决方案,需要将837声明模式与系统中的一些数据合并。我们使用一个具有两个输入模式的映射来实现这一点,如下所示:

(为了测试的目的,我已经大大简化了模式)。 我的原始帖子的公认答案(使用相等的functoid和值映射器)适用于我最初展示的简单模式,但在实际的EDI模式中失败

在第一条输入消息中,如果IsRepriced=1,我想使用HCP_01、HCP_02和HCP_03的值。如果为0,则使用第二条消息(原始837声明)中的值。只要原始837声明实际包含HCP节点(段),显示的functoid就可以正常工作,但如果它不存在,我无法从数据生成一个

使用一些if-then-else C#代码将这些替换为脚本functoid具有相同的效果

那么,有没有一种方法可以使用functoid实现这一点,或者我需要求助于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>

我经常用地图上的if missing else paradign撞到砖墙。有时循环functoid起作用,有时不起作用。有时一个精心安排的逻辑存在->不起作用,有时不起作用

这主要是因为,如果其中一个源记录为minOccurs=0,映射程序会将所有内容都封装在一个for-each中。因为元素不存在,所以代码永远不会执行

我会说>50%,我求助于内联Xslt,因为在某种程度上,它比大部分重复Functoid组的页面更干净

然而,我敢打赌Xslt不会像您所想的那么困难。地图绘制者可以为您完成大部分工作。您可以使用functoid构建大部分映射,然后只复制生成的Xslt。您必须修改某些内容,例如名称空间

(同一答案)