オプティミスティック同時実行
Power Apps のようなマルチスレッド、マルチユーザー システムでは、操作とデータの変更がよく並行して実行されます。 同じデータの部分に対して 2 つ以上の更新または削除の操作が同時に行われると、問題が発生します。 この状態は、データの損失を引き起こす可能性があります。 アプリケーションがレコードを取得した時点から、そのレコードを更新または削除しようとした時点までの間に、オプティミスティック同時実行機能はテーブル レコードがサーバー上で変更されたかどうかを検出するためのアプリケーションの機能を提供します。
オプティミスティック同時実行は、オフライン同期が有効になっているすべての標準テーブルとすべてのカスタムテーブルでサポートされています。 コードを使用してテーブルのメタデータを取得するか、メタデータ ブラウザー を使用してメタデータを表示することにより、テーブルが楽観的同時実行性をサポートしているかどうかを判断し、そして列 IsOptimisticConcurrencyEnabled が true
に設定されているかどうかを確認できます。 カスタム テーブルの場合、このプロパティは規定で true
に設定されています。
オプティミスティック同時実行を有効化
要求の ConcurrencyBehavior プロパティを IfRowVersionMatches に設定して UpdateRequest を実行するとき、オプティミスティック同時実行の確認動作を有効にできます。 同様に、DeleteRequest に対して、ConcurrencyBehavior プロパティを設定します。
.NET 用 SDK コンテキストを使用してデータに変更を加える場合、OrganizationServiceContext オブジェクトに対して ConcurrencyBehavior を設定します。 この値は、SaveChanges() が呼び出されたときに、OrganizationServiceContext によって使用されるすべての UpdateRequest および DeleteRequest メッセージに渡されます。
オプティミスティック同時実行の動作は、SDK API 呼び出しによってのみ設定できます。 現在、Web アプリケーションのフォームでは、OC の動作に対して何も設定されていません。
Web API を使用してのオプティミスティック同時実行の適用
Web API を使用したオプティミスティック同時実行の適用の詳細については、「オプティミスティック同時実行の適用」を参照してください。
.NET 用 SDK を使用してオプティミスティック同時実行を適用する
.NET 用 SDK を使用したオプティミスティック同時実行の適用の詳細については、オプティミスティック同時実行の動作を参照してください
例外処理
オプティミスティック同時実行を使用する場合の Web サービス呼び出しから、エラー例外 <OrganizationServiceFault> で返される可能性のあるいくつかのエラー条件があります。
ConcurrencyVersionMismatch (code=-2147088254)
行バージョンが提供されて、IfVersionMatches 動作が指示されているとき、既存のレコードのバージョンが要求で提供された行バージョンと一致しない場合、フォールトが返されます。
ConcurrencyVersionNotProvided (code= -2147088253)
IfVersionMatches 動作が指示されていて、行バージョンの値が提供されていないとき、フォールトが返されます。
OptimisticConcurrencyNotEnabled (code=-2147088243)
IfVersionMatches 動作がテーブルの更新時に示され、オプティミスティック同時実行が有効になっていない場合は、エラーが返されます。
返されたフォルトの コード プロパティをチェックして、フォルトがオプティミスティック同時実行に関連しているかどうか確認できます。 先に表示されたエラー状態を示すコードが、ErrorCodes.cs ヘルパー コードから取得されました。
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。