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

Altova MapForce 2020 Basic Edition

各変数には、変数のスコープを管理することを許可する compute-when 入力アイテムが存在します。すなわち、マッピングが実行される際に変数の値がいつ、どの頻度で計算されるかを管理することができます。この入力は、多くの場合接続する必要がありませんが、デフォルトのコンテキストを上書きする場合、またはマッピングのパフォーマンスを最適化するには、必要です。

mf_variable_simple

「Compute-when」 アイテム

次のテキストでの、サブツリーは、ターゲットコンポーネント内のアイテム/ノードセットとその子孫を意味します。例えば、 <FirstName><LastName> 子要素を持つ、<Person> 要素。

 

変数の値 は、変数コンポーネントの出力サイドでデータが使用できることを意味します。

単純型の変数に関しては、コンポーネントプロパティ内で指定されているデータ型を持つ動的な値のシーケンスであることを意味します。

複合型の変数に関しては、それぞれが自身の子孫ノードを含む (コンポーネント プロパティ内で指定されている型の)ルートノードのシーケンスであることを意味します。

 

動的な値 (または、ノード)のシーケンスは、1つの要素、または要素を全く含まない場合があります。これは、変数の入力サイドに何が接続されているか、および、ソースとターゲットコンポーネント内の親アイテムの存在により異なります。

 

「Compute-when」 が接続されていない場合 (デフォルト)

compute-when 入力アイテムが(ソースコンポーネントの出力ノードに)接続されていない場合、ターゲットサブツリー内で最初に使用される際に変数の値は(コネクタにより変数コンポーネントからターゲットコンポーネント内のノードに直接、または関数を使用して間接的に)計算されます。同じ変数の値は、サブツリー内のターゲット子ノードすべてのために使用されます。

 

実際の変数の値は、ソースとターゲットコンポーネントの親アイテム間の接続により異なります。

 

このデフォルトの振る舞いは、正規ユーザー定義 関数と Web サービス関数の呼び出しの複合型の出力と同じです。

 

変数の出力が複数の関連したにターゲットノードに接続されている場合、変数の値は、それぞれのアイテムのために個別に計算されます。これにより、各ケース内で異なる結果を生成することができます。これは異なる親の接続は、変数の値が評価されるコンテキストを影響するからです。

 

「Compute-when」 が接続されている場合

ソースコンポーネントの出力コネクタを compute-when に接続すると、ソースアイテムが最初にターゲットサブツリー内で使用される都度に変数が計算されます。

 

変数は実際には、 compute-when に接続されているアイテムの子アイテムのように振る舞います。これは、新規のアイテムがソースコンポーネント内のシーケンスから読み込まれる都度、ランタイム変数が再評価されます。これは、MapForce 内の接続を管理する一般的なルールに関連しています:  各ソースアイテムのために、1つのターゲットアイテムが作成されます。 compute-when に関しては、各ソースアイテムのために、変数の値が計算されます(次を参照してください: マッピングのルールと戦略)。

 

「Compute-once」

必要であれば、ターゲットコンポーネントの前に1度変数の値を計算し、変数をマッピングの残りでグローバルな定数にすることを選択することができます。これをおこなうには、 compute-when アイテムを右クリックして、コンテキストメニューから「1度計算する」を選択します:

mf_variable_compute-once

変数のスコープを compute-when=once に変更する場合、このような変数は1度のみ評価されるため、入力コネクタは、 compute-when アイテムから削除されます。

 

実際の関数の結果が評価される前に、ユーザー定義関数 compute-when=once 変数は関数が呼び出される都度評価されます。

 

親コンテキスト

親コンテキストを追加する必要がある場合があります。例えば、マッピングが複数のフィルターを使用し、反復するために親ノードを追加する必要がある場合など。 マッピングコンテキストのオーバーライド を参照してください。

 

変数に親コンテキストを追加するには、ルートノード(このサンプルでは 「PersonList」) を右クリックします、そして、コンテキストメニューから、「親コンテキストを追加する」を選択します。これにより新規ノード、 親コンテキストを既存の階層構造に追加します。

inter7

 

親コンテキストは、仮想の 「親」 ノードをコンポーネント内の階層構造に追加します。これにより、同じ、または異なるソースコンポーネント内で追加ノードを反復することができます。

(C) 2019 Altova GmbH