動詞の設定

このセクションでは、マップに参加しているビジネス・オブジェクトの動詞の設定方法について説明します。

宛先ビジネス・オブジェクトの動詞の設定の詳細については、"宛先ビジネス・オブジェクトの動詞の設定"を参照してください。

宛先動詞の条件付設定

通常、動詞に関しては、「移動」変換を定義して宛先動詞にソース動詞の値を設定するだけで十分です。(このアクションの詳細については、"宛先ビジネス・オブジェクトの動詞の設定"を参照。)しかし、ソース・アプリケーションで通常と異なる方法でビジネス・オブジェクト動詞が設定されることがあります。例えば、イベントが新規でも動詞に Update が設定される場合です。 別の例では、動詞に常に Retrieve が設定される場合があります。このような状況の場合、マップで宛先動詞を実際のイベントに対応する動詞にリセットする必要があります。

ソース・ビジネス・オブジェクトのキーが関係に参加する場合、マップにより関係表の静的参照 を実行して、ソース・ビジネス・オブジェクトが存在するかどうかを判別できます。

その後、対応するエントリーがテーブル内で検出されるかどうかに基づいて、マップで宛先動詞に Update または Create のいずれかを宛先動詞に設定できます。 この静的参照は、参照関係にアクセスする方法とおおよそ同じ方法で行います。表 103 に、各種の静的参照に使用する関数ブロックを示します。

表 103. ソース・ビジネス・オブジェクトの存在の検査
ソース・ビジネス・オブジェクトのタイプ マップ・タイプ 関数ブロック
アプリケーション固有 インバウンド General/APIs/Relationship/
Retrieve Instances
汎用 アウトバウンド General/APIs/Relationship/
Retrieve Participants

インバウンド・マップのカスタマイズ手順の例

次の例では、インバウンド・マップで、条件に従って参照の結果を基に宛先動詞を設定できるようにする方法を示します。

  1. マップで、ソース・ビジネス・オブジェクトと宛先動詞の間にカスタム変換を定義します。
  2. カスタム変換のアクティビティーで、以下の手順を実行します。このアクティビティーの目標は、関係の参加者が関わっているインスタンスの数を確認することです。関係の参加者のインスタンスが存在しない場合、宛先ビジネス・オブジェクトの動詞を Create にします。それ以外の場合は、Update にします。
    1. 関係の参加者が関わっているインスタンスの数を確認できるように、アクティビティーを定義します (図 131 を参照)。

      図 131. 関係の参加者が関わっているインスタンスの数の確認

    2. キャンバスで、Condition 関数ブロックをダブルクリックして開きます。「True Action」を選択して、条件が true の場合に実行するアクションを定義します。「True Action」は、図 132 のとおりに定義してください。

       

      図 132. 「True Action」の定義

    3. 「False Action」を選択して、参加者が関わっている関係インスタンスの数がゼロではない場合に実行するアクションを定義します。「False Action」は、図 133 のとおりに定義してください。

      図 133. 「False Action」の定義

アウトバウンド・マップのカスタマイズ手順の例

アウトバウンド・マップでも、前述の手順と同様の手順により、汎用オブジェクトの基本キーを基に静的参照を実行することができます。ただし、そのためには、General/APIs/Relationship/Retrieve Instances の関数ブロックではなく、General/APIs/Relationship/Retrieve Participants の関数ブロックを使用する必要があります。手順は以下のとおりです。

  1. マップで、ソース・ビジネス・オブジェクトのキー属性と宛先動詞の間にカスタム変換を定義します。
  2. カスタム変換のアクティビティーで、以下の手順を実行します。このアクティビティーの目標は、関係の参加者の数を確認することです。関係の参加者のインスタンスが存在しない場合、宛先ビジネス・オブジェクトの動詞を Create にします。それ以外の場合は、Update にします。
    1. 関係の参加者の数を確認できるように、アクティビティーを定義します (図 134 を参照)。

      図 134. 関係の参加者の数の確認

    2. インバウンド・マップのカスタマイズ手順の例のステップ 2b と 2c を実行します。

ソース子動詞の設定

親ソース・ビジネス・オブジェクトが子ビジネス・オブジェクトを持つ場合、ソース子動詞の値は、通常、親動詞の値と同じです。したがって、ソース子オブジェクトの動詞は、親動詞から子動詞への「移動」変換を定義することによって設定します。ただし、親オブジェクトの動詞が Update の場合、更新は 表 104 に示すなんらかの変更の結果です。

表 104. 親ビジネス・オブジェクトの更新
更新タスク 子オブジェクトの動詞
親オブジェクト内の一部の子以外の属性の変更 Update
子オブジェクト内の一部の属性の変更 Update
子オブジェクトをさらに追加 Create
既存の子オブジェクトの削除 Delete

表 104 のすべての変更は、親オブジェクトでは Update 動詞で表されます。しかし、この変更のすべてが子オブジェクトに対する更新を表すわけではありません。ソース子動詞の値は、親動詞で行われたアクションにより異なります。子オブジェクトのキーが一致関係 (複合または単純) に参加する場合、ソース子動詞の値は親動詞だけでなく呼び出しコンテキストにも依存します。 このような場合は、Maintain Child Verb 関数ブロックを使用して、ソース子オブジェクトの動詞を設定します。

このセクションでは、Maintain Child Verb 関数ブロックを使用してソース子オブジェクトの動詞を維持する方法について説明します。

子動詞設定の決定

Maintain Child Verb 関数ブロックは、親ソース・オブジェクトの動詞と呼び出しコンテキストが与えられると、それに応じてソース・ビジネス・オブジェクトの子オブジェクトの動詞を適切に設定します。このメソッドが行うアクションは、親ソース・オブジェクトの動詞と呼び出しコンテキストにより異なります。

EVENT_DELIVERY および ACCESS_REQUEST 呼び出しコンテキスト

呼び出しコンテキストが EVENT_DELIVERY または ACCESS_REQUEST の場合、呼び出されるマップはインバウンド・マップです。つまり、アプリケーション固有のビジネス・オブジェクトが汎用ビジネス・オブジェクトに変換されます。インバウンド・マップはアプリケーション固有のビジネス・オブジェクトを入力として受け取り、汎用ビジネス・オブジェクトを出力として戻します。EVENT_DELIEVERY (または ACCESS_REQUEST) の場合、子動詞の設定時に処理する特別なケースはありません。したがって、maintainChildVerb() メソッドは、表 105 に示すように、すべての動詞の値に関して親動詞を子動詞にコピーするのみです。

表 105. EVENT_DELIVERY および ACCESS_REQUEST 呼び出しコンテキストのアクション
汎用ビジネス・オブジェクトの動詞 Maintain Child Verb 関数ブロックが実行するアクション
Create、Delete、 Update、Retrieve ソース・オブジェクト内のすべての子オブジェクトの動詞を親ソース・オブジェクト内の動詞に設定します。このアクションにより、子オブジェクト内のすべての既存の動詞が上書きされます。

SERVICE_CALL_REQUEST 呼び出しコンテキスト

呼び出しコンテキストが SERVICE_CALL_REQUEST の場合、呼び出されるマップはアウトバウンド・マップです。つまり、汎用ビジネス・オブジェクトがアプリケーション固有のビジネス・オブジェクトに変換されます。アウトバウンド・マップは汎用ビジネス・オブジェクトを入力として受け取り、アプリケーション固有のビジネス・オブジェクトを出力として戻します。呼び出しコンテキストが SERVICE_CALL_REQUEST の場合、Maintain Child Verb 関数ブロックに対応する Java コードは、Update 動詞に関連する特別なケースを処理します。親オブジェクトの変更の内容が新しい子オブジェクトの作成である場合には、Maintain Child Verb 関数ブロックは、現在関係表に存在しない子オブジェクトのすべてで動詞を Create に変更します (表 106 を参照)。

表 106. SERVICE_CALL_REQUEST 呼び出しコンテキストのアクション
汎用ビジネス・オブジェクトの動詞 Maintain Child Verb 関数ブロックが実行するアクション
Create、Delete、 Retrieve ソース・オブジェクト内のすべての子オブジェクトの動詞を親ソース・オブジェクト内の動詞に設定します。このアクションにより、子オブジェクト内のすべての既存の動詞が上書きされます。
Update
  1. 指定された汎用ビジネス・オブジェクトのキー値の子関係表から、関係インスタンスを検索します。
  2. 表参照の成功に基づいて子オブジェクトの動詞を設定します。
    • 子オブジェクトの関係インスタンスが存在する場合、子オブジェクトの動詞を Update に設定します。
    • この子オブジェクトの関係インスタンスが存在しない 場合、子オブジェクトの動詞を Create に設定します。

SERVICE_CALL_RESPONSE 呼び出しコンテキスト

呼び出しコンテキストが SERVICE_CALL_RESPONSE の場合、呼び出されるマップはインバウンド・マップです。つまり、アプリケーション固有のビジネス・オブジェクトが汎用ビジネス・オブジェクトに変換されます。インバウンド・マップはアプリケーション固有のビジネス・オブジェクトを入力として受け取り、汎用ビジネス・オブジェクトを出力として戻します。

Maintain Child Verb 関数ブロックの振る舞いは、対応するメソッドの、最後から 2 番目に指定されるパラメーターに応じて決まります。このパラメーターは to_Retrieve boolean 値フラグで、その値は、表 107 に示すように、コラボレーション要求を処理するときに子オブジェクトの動詞をアプリケーションでリセットするかまたは保持するかどうかを示します。

表 107. コネクターの振る舞い
to_Retrieve フラグの値 コネクターの振る舞い
true コネクターにより、子オブジェクトの動詞がアプリケーションに入力された動詞とは別の値に設定されます。

例えば、ビジネス・オブジェクトはコネクターに親動詞の Update と子動詞の Create で入力された場合、アプリケーションが操作を完了後、コネクターによりすべての子オブジェクト動詞がその親の値にリセットされることがあります。この場合、子動詞は Update に変更されます。

false コネクターにより子オブジェクト動詞は保持されます。

例えば、ビジネス・オブジェクトがコネクターに親動詞が Update、子動詞が Create で入力された場合、コネクターによりすべての子オブジェクト動詞が保持されます。この場合、子動詞は Create のままです。

注:
Maintain Child Verb 関数ブロックに対応する Java コードは、SERVICE_CALL_RESPONSE 呼び出しコンテキストを処理する場合のみto_Retrieve パラメーターの値を使用します。

引き数 to_Retrievetrue の場合、Maintain Child Verb 関数ブロックは、表 108 に示すタスクを実行します。

表 108. SERVICE_CALL_RESPONSE 呼び出しコンテキストのアクション
汎用ビジネス・オブジェクトの動詞 Maintain Child Verb 関数ブロックが実行するアクション
Create、Delete、 Retrieve、Update ソース・オブジェクト内のすべての子オブジェクトの動詞を親ソース・オブジェクト内の動詞に設定します。このアクションにより、子オブジェクト内のすべての既存の動詞が上書きされます。
  1. 子関係表内の各子オブジェクトを参照します。
  2. 表参照の成功に基づいて子オブジェクトの動詞を設定します。
    • 子オブジェクトの関係インスタンスが存在する場合、子オブジェクトの動詞を Update に設定します。
    • この子オブジェクトの関係インスタンスが存在しない 場合、子オブジェクトの動詞を Create に設定します。

注:
アプリケーションの振る舞いが不明の場合は、to_Retrieve 引き数を true に設定します。このようにフラグ値 true を設定すると、パフォーマンスに影響する可能性があります。これは、Maintain Child Verb 関数ブロックに対応する Java コードによって、不要な参照が実行される場合があるからです。しかし、子オブジェクトに誤った動詞が設定されるよりも不要な参照の方が、通常は安全です。

Maintain Child Verb 関数ブロックの使用についてのヒント

Maintain Child Verb 関数ブロックは、ソース・ビジネス・オブジェクトの子オブジェクトの動詞を維持します。また、単純または複合一致関係の一部である子オブジェクトを処理することができます。この関数ブロックは、親ソース・オブジェクトの動詞と呼び出しコンテキストが与えられると、それに応じて動詞を適切に設定します。

Maintain Child Verb 関数ブロックを使用する場合は、以下のヒントに留意してください。

Copyright IBM Corp. 2004