次の方法で共有


オプティミスティック コンカレンシー

Power Apps などのマルチスレッドおよびマルチ ユーザー システムでは、操作とデータの変更は多くの場合、並列で行われます。 同じデータに対して複数の更新操作または削除操作が同時に発生すると、問題が発生します。 このような状況では、データが失われる可能性があります。 オプティミスティック コンカレンシー機能を使用すると、アプリケーションは、アプリケーションがレコードを取得してから、そのレコードを更新または削除しようとしたときの間に、サーバー上でテーブル レコードが変更されたかどうかを検出できます。

オプティミスティック コンカレンシーは、オフライン同期が有効になっているすべての既定のテーブルとすべてのカスタム テーブルでサポートされています。 テーブルがオプティミスティック コンカレンシーをサポートしているかどうかを判断するには、コードを使用してテーブルのメタデータを取得するか、 メタデータ ブラウザーを使用してメタデータを表示し、 列 IsOptimisticConcurrencyEnabledtrue に設定されているかどうかを確認します。 カスタム テーブルの場合、このプロパティは既定で true に設定されます。

オプティミスティック コンカレンシーを有効にする

UpdateRequestの実行時にオプティミスティック コンカレンシー チェックの動作を有効にするには、要求の ConcurrencyBehavior プロパティを IfRowVersionMatches に設定します。 同様に、 DeleteRequestの場合は、 ConcurrencyBehavior プロパティを設定します。

SDK for .NET コンテキストを使用してデータを変更する場合は、ConcurrencyBehavior オブジェクトにOrganizationServiceContextを設定します。 この値は、が呼び出されたときに OrganizationServiceContext によって使用されるすべての UpdateRequest および SaveChanges() メッセージに渡されます。

オプティミスティック コンカレンシー動作は、SDK API 呼び出しによってのみ設定できます。 現時点では、Web アプリケーションの形式では設定されません。

Web API を使用してオプティミスティック コンカレンシーを適用する

Web API を使用してオプティミスティック コンカレンシーを適用する方法については、「オプティミスティック コンカレンシーの適用」を参照してください。

SDK for .NET を使用してオプティミスティック コンカレンシーを適用する

SDK for .NET を使用してオプティミスティック コンカレンシーを適用する方法については、「オプティミスティック コンカレンシーの動作」を参照してください。

例外処理

オプティミスティック コンカレンシーを使用する場合、Web サービス呼び出しから <OrganizationServiceFault> エラー例外で返されるエラー条件がいくつかあります。

  • ConcurrencyVersionMismatch (code=-2147088254)

    行バージョンが指定され、 IfVersionMatches 動作が示されると、既存のレコードのバージョンが要求で指定された行バージョンと一致しない場合は、エラーが返されます。

  • ConcurrencyVersionNotProvided (code= -2147088253)

    IfVersionMatches の動作が示され、行バージョンの値が指定されていない場合は、エラーが返されます。

  • OptimisticConcurrencyNotEnabled (code=-2147088243)

    テーブルの更新時に IfVersionMatches 動作が示され、オプティミスティック コンカレンシーが有効になっていない場合は、エラーが返されます。

    返されたエラーの Code プロパティを調べて、エラーがオプティミスティック コンカレンシーに関連しているかどうかを判断できます。 前に示したエラー条件のコードは、ErrorCodes.cs ヘルパー コードから取得されています。