プラグインでの例外の処理

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

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

現在の操作のキャンセル

同期プラグイン内でのオプションの 1 つは、要求を拒否することです。 操作がプラグインによって適用されるルールに従わない場合、InvalidPluginExecutionException 例外をスローして、操作が拒否された理由をメッセージに入力することができます。

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

PreValidation ステージは、別の操作のロジックで開始されると、トランザクション内になる場合もあります。 たとえば、取引先企業の作成の PreOperation ステージのタスク エンティティ レコードを作成する場合、タスクの作成はイベント実行パイプラインを通って渡され、PreValidation ステージ内で発生しますが、取引先企業のエンティティ レコードを作成するトランザクションの一部です。 IExecutionContext.IsInTransaction の値で操作がトランザクション内にあるかどうかを判断できます。 プロパティに設定します。

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

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

注意

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

予期しないエラー

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

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

ヒント

ユーザーに表示する内容を制御できるようにするため、エラーを見逃さず、InvalidPluginExecutionException 例外をスローすることをお勧めします。 このエラーは単に "An unexpected error occurred" ですが、管理者が問題のトラブルシューティングを行うのに役立つ情報を追加することもできます。 こうすることで、ある程度制御することができます。 他のタイプの例外のバブル アップを許可すると、エラーは An unexpected error occurred from ISV code. というメッセージ付きの IsvUnExpected エラーとして表示されますが、あまり役に立ちません。

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

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

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

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

プラグインを再試行するには、OperationStatus Enum Retry メンバー値を使用した InvalidPluginExecutionException(OperationStatus, Int32, String) コンストラクターを使用します。

プラグインがこのタイプの例外をスローすると、非同期サービスはプラグインの実行を 4 回試みます。 プラグインの実行が 4 回以内に成功しなかった場合、呼び出しは失敗します。

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。