Microsoft Dataverse ビジネス イベント
ビジネス ロジックの自動化と他のシステムとの統合は、イベントによって行われます。 ビジネス アプリケーションで何か面白いことが起こると、イベントが発生し、そのイベントを説明するデータがサブスクライバーに提供され、応答できるようになります。 Microsoft Dataverse は、以下のアプリケーションやテクノロジーを用いて、イベント データをサブスクライバーに中継する機能を提供します。
- Power Automate フロー
- Azure Service Bus
- Azure イベント ハブ
- Webhook
- Dataverse プラグイン
Dataverse は Dataverse の内部のシステム イベントを把握する強固なイベント フレームワークを備えています。 Dataverse のイベント フレームワークを使って、システム内のイベントに対応することができます。 これは変更されません。 詳細: イベント フレームワーク
Dataverse ビジネス イベントは、イベントを公開し、アクションが実行された際の Power Automate Dataverse のように、非同期に応答するビジネスロジックを構成する新しい方法を提供します。
次に例をいくつか示します。
ユーザーが所有するレコードに対して共有操作が行われた際に適用するロジックがあります。 レコードが共有されたときに発生する、この
GrantAccess
のメッセージに対してロジックを開始する唯一の方法は、Dataverse のイベント フレームワークを介して、通常はプラグインを介して行われます。 ビジネス イベントでは、GrantAccess
のメッセージを公開するテーブルをカタログ化することができます。プラグインの開発者は、同期プラグインのコードの中に、特定の条件に反応するロジックを実装している場合があります。このロジックは、別の非同期プラグインが自動化を開始するために共有変数に渡されます。 ビジネス イベントでは、これらの詳細をイベント パイプラインの共有変数に渡すのではなく、イベントの詳細をパラメータに含むカスタムアクションを呼び出すことができます。 非同期プラグインは、カスタム アクションに応答することができますが、代わりに Power Automate を使用することもできます。 また、そのイベントに対応するために他のロジックを追加することもできます。 このパターンにより、柔軟性が高まり、プラグインコードのロジックを簡素化することができます。
カタログとカスタム イベント
Dataverse ビジネス イベントには、Dynamics 財務と運営ビジネス イベントと Dataverse イベント フレームワークのコンセプトが含まれ、それらのイベントが発生したときに、イベントを検出して自動化を作成するための新しい方法を提供します。
イベント カタログ: システムで利用できるイベントが非常に多いため、適切なイベントを見つけるのが難しい場合があります。 イベント カタログは、イベントをソリューションに関連付け、イベントをカテゴリに整理することにより、適切なイベントを見つけやすくします。
カタログには、ソリューションに関連する選択された価値の高いイベントのみが含まれます。 イベントをカタログに追加することで、そのイベントを公開することができます。
カスタムイベント: カスタム アクションは、Dataverse のイベント フレームワークを使って処理されるため、カスタム イベントとして作成することができます。
これらのイベントは、Dataverse 内のデータ変更を表している場合もあれば、そうではない場合もあります。 イベントが発生したことをリスナーに通知するためだけに存在する同期ロジックを持たないカスタム API を使用することができます。 カスタム アクションを呼び出すことにより、イベントを発行します。
イベント カタログ
ビジネス イベントを公開するには、カタログ化する必要があります。 詳細情報: Catalog と CatalogAssignment テーブル
カタログでは、ビジネス イベントが含まれるソリューションと、そのソリューションに定義されたカテゴリによってグループ化されているため、ビジネス イベントを簡単に見つけることができます。 ソリューション発行者は、ソリューションに最も関連性の高いイベントを選択します。
カタログは、最上位レベルがソリューションを表す階層構造となっています。 次のレベルはカテゴリです。 関連するテーブルやイベントは、カテゴリに割り当てられます。
たとえば、以下は Contoso の顧客管理 と呼ばれるソリューションのカタログを表しています:
- Contoso の顧客管理
- テーブル
- 勘定科目
- Contact
- メンバーシップ
- 顧客イベント
- 入店
- Web サイトの訪問
- 製品の購入
- 製品の返品
- テーブル
この例では、テーブルと顧客イベントをカテゴリとして使用していますが、ソリューションに適した任意のカテゴリーグループを使用することもできます。
複数の依存関係にあるソリューションで構成されている場合は、ベース ソリューションでルート カタログを定義した後、カテゴリや割り当てられたイベントを追加する依存関係にあるソリューションに追加することができます。
テーブル イベント
テーブルがカテゴリに割り当てられると、そのテーブルに関連する特定の操作が含まれるようになります。 各操作を個別に選択することはできません。 テーブルが Create、Update、Delete の操作に対応している場合は、これらのイベントが含まれます。
他の操作に関連する追加のイベントも含まれます。 たとえば、テーブルがユーザー所有のものであれば、セキュリティ イベントに参加します。 テーブル内のレコードの所有者は、そのレコードを共有したり、共有機能を変更したり、レコードの共有を停止したりすることができます。 共有に関連する操作は、GrantAccess
、ModifyAccess
、RevokeAccess
イベントとして公開されます。 また、テーブルによっては追加のイベントが含まれることもあります。 テーブルが仮想テーブルで、仮想テーブルイベントをサポートするように構成されている場合は、OnExternalCreated
、OnExternalUpdated
、OnExternalDeleted
イベントが含まれます。 詳細情報: Dataverse イベントに対応した仮想テーブルを有効化する
サブスクライバーが関心を持つビジネスデータを含むテーブルのみを追加します。 すべてのテーブルを含めようとしてはいけません。
同じテーブルを複数のカタログに含めることができます。 たとえば、ソリューションが Dataverse の取引先企業テーブルや取引先担当者テーブルの顧客データに依存している場合、それらを含める必要があります。 他のカタログには、ソリューションのテーブルが含まれている場合があります。
カスタム イベント
Dataverse カスタム API を使用して、カスタム イベントを作成します。 各カスタムAPIは、新しい Dataverse メッセージを作成し、カスタム API を呼び出す Web サービスのエンドポイントを提供します。 詳細: カスタム API の作成と使用。
カスタム ビジネス イベントは、イベントが完了したときにのみ通知を送信できます。 Dataverse のイベント フレームワークは、システムの動作を拡張できるように、操作をキャンセルしたり出力を変更したりできる同期ロジックを含める機能を提供します。 ビジネス イベントで公開されるメッセージの多くは、Dataverse イベント フレームワークの同期ロジックを使って拡張することができますが、ビジネス イベントの通知は、これらの操作が正常に完了した場合にのみ発生します。
たとえば、再割り当てのようなビジネス プロセスを表す一連のオペレーションをカプセル化したカスタム API があり、あるレコードの所有権を特定の条件に基づいて別のレコードに変更する機能を有しているとします。 またエスカレートでは、レコードの優先度の状態を上げ、追加の関連タスクを作成します。 このようにカスタム API を使用すると、サブスクライバーが興味を持ちそうな新しいイベントを定義することになります。 これらの操作が正常に完了した場合、非同期ロジックをトリガーできます。
また、カスタム アクションを作成して、サブスクライバーがそれに反応できるようにすることもできます。 外部イベントでは、イベントが Dataverse の外部から発生する場合を説明していますが、同じ設定を使用して Dataverse の内部で使用するイベントとしてカスタム API を作成することもできます。 カスタム アクションがサブスクライバーのみに対応するものである場合は、カスタム アクションの名前を On
で始めることをお勧めします (OnCustomerPurchase
や OnVendorPaymentPosted
など)。
カスタム API は様々な目的で使用することができますが、そのすべてがビジネス ロジックの興味深いイベントを表す操作に関連しているわけではありません。 この理由により、ビジネスイベントをカタログ化する必要があるのです。 カスタム API を含むソリューションの所有者は、価値の高いイベントを表すカスタム API のみをカタログ化する必要があります。 ソリューションに含まれるすべてのカスタム アクションをカタログ化してはいけません。
設計原則
ソリューション内のビジネス イベントとしてカタログ化するカスタム API を検討する場合は、次の設計原則を使用してください。
明確な意図: ビジネスイベントを開催する意図を明確に理解する必要があります。 言い換えれば、ビジネスイベントを作成する理由や、サブスクライバーがどのように使用するのかを把握する必要があります。
具体的で明確な: サブスクライバーが応答する必要があるかどうかをフィルター処理する必要がないように、イベントは具体的である必要があります。 サブスクライバーが必ずしも応答するとは限らない一般的なビジネス イベントを作成しないでください。
軽量: イベントの説明に必要なデータのみを含める必要があります。 サブスクライバーが追加データを必要とする場合、イベントの情報は、必要に応じてデータを取得できるようなコンテキストを提供する必要があります。
データ転送用ではない: データを受信者に転送し、効果的にデータ エクスポート シナリオを実現することを目的としている場合、ビジネス イベントに対する良いユースケースはありません。 実際的には、データ転送のシナリオにビジネス イベントを使うのは、誤用であると見なすことができます。
カスタム プロセス アクション
カスタム アクションの概念には、カスタム API とカスタム プロセス アクションの両方が含まれます。 どちらも新しい API を作成しますが、その方法は異なります。 カスタム ビジネス イベントには、カスタム API をお勧めします。
カスタムプロセス アクションは、ビジネス イベントとしてカタログ化することもできます。 これは、ソリューションが既にカスタム プロセス アクションを使用して、ビジネス イベントを表すビジネス ロジックをカプセル化している場合の後方互換性のためです。 カスタム API を使用するために、このカスタム アクションを移行する必要はありません。
ただし、カスタム プロセス アクションには次の制限があります:
- 他のワークフローと同様に、UI で無効にすることができます。 第三者がカスタム プロセス アクションを無効にしても、機能しなくなるまでは気付かないかもしれません。
- 最近までは、カスタム プロセス アクションに同期プラグインのステップが登録されることを防ぐ方法がありませんでした。つまり、誰でもカスタム プロセス アクションの動作変更や、キャンセル可能な同期ステップを登録できてしまうことになります。 IsCustomProcessingStepAllowedForOtherPublishers 管理プロパティが用意れており、カスタム プロセス アクションがこれをブロックできるようになりました。 しかし、このプロパティを設定するためにカスタム プロセス アクションを更新する場合は、代わりにカスタム API を使用するように変換を検討する必要があります。
それらの違いの詳細については、次を参照してください: カスタム プロセス アクションとカスタム API を比較する
カスタム プロセス アクションにワークフロー デザイナー内のロジックが含まれておらず、操作の実行をプラグインのみに依存している場合は、カスタム プロセス アクションをカスタム API に移行することで、これらの問題を軽減できます。
Power Platform コミュニティでは、これを支援するツールをすでに作成しています。 詳細については、XrmToolBox プラグイン カスタム アクションからカスタム API へのコンバーターを参照してください。
注意
コミュニティによって作成されたツールは、Microsoft によってサポートされていません。 コミュニティ ツールに関する質問や問題は、ツールの公開元にお問い合わせください。
外部イベント
カスタム イベントは、外部システムで発生するイベントを表すことができます。 外部システムで発生するイベントはすでに完了しています。
外部イベント用に作成されたカスタム API は、次の原則に準拠する必要があります。
- メインの操作には、プラグイン タイプを指定しないでください。
- 同期ステップの登録を許可しないでください。
- カスタム API 許可されたカスタム処理手順の種類プロパティを 非同期のみ に設定する必要があります。 これにより、同期ステップがこの API に適用されなくなります。
- これらには応答プロパティではなく、要求パラメーターのみが含まれている必要があります。
- 同期ロジックがない場合、応答プロパティを設定する方法はありません。
注意
これらの設定は、Dataverse の外で発生するイベントだけではありません。 これらの設定にカスタム API を使用して、Dataverse 内 で発生するイベントを表すことも可能です。
例
2つの外部イベントの例を比較してみましょう:
シナリオ A: OnCustomerPurchase
POS アプリケーションがあり、顧客の購入が重要なイベントであることを把握したいと考えています。 もしかしたら、購入してくれた顧客にお礼のメールを送り、その顧客が Dataverse に使った合計金額の情報を保存することを考えているかも知れません。 Dataverse 内で OnCustomerPurchase
カスタム API を定義することができます。 POS アプリケーションは、このイベントの情報を Dataverse に送信することができます。 Dataverse で、合計値でレコードを更新する例を考えてみましょう。 そして、Power Automate を使って、購入者にお礼のメールを送りたいと考えています。
合計を計算してレコードを更新するロジックを、カスタム API のメイン操作で実装するのが最も効率的だと思われるかもしれません。 しかし、このように同期型のロジックを導入すると、ロジックが失敗して、呼び出した POS アプリケーションにエラーを返す可能性があります。 イベントはすでに発生しているため、Dataverse コールの失敗の原因となる同期ロジックを実行する必要はありません。 その代わりに、すべてのロジックを含む Power Automate に依存するか、OnCustomerPurchase
のイベントに別の非同期プラグインのステップを含めて、Dataverse のレコードを更新します。
シナリオ B: OnVendorPaymentPosted
ERP アプリケーションで OnVendorPaymentPosted
イベントが発生し、自動化ロジックの集中化を単純化したいと考えています。 この外部イベントを表すカスタム API を作成し、ERP アプリケーションがこの Dataverse API を呼び出すように設定できます。 このカスタム API をイベントとしてカタログ化すると、Dataverse Power Automate コネクタを使ってこのイベントをトリガーとして使えるようになります。
この例では、イベントに登録する非同期ロジックを有効にする以外は、Dataverse では何もしないことを想定しています。
外部アプリケーションからのカスタム API の呼び出し
カスタム API を使用してビジネス イベントを送信するにあたっての主な要件は、アプリケーションが Dataverse に対して許可された HTTP リクエストを行う機能を持っていることです。 承認においては、他のアプリケーションからのリクエストは、通常、 Dataverse 環境で作成する必要がある特別なアプリケーション ユーザー アカウントを使用します。 ライセンスを取得し、認証された Dataverse ユーザーは、アプリケーションを使用してこれらのリクエストを送信することもできます。
カスタム API からすべての同期ロジックを取り除くことで、エラーが原因で操作が失敗する可能性は極めて低くなりますが、完全に可能性をなくすことはできません。 呼び出し側のアプリケーションは、Dataverse サービスが応答しない、ネットワーク接続に問題がある、サービス保護制限エラーが返された場合に、一時的なエラーに対処する方法を提供する必要があります。
アプリケーションから Dataverse への許可された通話を有効にするには、Dataverse の環境に対応したアプリケーション ユーザーがが設定されている必要があります。 詳細については、サーバー間 (S2S) 認証を使用して Web アプリケーションを作成するを参照してください。
ビジネス イベントを使用して自動化をトリガーする
ビジネス イベントが共通のパターンになると、自動化を可能にする方法が複数考えられるようになります。
ビジネス イベントが公開される最初のエクスペリエンスは、アクションが実行されたときのトリガーを使用した Power Automate Dataverse コネクタです。
このエクスペリエンスでは、テーブル イベントの Create、Update、Delete イベントは表示されません。 これらのイベントは、行が追加、変更、または削除されたとき のトリガーを使ってすでに利用可能となっています。
関連項目
Catalog と CatalogAssignment テーブル
Dataverse イベントに対応した仮想テーブルを有効化する
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。