少しトリッキーなマッピング要件があります。BizTalk マッパーを使用して、BizTalk アプリケーションで着信 xml をあるフォームから別のフォームに変換する作業を行っています。このソリューションは、XSLT を使用するか、BizTalk Functoid に組み込まれて実行できます。
ソース スキーマは次のようになります。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://BizTalkTestProject.SourceSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://BizTalkTestProject.SourceSchema">
<xs:element name="Coverages">
<xs:complexType>
<xs:sequence>
<xs:element name="Coverage" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Category" type="xs:string"/>
<xs:element name="BillingChargeType" type="xs:string"/>
<xs:element name="ASLCode" type="xs:string"/>
<xs:element name="EffectiveDate" type="xs:string"/>
<xs:element name="DeltaAmount" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
宛先スキーマは次のようになります。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://BizTalkTestProject.DestinationSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://BizTalkTestProject.DestinationSchema">
<xs:element name="Categories" type="CategoriesType"/>
<xs:complexType name="CategoriesType">
<xs:sequence>
<xs:element name="Premium" type="CommonElementsType" maxOccurs="unbounded"/>
<xs:element name="Tax" type="CommonElementsType" maxOccurs="unbounded"/>
<xs:element name="Fee" type="CommonElementsType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CommonElementsType">
<xs:sequence>
<xs:element name="CategoryDetail" type="CategoryDetailType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CategoryDetailType">
<xs:sequence>
<xs:element name="Type" type="xs:string"/>
<xs:element name="AnnualStatementLine" type="xs:string"/>
<xs:element name="Amount" type="xs:string"/>
<xs:element name="ChangeEffectiveDate" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
着信 xml データの例:
<ns0:Coverages xmlns:ns0="http://BizTalkTestProject.SourceSchema">
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 2</BillingChargeType>
<ASLCode>premium ASLCode 2</ASLCode>
<EffectiveDate>2002-02-02</EffectiveDate>
<DeltaAmount>22.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 1</BillingChargeType>
<ASLCode>premium ASLCode 1</ASLCode>
<EffectiveDate>2001-01-01</EffectiveDate>
<DeltaAmount>11.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 1</BillingChargeType>
<ASLCode>premium ASLCode 2</ASLCode>
<EffectiveDate>2001-01-01</EffectiveDate>
<DeltaAmount>121.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 1</BillingChargeType>
<ASLCode>premium ASLCode 1</ASLCode>
<EffectiveDate>2002-02-02</EffectiveDate>
<DeltaAmount>112.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 3</BillingChargeType>
<ASLCode>premium ASLCode 3</ASLCode>
<EffectiveDate>2003-03-03</EffectiveDate>
<DeltaAmount>33.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>premium</Category>
<BillingChargeType>premium BillingChargeType 1</BillingChargeType>
<ASLCode>premium ASLCode 1</ASLCode>
<EffectiveDate>2001-01-01</EffectiveDate>
<DeltaAmount>5.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>tax</Category>
<BillingChargeType>tax BillingChargeType 4</BillingChargeType>
<ASLCode>tax ASLCode 4</ASLCode>
<EffectiveDate>2004-04-04</EffectiveDate>
<DeltaAmount>44.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>tax</Category>
<BillingChargeType>tax BillingChargeType 5</BillingChargeType>
<ASLCode>tax ASLCode 5</ASLCode>
<EffectiveDate>2005-05-05</EffectiveDate>
<DeltaAmount>55.00</DeltaAmount>
</Coverage>
<Coverage>
<Category>fee</Category>
<BillingChargeType>fee BillingChargeType 6</BillingChargeType>
<ASLCode>fee ASLCode 6</ASLCode>
<EffectiveDate>2006-06-06</EffectiveDate>
<DeltaAmount>66.00</DeltaAmount>
</Coverage>
</ns0:Coverages>
予期される出力 xml は次のようになります。
<ns0:Categories xmlns:ns0="http://BizTalkTestProject.DestinationSchema">
<Premium>
<CategoryDetail>
<Type>premium BillingChargeType 2</Type>
<AnnualStatementLine>premium ASLCode 2</AnnualStatementLine>
<Amount>22.00</Amount>
<ChangeEffectiveDate>2002-02-02</ChangeEffectiveDate>
</CategoryDetail>
<CategoryDetail>
<Type>premium BillingChargeType 1</Type>
<AnnualStatementLine>premium ASLCode 1</AnnualStatementLine>
<Amount>16.00</Amount>
<ChangeEffectiveDate>2001-01-01</ChangeEffectiveDate>
</CategoryDetail>
<CategoryDetail>
<Type>premium BillingChargeType 1</Type>
<AnnualStatementLine>premium ASLCode 2</AnnualStatementLine>
<Amount>121.11</Amount>
<ChangeEffectiveDate>2001-01-01</ChangeEffectiveDate>
</CategoryDetail>
<CategoryDetail>
<Type>premium BillingChargeType 1</Type>
<AnnualStatementLine>premium ASLCode 1</AnnualStatementLine>
<Amount>112.22</Amount>
<ChangeEffectiveDate>2002-02-02</ChangeEffectiveDate>
</CategoryDetail>
<CategoryDetail>
<Type>premium BillingChargeType 3</Type>
<AnnualStatementLine>premium ASLCode 3</AnnualStatementLine>
<Amount>33.00</Amount>
<ChangeEffectiveDate>2003-03-03</ChangeEffectiveDate>
</CategoryDetail>
</Premium>
<Tax>
<CategoryDetail>
<Type>tax BillingChargeType 4</Type>
<AnnualStatementLine>tax ASLCode 4</AnnualStatementLine>
<Amount>44.00</Amount>
<ChangeEffectiveDate>2004-04-04</ChangeEffectiveDate>
</CategoryDetail>
<CategoryDetail>
<Type>tax BillingChargeType 5</Type>
<AnnualStatementLine>tax ASLCode 5</AnnualStatementLine>
<Amount>55.00</Amount>
<ChangeEffectiveDate>2005-05-05</ChangeEffectiveDate>
</CategoryDetail>
</Tax>
<Fee>
<CategoryDetail>
<Type>fee BillingChargeType 6</Type>
<AnnualStatementLine>fee ASLCode 6</AnnualStatementLine>
<Amount>66.00</Amount>
<ChangeEffectiveDate>2006-06-06</ChangeEffectiveDate>
</CategoryDetail>
</Fee>
</ns0:Categories>
マッピング要件は次のとおりです。 1. ソース xml の Category 要素の値が「Premium」の場合、Categories/Premium の下の宛先にマッピングする必要があります。2. ソース xml の Category 要素の値が「Tax」の場合、Categories/Tax の下の宛先にマップされる必要があります。3. ソース xml の Category 要素の値が「Fee」の場合、Categories/Fee の下の宛先にマップされる必要があります。4. 出力には、Category、BillingChargeType、ALSCode、EffectiveDate ごとに異なるレコード セットのみが含まれている必要があります。5.出力には、宛先ノード「Amount」のソースノード「DeltaAmount」の集計値が、Category、BillingChargeType、ALSCode、およびEffectiveDateごとに含まれている必要があります
サンプル xml には、「Premium」ノードの集計例が含まれています。
<BillingChargeType>premium BillingChargeType 1</BillingChargeType>
<ASLCode>premium ASLCode 1</ASLCode>
<EffectiveDate>2001-01-01</EffectiveDate>
上記の 3 つのノードを持つ 2 つのカバレッジ レコード セットがあります。その二つの違いは
<DeltaAmount>11.00</DeltaAmount> and <DeltaAmount>5.00</DeltaAmount>
予想される出力では、1 つのみが DeltaAmount ノード = 16 でマップされていることがわかります。
apply-templates と for-each ループを使用して key、distinct、generate-id を使用して xslt でマッピングを試みましたが、必要な結果が得られませんでした。だから私はあなたの助けを求めるためにここにいます。さらに情報が必要な場合はお知らせください。
ご覧いただきありがとうございます。ご協力いただきありがとうございます。ムクンド