変更が外部システムに伝達される方法

最終更新日: 2009年11月2日

適用対象: SharePoint Server 2010

この記事の内容
作成操作
更新操作
削除操作

外部データがローカルで変更されると、書き込み操作は直接外部システムにルーティングされず、キャッシュにルーティングされます。キャッシュは、この操作を操作キューに配置し、1 つずづ実行します。キューの操作が実行される時間は、予測できず、キャッシュの更新間隔、外部アプリケーションが使用できるかどうかなどの複数の要因によって異なります。次のセクションでは、キャッシュでのさまざまな書き込み操作の実行について説明します。

作成操作

キャッシュ モードのアプリケーションでエンティティ インスタンスを作成すると、作成操作が操作キューに追加されます。Business Connectivity Services では、エンティティ インスタンスを外部アプリケーションで作成し、その本当の ID を取得できるようになるまで、ローカルでエンティティ インスタンスを作成し、キャッシュに新しく作成したエンティティ インスタンスに一時 ID を割り当てます。一時 ID (GUID) は、EntityInstance 参照の一部として呼び出し元のアプリケーションに返されます。

注意

ID が一時 ID かどうかを指定するために、オフライン エンティティ インスタンスの ID フィールドで IsTemporary フラグを使用できます。

操作が外部アプリケーションで実行され、正常に終了した場合、新しく作成したエンティティ インスタンスの ID は、外部システムからの実際の ID で更新され、エンティティ インスタンスは更新対象としてマークされるので、すべての計算フィールドの値を更新できます。呼び出しが失敗した場合、エンティティ インスタンスは InError としてマークされ、すべての例外がキャッシュに記録されます。

更新操作

キャッシュ モードのアプリケーションでエンティティ インスタンスを更新すると、変更はキャッシュに記録されます。更新操作がキューに追加され、ローカル更新が実行される前のエンティティ インスタンスの元のデータがキャッシュに記録されます。ランタイムはこの操作の実行を開始するときに、最初に SpecificFinder を呼び出して外部システムから最新情報を取得し、その情報を元の状態と比較して、外部アプリケーションで別のユーザーまたはアプリケーションによってデータが変更されていないことを確認します。競合が検出されなかった場合、Update メソッド インスタンスの呼び出しが外部アプリケーションに対して行われます。操作が正常に終了した場合、エンティティ インスタンスは更新対象としてマークされるので、すべての計算フィールドの値を更新できます。呼び出しが失敗した場合、エンティティ インスタンスは InError としてマークされ、すべての例外がキャッシュに記録されます。競合が検出された場合も、エンティティ インスタンスは InError としてマークされ、ConflictDetectedException がエンティティ インスタンスのキャッシュに記録されます。

その一方で、SpecificFinder によって ObjectNotFoundException または ObjectDeletedException がスローされた場合、このエンティティ インスタンスは、別のユーザーまたは別のアプリケーションによって外部アプリケーションで既に削除されています。この場合、更新操作は失敗としてマークされます。

削除操作

キャッシュ モードのアプリケーションでエンティティ インスタンスを削除すると、削除はキャッシュに記録されます。削除操作がキューに追加され、ローカル削除が実行される前のエンティティ インスタンスの元のデータがキャッシュに記録されます。ランタイムはこの操作の実行を開始するときに、最初に SpecificFinder を呼び出して外部システムから最新情報を取得し、その情報を元の状態と比較して、外部アプリケーションで別のユーザーまたはアプリケーションによってデータが変更されていないことを確認します。競合が検出されなかった場合、Delete メソッド インスタンスの呼び出しが外部アプリケーションに対して行われます。操作が正常に終了した場合、キャッシュのエンティティ インスタンスは削除済みとしてマークされます。呼び出しが失敗した場合、エンティティ インスタンスは InError としてマークされ、すべての例外がキャッシュに記録されます。

その一方で、SpecificFinder によって ObjectNotFoundException または ObjectDeletedException がスローされた場合、このエンティティ インスタンスは、別のユーザーまたは別のアプリケーションによって外部アプリケーションで既に削除されています。この場合、エラーは返されず、エンティティ インスタンスはキャッシュから削除され、削除操作は成功としてマークされます。