このサイトをビューするために JavaScript を有効化してください。

Altova MapForce 2020 Enterprise Edition

スキーマまたはデータベース内の異なったアイテムに関数を適用する場合、 MapForce は、コンテキストノードを知る必要があります。全ての他のアイテムは、これに相対して処理されます。これは優先コンテキストとしてアイテムまたはノードをアーカイブしています。

 

優先コンテキストは、マッピング 関連しないアイテムをマッピングする際、実行の優先順位を決めるために使用されます。

 

マッピングは常に上から下に実行され、 2つのテーブルがループまたは検索される場合は、各ループが連続して処理されます。優先コンテキストを設定せずに関連しない要素をマップする場合は MapForce は、どのループを最初に実行するか知らないため、最初に、ですから最初のテーブルまたはデータソースを選択します。

 

解決方法:

どのテーブル、または ソースデータが最初にループまたは検索されるか決定し、 そのテーブルへのコネクタの優先コンテキストを設定します。

 

DB_CompletePO.mfd ファイルの簡素化されたバージョンが ...\MapForceExamples フォルダーにあり、以下に表示されています。

 

このサンプル内には、複数のソースコンポーネントが存在することに注意してください。 ShortPO は、 関連した XML インスタンスファイルを持つスキーマですが、 CustomersAndArticles はデータベースです。 データ CompletePO スキーマ / XML ファイルに両方からのデータがマップされます。 「優先コンテキスト」 アイコンは丸枠で囲まれています。

 

関数の a パラメーターを「優先コンテキスト」と設定すると以下の結果が発生します:

 

ShortPO 内の CustomerNr は、データベース内のアイテム Number と比較されます。

CustomerNr は、 「優先コンテキスト」と指定されており、 equal 関数の a パラメーター内に置かれます。

 

CustomersAndArticles データベースで同じ数値が (1度) 検索されます。b パラメーターは、データベースからの Number アイテムを含みます。

数値が検索された場合、結果は filter コンポーネント (Customers) の ブール パラメーターにパスされます。

node/row パラメーターは、ブールパラメーター が true の場合、すなわち、同じ数値が検索された場合、 Customer データを "on-true" にパスします。

残りの customer データは以下の通りパスされます: Number, FirstName、LastName アイテム はすべてのターゲットスキーマ内の対応するアイテムに接続されます。

 

 context-switch

 

これは、データベースが1度のみ、 ShortPO により与えられたそれぞれの CustomerNr ために検索されることを意味します。

 

 

関数の b パラメーターを 「優先コンテキスト」 と設定すると以下の結果が発生します:

MapForce は、データベースから最初の Number を検索し b パラメーター にロードします。

a パラメーター内の CustomerNr に対してチェックします。

等値ではない場合、 ShortPO のすべての CustomerNr を検索します。

データベースを検索し、次の Number を b にロードし、 a に対してチェックします。

ShortPO 内の数値を検索するために、データベース内のすべての Number に対して反復します。

 

context-switch2

 

これは、各 Number のためにデータベースクエリが生成され、ShortPO のすべての CustomerNr と比較されることを意味します。

 

優先コンテキストとユーザー定義関数

ユーザー定義関数がデフォルトの設定である型"インライン"と定義された場合、優先コンテキストはユーザー定義関数のパラメーターの1つとして定義することはできません。 ユーザー定義関数は、もちろん、パラメーターに設定された優先コンテキストを持つ他の正規  (非インライン) ユーザー定義関数 を含んでいます。

(C) 2019 Altova GmbH