0

私は 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>
4

1 に答える 1

2

私は、マップ内の if missing-else パラディンでレンガの壁にぶつかることがよくあります。ループ Functioid がうまくいく場合もあれば、うまくいかない場合もあります。慎重に配置された論理的存在 -> 機能しない場合もあれば、機能しない場合もあります。

これは主に、ソース レコードの 1 つが minOccurs=0 の場合、Mapper がすべてを for-each でラップするためです。Element が存在しないため、コードが実行されることはありません。

私は 50% を超えると思います。インライン Xslt に頼っています。ある時点で、ほぼ重複した Functoid グループのページよりもクリーンになるからです。

ただし、Xslt はあなたが考えるほど難しい提案にはならないでしょう。Mapper はほとんどの作業を行うことができます。Functoids を使用してマップの大部分を構築し、結果の Xslt をコピーするだけです。名前空間など、いくつかの変更が必要になります。

(同じ答え)

于 2013-12-17T18:36:19.190 に答える