イベント フレームワーク
Microsoft Dataverse では、現在プロセスが実行されているパイプライン内の場所を示すイベントが公開されます。 これらのイベントを処理して、データの検証、トランザクションの完了の阻止、宣言手法では実現できないあらゆるビジネス ロジックの自動化などを行うことができます。
.NET アセンブリ (プラグインと呼ばれます) を登録してこれらのイベントをサブスクライブすることにより、指定されたイベントが発生するたびにカスタム ロジックを実行できます。 その登録の実行には、Plugin Registration Tool というツールを使用します。 Plugin Registration Tool の詳細については、プラグインの登録のチュートリアルを参照してください。
大まかには、イベントの処理には 3 つの作業が必要です。 最初に、作成、取得、更新など、現在発生している (または発生しようとしている) 操作 (またはイベント) の種類を表す特定のメッセージをサブスクライブする必要があります。次に、そのイベント パイプラインのどこでロジックを実行するか (操作の前または後) も指定する必要があります。 検証が行われる前にイベントを処理することもできます。これは、ビジネス ルールやワークフローでは実現できない高度な検証ロジックを実行するために利用できる便利な方法です。 最後に、ロジックを実行する実行モード (同期または非同期) を指定する必要があります。
ここでは、この 3 つの領域について詳しく説明します。
イベント メッセージ
Dataverse では、さまざまなデータ操作が発生したときに発行される多数のメッセージが公開されます。 これらのメッセージの詳細については、「メッセージを組織サービスと共に使用する」を参照してください。
Dataverse によって公開される基本的なデータ操作は、次のとおりです。
作成
取得
RetrieveMultiple
更新
削除
関連付け
関連付け解除
また、処理しているテーブルの種類に応じて、コンテキストに従ってさまざまなメッセージが公開されます。 たとえば、自分のテーブルにロールアップ列がある場合は、CalculateRollupField イベント メッセージにイベント ハンドラーを実装できます。
通常、Dataverse を介して使用可能になるこれらのカスタム メッセージのインベントリを探すには、Microsoft.Sdk.Messages 名前空間で、名前が \Request で終わるクラスを検索します。 特定の種類のテーブルで使用できるメッセージを確認するには、Plugin Registration Tool を使用してテーブルとメッセージの組み合わせをナビゲートする方法もあります。
また、カスタム アクションを作成することにより、独自のメッセージを作成して公開することもできます。 アクションの詳細については、独自のアクションの作成を参照してください。
イベント パイプライン
特定のメッセージまたはイベントの種類をサブスクライブすることに加え、Dataverse では、イベントでカスタム ロジックが実行されているパイプライン内の場所を指定する手段も公開されています。 ASP.NET 開発者にとっては、これは Web アプリケーション内のページ ライフサイクルでの作業方法に似ています。 このアプローチは、パブリッシュ/サブスクライブ アーキテクチャのための一般的な開発パターンであり、他のイベント フレームワークに精通している開発者にとってはかなりなじみ深いものに感じられます。
事前検証
事前検証イベントは、セキュリティ チェックが実行される前にパイプラインで最初に発生します。 これは、現在のトランザクションを実行しているユーザーが、目的の操作を実行するために必要な適切なアクセス許可を持っていることを確認することを目的としています。
開発者は、このイベントを利用して、検証ロジックを実行し、トランザクションが発生する前に操作をキャンセルできます。 たとえば、テーブルが更新されるたびに実行するように構成した場合、プラグインの実行ロジック内で InvalidPluginExecutionException メソッドをスローすることによって、更新が行われる前に操作をキャンセルすることができます。 実行コンテキストの詳細については、実行コンテキストを理解するを参照してください。
事前操作
このイベントは、保存する前にテーブルの値を変更する場合に使用します。
事後操作
このイベントは、要求の送信者が応答を受け取る前にメッセージのプロパティを変更する場合に使用します。 この時点で対応するテーブルに更新プログラムを適用すると、別の更新イベントがトリガーされるため、適用しないようにしてください。
実行モード (同期と非同期)
プラグインは、処理するパイプライン操作の種類に応じて、同期的または非同期的に実行されるように構成できます。
同期
このモードで登録されたプラグインは、イベントの処理が実行パイプライン ステージに到達するとすぐに実行され、ロジックの実行が完了するまで操作全体が続行されません。 複数のプラグインが同じパイプライン ステージに対して実行されるように登録されている場合は、(Plugin Registration Tool 経由で指定された) 実行順序属性によって最初に実行されるプラグインが決まります。
非同期
このモードで登録されたプラグインは、非同期サービスにシステム ジョブとしてディスパッチされ、特定の操作が完了した後にロジックを実行します。 システム ジョブの動作の詳細については、「非同期サービス」を参照してください。
メモ
非同期プラグインは、イベント パイプラインの PostOperation ステージに対してのみ登録できます。