私は 2 年前にこの質問をしましたが ( BizTalk マルチ入力マップの問題)、その後プロジェクトは棚上げされ、それ以上のテストは行いませんでした。詳細とスクリーンショットをいくつか追加して、もう一度ほこりを払う必要があります。
837 クレーム スキーマをシステムのデータとマージする必要がある BizTalk HIPAA ソリューションがあります。次に示すように、2 つの入力スキーマを持つマップでこれを行っています。
(テスト目的でスキーマを大幅に簡略化しました)。元の投稿に対する受け入れられた回答 (等しい Functoid と値マッパーを使用) は、最初に示したような単純なスキーマでは正常に機能しますが、実際の EDI スキーマでは失敗します。
最初の入力メッセージで、IsResensitive = 1 の場合、HCP_01、HCP_02、および HCP_03 の値を使用したいと考えています。0 の場合は、2 番目のメッセージ (元の 837 クレーム) の値を使用します。表示されている Functoid は、元の 837 クレームに実際に HCP ノード (セグメント) が含まれている限り正常に機能しますが、存在しない場合、データから生成することはできません。
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>