サンプル:記録のグループ化、および、サブグループ化

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  マッピングのデザイン > 変数の使用 >

サンプル:記録のグループ化、および、サブグループ化

このサンプルで説明されているマッピングは、 <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\ フォルダー内の DividePersonsByDepartmentIntoGroups.mfd です。

 

このマッピングは、架空の会社の社員のレコードを含む XML ファイルを処理します。社内には2つのオフィスが存在します: 「Nanonull, Inc.」 と 「Nanonull Partners, Inc」。 各オフィスには複数の部署が存在します (例えば、 「IT」、「マーケティング」 など)、また、各部署には一名以上の社員が存在します。マッピングの目的は、オフィスに関わりなく各部署から3人までで構成されているグループを作成することです。グループのサイズはデフォルトでは3名です。しかしながら、必要に応じて変更することもできます。各グループは、フォーマット"<Department Name>_GroupN" の名前を持つ個別の XML ファイルとして保存される必要があります  (例えば、 Marketing_Group1.xml、 Marketing_Group2.xml、 など )。

mf_map_DividePersons

DividePersonsByDepartmentIntoGroups.mfd

上で説明されているとおり、 マッピングの目的を達成するには、 複合型変数と(主に 関数である)他の コンポーネント型をマッピングに追加します。ソース XML 内の Department アイテムと同じ構造が変数には存在します。プロパティを表示するために変数を右クリックすると、ソースコンポーネントと同じ XML スキーマが使用されていること、および、ルート要素として Department が存在していることに気が付きます。重要な点は、各部署のコンテキスト内で変数が最初に計算され、次に各グループのコンテキスト内で計算されるように、変数には、2つのネストされた親コンテキストアイテムが存在することです (次も参照してください: 変数のコンテキストとスコープの変更)。

 

始めに、マッピングは、各部署の名前を取得するためにすべての部署を反復します (これは各グループに対応するファイル名を後に作成するために必要とされます)。これは、 group-by 関数を Department ソースアイテムに接続すること、部署名をグループ化のキーとして与えることにより達成されます。

 

次に、各部署のコンテキスト内で、2番目のグループ化が発生します。具体的には必要とされる一のグループを作成するために、マッピングが group-into-blocks 関数を呼び出します。デフォルトの値が "3" である単純型のコンポーネントが各グループのサイズを提供します。デフォルトの値は、定数により与えられます。グループのサイズを変更するために、 このサンプルでは、 必要に応じて定数を簡単に変更することができます。しかしながら、  "サイズ" 入力コンポーネントも変更することができ、マッピングが生成されるコード、または、 MapForce Server により実行される場合、 グループのサイズは、マッピングへのパラメーターとして便利に提供することができます。更に詳しい情報に関しては、次を参照してください: マッピングにパラメーターを与える.

 

次に、変数の値はターゲット PersonList XML コンポーネントにより与えられます。作成された各グループのためのファイル名は、 concat 関数を使用して次の部分を連結することにより計算されます:

 

1.各部署の名前
2.文字列 "_Group"
3.現在のシーケンス内のグループの番号 (例えば、 "1" は、この部署の最初のグループを指します)
4.文字列 ".xml"

 

この連結の結果は、変数の Name アイテム内に保管され、ターゲットコンポーネントに動的なファイル名として与えられます。これにより、受信した値のために新規のファイルが作成されます。 このサンプルでは、 変数は、8個のグループを計算するため、マッピングが実行されると8件の出力ファイルが作成されます。 この技術に関する更に詳しい情報は、次を参照してください: 複数の入力または出力ファイルを動的に処理.


(C) 2019 Altova GmbH