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

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

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

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

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

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

オプティミスティック コンカレンシー動作は、SDK API 呼び出しでのみ設定できます。 現在、Web アプリケーションの形式の設定はありません。

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

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

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

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

例外処理

オプティミスティック コンカレンシーを使用する場合、Web サービス呼び出しは、エラー例外 <OrganizationServiceFault>で複数のエラー状態を返すことができます。

  • ConcurrencyVersionMismatch (code=-2147088254)

    行バージョンを指定して IfVersionMatches 動作を指定すると、このエラーが発生しますが、既存のレコードのバージョンが要求の行バージョンと一致しません。

  • ConcurrencyVersionNotProvided (code= -2147088253)

    このエラーは、 IfVersionMatches の動作を指定しても、行バージョンの値を指定しない場合に発生します。

  • OptimisticConcurrencyNotEnabled (code=-2147088243)

    このエラーは、テーブルの更新時に IfVersionMatches の動作を指定したが、オプティミスティック コンカレンシーが有効になっていない場合に発生します。

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