InteractionSpec 内の操作が ApplyChange で、ビジネス・グラフ内に動詞が存在しない場合、アダプターは DeltaUpdate 操作を実行します。アダプターは、ChangeSummary をインスペクションして入力階層内の各ビジネス・オブジェクトの操作を識別し、識別された操作を実行します。
次に示すように、DeltaUpdate 操作は Update 操作とは異なります。
- DeltaUpdate 操作では、更新の前に Retrieve 操作は実行されません。
- 着信ビジネス・オブジェクトとデータベース内のビジネス・オブジェクトの比較が行われません。
- 子はすべて、各子オブジェクトに設定されている動詞に基づいて処理されます。子に動詞が設定されていない場合、アダプターはエラーを戻します。
アダプターは、DeltaUpdate による階層ビジネス・オブジェクトの更新時に、以下のステップを実行します。このステップでは
、ChangeSummary から、オブジェクトの変更内容のみが処理されます。
- 親オブジェクトの子のうち、単一カーディナリティーのものすべてを再帰的に処理します。ビジネス・オブジェクト仕様で必須にマークされている子は、Inbound オブジェクトに存在していなければなりません。
存在しない場合、DeltaUpdate 操作は失敗し、アダプターがエラーを戻します。
- 親に含まれる外部キー値のうち、単一カーディナリティーの子の属性を参照するものすべてを、それぞれ対応する子の値に設定します。この処理が必要なのは、これ以前のステップで、単一カーディナリティーの子がデータベースに追加され、新しいシーケンス値が生成されている可能性があるためです。
- 現在処理中のオブジェクトを、SQL Update ステートメントまたはストアード・プロシージャーを使用して更新します。個々のビジネス・オブジェクトのすべての単純属性が更新されます。アダプターは Update ステートメントにどの属性を追加しなければならないかを判断するのに、プロパティー・レベルの変更を使用しません。すべて更新されます。更新されているオブジェクトは固有であるため、アダプターは結果として 1 行のみが処理されていることをチェックします。複数の行が処理される場合、エラーが戻されます。
- 現在のオブジェクトのカーディナリティー N のすべての子にある、親の属性を参照する外部キー値をすべて、対応する親の値に設定します。通常、これらの値はデータ・マッピング時に既に相互参照されています。ただし、これはカーディナリティーが N のコンテナーに含まれる新しい子には該当しない場合があります。このステップにより、カーディナリティーが N の子すべての外部キー値が正しい値になってから、それらの子の更新が行われることが徹底されます。
- 現在のオブジェクトの、カーディナリティーが N のコンテナーをすべて更新します。
子オブジェクトが処理されるときには、それぞれの子の動詞が取得され、適切な操作が実行されます。DeltaUpdate で子に対して許可される操作は、Create、
Delete、および Update です。
- Create 動詞が子で検出された場合、それが所有関係にある子であれば、検出された子がデータベース内に作成されます。所有関係にない子に関しては、検索により、データベースに存在するかどうかが確認されます。
- Delete 動詞が子で検出された場合、子は削除されます。
- Update 動詞が子で検出された場合、子はデータベース内で更新されます。