1

Dynamics CRMのトランザクション管理に関する理解を確認し、何か不足しているかどうかを確認したいと考えました。 CRMプラグインでDynamics CRMプラグインとWebサービスのトランザクション

1)取引:DBトランザクションの下で実行イベントパイプラインのステージ20と40に登録 プラグイン。だから私は3つのプラグインが任意のメッセージの前/後の操作に登録されている場合、3番目のプラグインが例外をスローする場合は、最初の2つのプラグインによって行われた変更もロールバックされます。このことは正しいのでしょうか? CRM Webサービスで

2)取引:CRM Webサービスを使用してコードを書く場合は 、私が使用ExecuteTransactionRequest要求することができ、このメッセージで提供されているすべての要求メッセージが1つのCRM DBトランザクションの下で実行します。このメッセージは2016年版に導入されたようですが、2016年以前にこのようなシナリオを処理する理想的な方法は何でしょうか?

+0

CRMデータベースに対する変更のみが、プラグインによってロールバックされます。プラグインが別のデータベースを更新している場合(同期操作など)、他のデータベースへの変更はロールバックされません。 – jasonscript

答えて

3

1)プラグインがすべて同期的に実行されていると仮定した場合、すべての変更をロールバックする必要があります。

Inclusion in database transactions

プラグインは、またはMicrosoft Dynamics CRM プラットフォームのデータベーストランザクション内で実行されない場合があります。プラグインがトランザクションの一部であるかどうかは、 によってメッセージ要求がパイプラインによってどのように処理されるかに依存します。 プラグインに渡されたIPluginExecutionContextによって継承されたIsInTransaction プロパティを読み取ると、 プラグインがイントランザクションで実行されているかどうかを確認できます。プラグインがデータベーストランザクションで実行されていて、 が例外をプラットフォームに戻すことができる場合、 トランザクション全体がロールバックされます。ステージ20とステージ40は データベーストランザクションの一部であり、ステージ10はトランザクション の一部であることが保証されています。

データベース トランザクション中に実行され、例外をプラットフォームに戻す登録されたプラグインは、コア操作である をキャンセルします。この結果、コア操作がロールバックされます。 さらに、まだ実行されていない のプリイベントまたはポストイベント登録プラグインと、プラグインが登録された同じイベント によってトリガーされたワークフローは実行されません。

2)

  • はいExecuteTransactionRequestは、新しいCRM 2016の機能です。
  • CRM 2013+をお持ちの場合、自動ロールバックをサポートするActionの内部にロジックを配置することができます。次に、入力を伴うアクションを呼び出します。
  • CRM 2011の場合、ロジックをプラグインの中に入れます。次に、CRMにレコードを作成するなどして、プラグインを起動させます。新しいレコードの入力を取得することもできます。
+0

ありがとうございました。ちょっとしたフォローアップの質問。 1)実際には、同期プラグインでトランザクションを維持できないのですか?これは、メッセージに登録されている複数のプラグインにのみ適用されるか、1つのプラグイン内でも適用されますか? – Ashish

+0

asyncプラグイン自体はトランザクション可能ですが、syncプラグインのトランザクション外で実行されるため、以前のsyncプラグインにはロールバックされません。 –

関連する問題