ビジネス・オブジェクト動詞の処理

このセクションでは、ビジネス・オブジェクト動詞の処理における以下の機能について説明します。

変更後イメージとデルタ

変更後イメージとは、ビジネス・オブジェクトに対するすべての変更が行われた後の、ビジネス・オブジェクトの状態です。デルタとは、キー値と変更されるデータのみを格納している、更新操作で使用されたビジネス・オブジェクトです。このコネクターは、変更後イメージのみをサポートし、ビジネス・オブジェクト・デルタはサポートしません。コネクターは更新の要求ビジネス・オブジェクトを受け取ると、ビジネス・オブジェクトが更新後のデータの必要な状態を表していると仮定します。

したがって、コネクターが Update 動詞を持つ要求ビジネス・オブジェクトを受け取ると、コンポーネント・インターフェース内のビジネス・オブジェクトの現在の表現を変更して、ソース・ビジネス・オブジェクトと正確に一致するようにします。これを行うために、コネクターは単純属性値を変更して、子ビジネス・オブジェクトを追加または除去します。

コネクターが子ビジネス・オブジェクトを変更する方法の例として、仮に PSFT_EmergencyContact ビジネス・オブジェクトには、単一カーディナリティーの子を表す属性と子ビジネス・オブジェクトの配列を表す属性の 2 つの追加属性があるとします。配列の子は、それぞれ自分自身の子ビジネス・オブジェクトの配列を含むことができます。

図 9 に、ID が 2345 の従業員の PSFT_EmergencyContact の現在の状態を示します。ArrayData 属性は、3 つのレコード (A、B、および C) を表します。これらのうち、2 つのレコードの配列属性は、2 つの追加レコードを表します。

図 9. 更新前のデータの状態


図 10 に、ビジネス・オブジェクト要求を示します。このビジネス・オブジェクトは、新規の単一カーディナリティーの子ビジネス・オブジェクトを含み、またその配列には別のビジネス・オブジェクトが含まれています。

図 10. 更新要求で表わされるデータ


更新を処理するために、コネクターはコンポーネント・インターフェースに次の変更を行います。

コネクターは、受け取る各要求ビジネス・オブジェクトが変更後イメージを表していることを前提とするので、更新のためにコネクターに送られる各ビジネス・オブジェクトに有効な既存の子ビジネス・オブジェクトがすべて組み込まれていることが重要です。子ビジネス・オブジェクトの単純属性が何も変更されなくても、子ビジネス・オブジェクトがソース・ビジネス・オブジェクトに組み込まれている必要があります。

ただし、更新操作時にコネクターが、必要な子ビジネス・オブジェクトを削除しないように防止することができます。ソース・ビジネス・オブジェクトに組み込まれていない子ビジネス・オブジェクトをコネクターが保持するように指示するには、子または子の配列を表す属性に関してアプリケーション固有情報を使用します。このためには、KeepRelationshiptrue に設定します。詳細については、"属性レベルのアプリケーション固有情報"を参照してください。

ビジネス・オブジェクト要求の動詞の処理

このセクションでは、コネクターが要求として受け取るビジネス・オブジェクトを作成、検索、更新、または削除する際の手順を説明します。コネクターは階層ビジネス・オブジェクトを再帰的に処理します。つまり、個々のビジネス・オブジェクトをすべて処理するまで、子ビジネス・オブジェクトそれぞれに対して同じステップを実行します。

ビジネス・オブジェクトの比較

下記に概要を説明する処理のさまざまな時点において、コネクターは 2 つのビジネス・オブジェクトを比較して、それらが同じかどうかを確認します。例えば、更新操作時に、コネクターは特定のビジネス・オブジェクトがビジネス・オブジェクトの配列内に存在するかどうかを判断します。この検査を行うために、コネクターはビジネス・オブジェクトと配列内の各ビジネス・オブジェクトを比較します。2 つのビジネス・オブジェクトが同一であるには、次の 2 つの条件を満たす必要があります。

作成操作

ビジネス・オブジェクトを作成する場合、コネクターは、操作が成功したときには (操作によりビジネス・オブジェクトが変更されたかどうかに関係なく) VALCHANGE、操作が失敗したときには FAIL のいずれかの状況を戻します。

コネクターは、階層ビジネス・オブジェクトを作成する場合、次のステップで行います。

  1. トップレベルのビジネス・オブジェクトのコンポーネント・インターフェースの新しいインスタンスを作成します。
  2. 各子ビジネス・オブジェクトと子ビジネス・オブジェクトの各配列をコンポーネント・インターフェースに再帰的に挿入します。つまり、コネクターは子ビジネス・オブジェクトと、その子に組み込まれるすべての子ビジネス・オブジェクトを作成します。
    注:
    単一カーディナリティーの子ビジネス・オブジェクトを表す属性のビジネス・オブジェクト定義で、子が必要 (つまり、Required プロパティーの評価が true) と指定する場合、検索では行を戻す必要があります。行を戻さないと、コネクターはエラーを戻し、処理を停止します。ただし、子が必須でなく、属性が空の場合、コネクターは属性を無視します。
  3. コネクターは、データを書き込んでコミットする Save() メソッドを呼び出します。

属性プロパティーの詳細については、"ビジネス・オブジェクトの属性プロパティー"を参照してください。アプリケーション固有情報の指定方法の詳細については、"属性レベルのアプリケーション固有情報"を参照してください。

検索操作

ビジネス・オブジェクトを検索する場合、コネクターは、操作が成功したときには (操作によりビジネス・オブジェクトが変更されたかどうかに関係なく) VALCHANGE、操作が失敗したときには FAIL のいずれかの状況を戻します。

コネクターは、階層ビジネス・オブジェクトを検索する場合、次のステップで行います。

  1. InterChange Server Express から受け取るトップレベルのビジネス・オブジェクトからすべての子ビジネス・オブジェクトを除去します。
  2. トップレベルのビジネス・オブジェクトに対応するコンポーネント・インターフェースを検索します。

    コネクターはソース・ビジネス・オブジェクト内のキー値を使用して、コンポーネント・インターフェースをインスタンス化します。検索の結果、次のいずれかのアクションが実行されます。

    注:
    ビジネス・オブジェクトには、コンポーネント・インターフェースのどのプロパティーにも対応しない属性を設定することができます。検索中に、コネクターはトップレベルのビジネス・オブジェクト内のこのような属性は変更しません。受け取った値に設定されたままです。子ビジネス・オブジェクトの場合、コネクターは検索時に、このような属性にデフォルト値を設定します。
  3. ビジネス・オブジェクト配列に対応するコンポーネント・インターフェースのすべてのコレクションを再帰的に検索します。

    コネクターは、それぞれの親ビジネス・オブジェクト内のキーとそれぞれの子の固有キーを使用して、コンポーネント・インターフェース・インスタンスまたはコンポーネント・インターフェース・コレクションからデータ行を選択します。戻された各行について、コネクターは次のアクションを実行します。

    1. 正しいタイプの新規の個別ビジネス・オブジェクトを作成します。
    2. 戻された行の値に基づいて、すべての現行ビジネス・オブジェクトの属性を設定します。
    3. すべての現行ビジネス・オブジェクトの子を再帰的に検索します。
    4. 現行ビジネス・オブジェクトを、そのすべての子とともに該当する親の配列に挿入します。

    注:
    コネクターはビジネス・オブジェクトの配列に値を設定する際に、一意であることを強制しません。一意であることを確認するのは、アプリケーションで行う必要があります。アプリケーションから重複する子ビジネス・オブジェクトが戻されると、コネクターは InterChange Server Express に重複する子ビジネス・オブジェクトを戻します。
  4. トップレベルのビジネス・オブジェクトの単一カーディナリティーの子それぞれに関して、コレクションを再帰的に検索します。コネクターは、それぞれの親ビジネス・オブジェクト内のキーとそれぞれの子の固有キーを使用して、コンポーネント・インターフェース・インスタンスまたはコンポーネント・インターフェース・コレクションからデータ行を選択します。コネクターは、次を実行します。
    1. ビジネス・オブジェクトの定義で子が必須であると指定されている場合、検索で行が戻される必要があります。子が必須ではなく、検索から行が戻されずにコンポーネント・インターフェース内に子が存在しないことを示すと、コネクターは親の単一カーディナリティー属性を空のままにしておきます。検索で複数の行を戻す場合、検索は失敗します。
    2. 子ビジネス・オブジェクトにより組み込まれたすべての子をコレクションから再帰的に検索します。
    3. ビジネス・オブジェクトを、そのすべての子とともに、親ビジネス・オブジェクトの該当する属性に挿入します。

RetrieveByContent 操作

ビジネス・オブジェクトを検索する場合、コネクターは、操作が成功したときには (操作によりビジネス・オブジェクトが変更されたかどうかに関係なく) VALCHANGE、操作が失敗したときには FAIL、操作により複数行が返されたときには MULTIPLE_HITS という状況を戻します。

コネクターは、階層ビジネス・オブジェクトを検索する場合、次のステップで行います。

  1. InterChange Server Express から受け取るトップレベルのビジネス・オブジェクトからすべての子ビジネス・オブジェクトを除去します。
  2. トップレベルのビジネス・オブジェクトに対応するコンポーネント・インターフェースを検索します。

    コネクターは、ソース・ビジネス・オブジェクトの検索キーであるこれらの属性の値を使用して、コンポーネント・インターフェースをインスタンス化します。(検索キー属性に対するアプリケーション固有情報の指定の詳細については、属性レベルのアプリケーション固有情報を参照してください。) 検索の結果、次のいずれかのアクションが実行されます。

    注:
    ビジネス・オブジェクトには、コンポーネント・インターフェースのどのプロパティーにも対応しない属性を設定することができます。検索中に、コネクターはトップレベルのビジネス・オブジェクト内のこのような属性は変更しません。受け取った値に設定されたままです。子ビジネス・オブジェクトの場合、コネクターは検索時に、このような属性にデフォルト値を設定します。
  3. ビジネス・オブジェクト配列に対応するコンポーネント・インターフェースのすべてのコレクションを再帰的に検索します。

    コネクターは、それぞれの親ビジネス・オブジェクト内のキーとそれぞれの子の固有キーを使用して、コンポーネント・インターフェース・インスタンスまたはコンポーネント・インターフェース・コレクションからデータ行を選択します。戻された各行について、コネクターは次のアクションを実行します。

    1. 正しいタイプの新規の個別ビジネス・オブジェクトを作成します。
    2. 戻された行の値に基づいて、すべての現行ビジネス・オブジェクトの属性を設定します。
    3. すべての現行ビジネス・オブジェクトの子を再帰的に検索します。
    4. 現行ビジネス・オブジェクトを、そのすべての子とともに該当する親の配列に挿入します。

    注:
    コネクターはビジネス・オブジェクトの配列に値を設定する際に、一意であることを強制しません。一意であることを確認するのは、アプリケーションで行う必要があります。アプリケーションから重複する子ビジネス・オブジェクトが戻されると、コネクターは InterChange Server Express に重複する子ビジネス・オブジェクトを戻します。
  4. トップレベルのビジネス・オブジェクトの単一カーディナリティーの子それぞれに関して、コレクションを再帰的に検索します。コネクターは、それぞれの親ビジネス・オブジェクト内のキーとそれぞれの子の固有キーを使用して、コンポーネント・インターフェース・インスタンスまたはコンポーネント・インターフェース・コレクションからデータ行を選択します。コネクターは、次を実行します。
    1. ビジネス・オブジェクトの定義で子が必須であると指定されている場合、検索で行が戻される必要があります。子が必須ではなく、検索から行が戻されずにコンポーネント・インターフェース内に子が存在しないことを示すと、コネクターは親の単一カーディナリティー属性を空のままにしておきます。検索で複数の行を戻す場合、検索は失敗します。
    2. 子ビジネス・オブジェクトにより組み込まれたすべての子をコレクションから再帰的に検索します。
    3. ビジネス・オブジェクトを、そのすべての子とともに、親ビジネス・オブジェクトの該当する属性に挿入します。

更新操作

ビジネス・オブジェクトを更新する場合、コネクターは、操作が成功したときには (操作によりビジネス・オブジェクトが変更されたかどうかに関係なく) VALCHANGE、操作が失敗したときには FAIL のいずれかの状況を戻します。

コネクターは、階層ビジネス・オブジェクトを更新する場合、次のステップで行います。

  1. ソース・ビジネス・オブジェクト内のキー値を使用して、対応するコンポーネント・インターフェースのインスタンスを検索します。検索したコンポーネント・インターフェースは、PeopleSoft アプリケーション内のデータの現在の状態を正確に表しています。
  2. トップレベルのビジネス・オブジェクトのすべての単一カーディナリティーの子を再帰的に更新します。

    ビジネス・オブジェクト定義で属性が子ビジネス・オブジェクトに含まれていることが必須にされている場合、ソース・ビジネス・オブジェクトと検索したコンポーネント・インターフェースの両方に子ビジネス・オブジェクトが存在する必要があります。両方に存在しない場合は、更新が失敗し、コネクターはエラーを戻します。

    コネクターは、次のいずれかの方法で、単一カーディナリティーの子ビジネス・オブジェクトの更新を処理します。

  3. 検索したコンポーネント・インターフェースのすべての単純属性が更新されます。ただし、ソース・ビジネス・オブジェクト内の対応する属性に CxIgnore 値が指定されている属性は除きます。
  4. 検索したコンポーネント・インターフェースのすべての配列を、次のいずれかの方法で処理します。

    重要:
    ビジネス・オブジェクトを作成するビジネス・プロセスで、ソース・ビジネス・オブジェクト内の複数カーディナリティーのビジネス・オブジェクトが固有 (つまり、配列には同じビジネス・オブジェクトのコピーが複数存在しない) であることを確認する必要があります。コネクターがソース配列内で重複するビジネス・オブジェクトを受け取ると、ビジネス・オブジェクトを 2 度処理し、予測できない結果が生じることがあります。

注:
コネクターは、データの整合性を確実にするために検索中はデータをロックします。

削除操作

コネクターはトップレベルのビジネス・オブジェクトは削除しません。ただし、トップレベルのビジネス・オブジェクトが Update 動詞を使用し、またソース・データを表す要求ビジネス・オブジェクトに子ビジネス・オブジェクトが存在しない場合は、子ビジネス・オブジェクトを物理的に削除します。

詳細については、"更新操作"を参照してください。

データのコミット

コネクターは、作成または更新処理のためのビジネス・オブジェクトを受け取るたびに、コンポーネント・インターフェースにすべての変更を保管するか、またはなにも保管しません。コネクターが、データ変更の一部を保管することは決してありません。

Copyright IBM Corp. 2004