プラグインの例外を処理する

Dataverse がプラグインの例外を管理する方法は、プラグイン ステップの登録の種類によって異なります。

  • 同期プラグインステップの例外は、操作をキャンセルしてロールバックします。 ユーザーに返されるメッセージを制御できます。
  • 非同期プラグイン ステップの例外がログに記録され、AsyncOperation テーブルとも呼ばれるシステム ジョブ テーブルに追加されます。

現在の操作を取り消す

同期プラグイン内では、メッセージ要求を拒否できます。 操作がプラグインによって適用される規則に従っていない場合は、 InvalidPluginExecutionException 例外をスローし、メッセージに理由を含めます。

PreValidation ステージに登録されている同期プラグインを使用して操作を取り消すのが理想的です。 このステージ は、通常 、メイン データベース トランザクションの外部で発生します。 操作がロールバックされないように、トランザクションに到達する前に操作を取り消します。 操作をロールバックするには、重要なリソースが必要であり、システムのパフォーマンスに影響します。 PreOperation ステージと PostOperation ステージの操作は、常にデータベース トランザクション内で行われます。

PreValidation ステージは、別の操作によって開始されるときに、トランザクション内にある場合があります。 たとえば、アカウントの作成の PostOperation ステージでタスク レコードを作成した場合、タスクの作成はイベント実行パイプラインを通過し、 PreValidation ステージ内で発生しますが、アカウント テーブル レコードを作成するトランザクションの一部です。 操作がトランザクション内にあるかどうかを確認するには、 IExecutionContext.IsInTransaction プロパティの値を確認します。

モデル駆動型アプリが同期プラグイン例外を処理する方法

同期プラグイン内で InvalidPluginExecutionException 例外をスローすると、メッセージを含むエラー ダイアログがユーザーに表示されます。 メッセージを指定しない場合は、一般的なエラー ダイアログがユーザーに表示されます。 他の種類の例外をスローすると、一般的なメッセージを含むエラー ダイアログがユーザーに表示されます。 例外メッセージとスタック トレースは PluginTraceLog テーブルに書き込まれます。

統合インターフェイスでは、エラー ダイアログでは、メッセージ内の HTML でエンコードされたコンテンツはサポートされていません。 テキストのみを使用します。

予期しないエラー

同期ステップのプラグイン コードで例外が発生した場合、 InvalidPluginExecutionException をスローするかどうかに関係なく、データベース トランザクションで処理されているパイプライン操作は取り消され、ロールバックされます。 InvalidPluginExecutionException は、ユーザーに表示される例外メッセージを制御する機能を提供する唯一の例外です。 この動作は、Dynamics 365 ソリューションで使用されるモデル駆動型アプリに適用されます。

プラグインがプラットフォームに渡すことができるエラー関連データの種類を確認するには、使用可能な InvalidPluginExecutionException コンストラクターを確認します。

ヒント

ユーザーに表示される内容を制御できるように、エラーをキャッチし、 InvalidPluginExecutionException 例外をスローすることをお勧めします。 このエラーは単に "An unexpected error occurred" である可能性がありますが、管理者が問題のトラブルシューティングに役立つ情報を追加することもできます。 この方法では、何らかの制御が必要です。 他の種類の例外にバブル アップを許可すると、メッセージ IsvUnExpectedを含むAn unexpected error occurred from ISV code. エラーとしてエラーが表示されます。これはあまり役に立ちません。

非同期プラグインの例外の処理方法

非同期登録済みプラグインの例外メッセージは 、Web アプリケーションのシステム ジョブ 領域で表示できる AsyncOperation テーブルとも呼ばれる システム ジョブ テーブルに書き込まれます。 ユーザーにダイアログは表示されません。 非同期プラグインは、キューに登録されたデータベース トランザクションには参加しないため、トランザクションを取り消すことはできません。

非同期プラグインを再試行する

非同期プラグインステップを使用すると、プラグインが失敗したときに再試行できます。 エラーの原因は、ネットワーク エラーまたは外部リソースを呼び出すその他の再トライ可能なエラーが原因である可能性があります。

プラグインを再試行するには、OperationStatus Enum メンバー値を使用して Retry コンストラクターを使用します。

プラグインがこの種類の例外をスローすると、非同期サービスはプラグインの実行を 4 回試行します。 プラグインの実行が 4 回の試行で成功しない場合、呼び出しは失敗します。