次の方法で共有


基本のマッピング操作と複雑なマッピング操作

BizTalk マッパーは、単純な親子ツリー型の操作から、ループ レコードや階層を含む詳細で複雑な操作まで、さまざまなマッピング シナリオに対するソリューションを提供します。 マッピング シナリオの複雑さは、ユーザーの好みとビジネス ニーズによって異なります。XML スキーマ定義 (XSD) 言語を使用すると、構造化形式を定義する際に柔軟性が高まります。 ほぼすべてのマッピング シナリオは、2 つのカテゴリ (基本的なマッピングと複雑なマッピング) のいずれかに分類されます。

基本的なマッピング

基本的なマッピングとは、最も一般的なマッピングのことをいいます。 基本的なマップでは、入力項目と出力項目が 1 対 1 の関係になります。 入力項目は、対応する 1 つの出力項目にのみマップされます。 複数の Functoid やカスケード Functoid を使用してコピーされる値を操作するなど、基本的なマッピングでは多くの種類の変換と変換が可能ですが、基になるシナリオは比較的単純なままです。 基本的なマッピング操作では、2 つの異なる親レコード (一度だけ発生する) に属するフィールドを、送信先スキーマの単一の親レコードに属するフィールドへマッピングすることもあります。

複雑なマッピング

複雑なマッピングには、スキーマ ツリーの Record ノードまたは Field Element ノードの 1 つのインスタンスに対して複数回発生するレコードまたはフィールドが含まれます。 このようなノードの Max Occurs プロパティは 1 より大きい値に設定され、インスタンス メッセージに対応する要素が複数存在する可能性があることを示します。 BizTalk マップでこの種類の変数数マッピング (ループとも呼ばれます) を使用 する場合、拡張スタイルシート言語 (XSL) スタイル シート コンパイラは、必要な出力を生成するために反復処理する適切なループ パスを決定できる必要があります。

通常、送信元スキーマのループ レコードのフィールドを、送信先スキーマのループ レコードのフィールドにリンクできます。 入力インスタンス メッセージ内にある要素の数によって、出力インスタンス メッセージ内に作成される要素の数が決まります。 送信元スキーマおよび送信先スキーマを基にした、次の XSD フラグメントを考えてみます。

送信元スキーマのフラグメント

<xs:element minOccurs="1" maxOccurs="5"  
            name="SrcLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
    </xs:sequence>  
  </xs:complexType>  
</xs:element>  
  

送信先スキーマのフラグメント

<xs:element minOccurs="0" maxOccurs="unbounded"  
            name="DstLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
      </xs:sequence>  
    </xs:complexType>  
  </xs:element>  
  

これらのフラグメントを説明します。

  • 入力インスタンス メッセージの Record ノードである SrcLoopingRecord は、1 回から 5 回まで発生する可能性があります。 また、親の各インスタンスに対して 1 回発生する Field1 (文字列) ノードと Field2 (整数) の子 Field 要素ノードも含まれます。

  • 出力インスタンス メッセージの Record ノードである DstLoopingRecord は、無制限の 0 回以上発生する可能性があります。 また、親の各インスタンスに対して 1 回発生する FieldA (文字列) ノードと FieldB (整数) の子 Field 要素ノードも含まれます。

    Field1 と FieldA、および Field2 と FieldB がマップされ、次に示す入力インスタンス メッセージのフラグメントがこれらをマップすると仮定した場合、出力インスタンス メッセージから次のフラグメントが生成されます。

入力インスタンス メッセージのフラグメント

<SrcLoopingRecord>  
    <Field1>A string</Field1>  
    <Field2>10</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>Another string</Field1>  
    <Field2>11</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>A ball of string</Field1>  
    <Field2>12</Field2>  
</SrcLoopingRecord>  

出力インスタンス メッセージのフラグメント

<DstLoopingRecord>  
    <FieldA>A string</FieldA>  
    <FieldB>10</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
  <FieldA>Another string</FieldA>  
  <FieldB>11</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
    <FieldA>A ball of string</FieldA>  
    <FieldB>12</FieldB>  
</DstLoopingRecord>  

入力インスタンス メッセージ (3) 内の SrcLoopingRecord 要素の出現回数によって、出力インスタンス メッセージ内の DstLoopingRecord 要素の出現回数が決まります。

BizTalk マッパーでサポートされていないマッピングでは、複数のループ パスが使用されます。 このようなマッピングでは、送信元スキーマの 2 つ以上のループ レコードに属するフィールドから、送信先スキーマの単一のルーピング レコードに属するフィールドへのマップ操作が行われます。 これにより問題が発生します。出力インスタンス メッセージで生成する要素の数を決定する効果的な方法はありません。 複数のループ パスを使用すると、送信先ノードが複数の送信元ループ パスを持つことを示す、マップのコンパイル警告が発生します。 ただし、これは単なる警告であり、最初の送信元ループ パスの繰り返し回数が使用されて、出力インスタンス メッセージに生成される要素の数が決定されます。 ループの動作を明示的に制御するには、ループ functoid 使用します。

Microsoft BizTalk Serverでは、テーブル駆動型ループと呼ばれる新しい種類のループが導入されました。 1 つ以上の定数、送信元スキーマからのリンク、または Functoid を組み合わせた入力インスタンス メッセージのデータに基づいて、出力インスタンス メッセージを使用する必要がある場合、テーブルドリブン ループは便利です。 この場合、出力インスタンス メッセージは、異なる定数を組み合わせた入力インスタンス メッセージの単一のレコードのデータに基づいて (または、入力インスタンス メッセージの複数のレコードのデータに基づいて)、複数のレコードを持つことができます。 テーブル ループとテーブル抽出 Functoid を使用したテーブル駆動型ループの詳細については、「テーブル ループとテーブル抽出 Functoid」を参照してください。

参照

マップ
BizTalk マッパーでのマップの作成