イベント実行パイプライン

 

公開日: 2017年1月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

Microsoft Dynamics 365 のイベント処理サブシステムは、メッセージ パイプライン実行モデルに基づいてプラグインを実行します。Microsoft Dynamics 365 Web アプリケーションでのユーザーによる操作またはプラグインなどのアプリケーションによる SDK メソッド呼び出しによって、メッセージが組織 Web サービスに送信されます。 このメッセージには、ビジネス エンティティの情報およびコア操作の情報が含まれます。 メッセージはイベント実行パイプラインを介して渡されます。このパイプラインでは、プラットフォーム コア操作および登録されている任意のプラグインでメッセージの読み取りまたは変更ができます。

注意

Microsoft Dynamics 365 プラットフォームによってホストされる Web サービスはいくつかありますが、組織エンドポイントまたは OData エンドポイントからイベントが発生した場合にのみプラグインが実行されます。

このトピックの内容

アーキテクチャと関連コンポーネント

パイプライン ステージ

メッセージ処理

プラグイン登録

データベース トランザクションへの組み込み

アーキテクチャと関連コンポーネント

次の図は、Microsoft Dynamics 365 プラットフォームの同期イベント処理および非同期イベント処理に関する全体的なアーキテクチャを示しています。

イベント処理アーキテクチャ

同期および非同期イベント処理の図

イベント実行パイプラインでは、イベントが同期的または非同期的に処理されます。 同期的な実行を目的として登録されているプラットフォーム コア操作およびプラグインは、ただちに実行されます。 イベント用に登録されている同期プラグインは、定義された順序で実行されます。 非同期に実行するために登録されているプラグインは、非同期キュー エージェントによってキューに登録され、後で非同期サービスによって実行されます。

重要

プラグインの実行が同期と非同期のどちらであっても、メッセージ要求の実行には 2 分間の制限時間があります。 プラグイン ロジックの実行がこの時間制限を超えた場合、System.TimeoutException がスローされます。 プラグインが 2 分間を超える処理時間を必要とする場合は、同じタスクを実行するワークフローまたはその他のバックグラウンド プロセスの使用を検討してください。 この 2 分の時間制限は、サンドボックスとも呼ばれ、部分信頼で実行するために登録されたプラグインのみに適用されます。詳細:プラグイン分離、信頼、および統計

パイプライン ステージ

イベント パイプラインは複数のステージに分かれています。そのうちの 4 ステージは、ユーザーによって開発されたプラグインまたはサード パーティ製のプラグインを登録するために使用できます。 各ステージに登録した複数のプラグインは、プラグインの登録中にそのステージ内での順序付け (ランク付け) も指定できます。

イベント

ステージ名

ステージ番号

説明

イベント前

事前検証

10

システムのメイン操作の前に実行される、プラグインを登録するパイプライン ステージです。 このステージに登録されたプラグインは、データベース トランザクションの外部で実行されます。

System_CAPS_security セキュリティ メモ

事前検証ステージは、セキュリティ チェックを実行して、呼び出し元ユーザーまたはログオン ユーザーが目的の操作を実行するのに適切なアクセス許可を持っていることを確認する前に発生します。

イベント前

事前操作

20

システムのメイン操作の前に実行される、プラグインを登録するパイプライン ステージです。 このステージに登録されたプラグインは、データベース トランザクションの内部で実行されます。

プラットフォーム コア操作

MainOperation

30

作成、更新、削除など、システムのトランザクション内のメイン操作です。 このステージには、カスタム プラグインは登録できません。内部のみで使用

イベント後

事後操作

40

メイン操作の後に実行するプラグインを登録するパイプライン ステージです。 このステージに登録されたプラグインは、データベース トランザクションの内部で実行されます。

メッセージ処理

アプリケーション コードまたはワークフローが Microsoft Dynamics 365 Web サービス メソッドを呼び出すと、イベントを発生させる状態変更がシステム内で生じます。 Web サービス メソッドにパラメーターとして渡された情報は、OrganizationRequest メッセージに内部的にパッケージ化され、パイプラインによって処理されます。OrganizationRequest メッセージ内の情報は、そのイベント用に登録された最初のプラグインに渡されます。そのプラグインでは、そのイベント用に登録された後続のプラグインに渡される前に情報を読み取ったり変更することができます。 プラグインは、それぞれの Execute メソッドに渡されたコンテキストの形式でメッセージ情報を受け取ります。 メッセージは、プラットフォーム コア操作にも渡されます。

プラグイン登録

プラグインは、コア プラットフォーム操作の前または後に実行するように登録できます。 イベント前に実行するように登録されたプラグインは、OrganizationRequest メッセージを最初に受け取り、コア操作に渡す前にメッセージ情報を変更できます。 コア プラットフォーム操作が完了した後で、メッセージは OrganizationResponse と呼ばれます。 この応答は、登録されているイベント後プラグインに渡されます。 イベント後プラグインは、登録されている非同期プラグインに応答のコピーを渡す前に、必要であればメッセージを変更できます。 最後に、応答は、最初の Web サービス メソッドを呼び出したアプリケーションまたはワークフローに返されます。

単一の Microsoft Dynamics 365 サーバーが複数の組織をホストできるので、実行パイプラインは組織ごとに動作します。 組織ごとに固有の仮想パイプラインがあります。 パイプラインに登録されたプラグインは、単一の組織のビジネス データのみを処理することができます。 複数の組織で使用することを目的として設計されたプラグインは、各組織の実行パイプラインに登録する必要があります。

データベース トランザクションへの組み込み

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

データベース トランザクション中に実行され、例外をプラットフォームに返す登録済みプラグインは、コア操作を取り消します。 結果的に、これはコア操作のロールバックに相当します。 また、まだ実行されていない登録済みイベント前プラグインまたはイベント後プラグインと、これらのプラグインが登録されているものと同じイベントによって呼び出されたワークフローは、実行されません。

関連項目

イベント フレームワークの紹介
プラグイン分離、信頼、および統計
プラグインの登録および展開
Microsoft Dynamics 365 での非同期サービス

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権