Commerce Rumtime (CRT) の拡張機能とトリガー

この記事では、Dynamics 365 commerce runtime (CRT) のトリガー サポートについて説明します。 CRT は、すべての要求に対してプレ トリガーおよびポスト トリガーをサポートしています。

CRT トリガーの概要

Commerce Runtime (CRT) トリガーによって CRT のワークフローを拡張でき、全ての CRT リクエストが実行される前後に、ビジネス ロジックに追加できるようにします。 次の 2 つの方法が使用されます。

  • OnExecuting – このメソッドは、要求が対応する IRequestHandler 実装によって処理される前に呼び出されます。
  • OnExecuted – このメソッドは、要求が対応する IRequestHandler 実装によって処理された後に呼び出されます。

ノート

大量の API (たとえば、Carts/AddCartLines や Products/GetByIds) で使用される CRT リクエストを拡張し、その拡張機能がチャネルデータベースから読み取る必要がある場合、Microsoft ではデータベース読み取り用のキャッシュを有効にすることを推奨しています。 これをしない場合、拡張機能が Retail Server とチャネル データベースのリソースを過剰に消費し、ビジネスに影響を及ぼすCommerce Scale Unit (CSU) 全体のパフォーマンスの問題が発生する可能性があります。

CRT トリガーの拡張

トリガーを実装するには、次のコード例に示すように、これらのタスクを完了する必要があります。

  1. IRequestTriggerAsync を実装します。
  2. SupportedRequestTypes を指定して、トリガーを実行する必要のある要求のタイプを定義します。
  3. 要求の解決前にビジネス ロジックを実行する必要がある場合、トリガーの実装を OnExecuting メソッドに記述します。
  4. 要求の解決後にビジネス ロジックを実行する必要がある場合、トリガーの実装を OnExecuted メソッドに記述します。

顧客データ要求の取得のトリガー実装例。


        using Microsoft.Dynamics.Commerce.Runtime;
        using Microsoft.Dynamics.Commerce.Runtime.DataServices.Messages;
        using Microsoft.Dynamics.Commerce.Runtime.Messages;
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;

        public class GetCustomerTriggers : IRequestTriggerAsync
        {
            /// <summary>
            /// Gets the supported requests for this trigger.
            /// </summary>
            public IEnumerable<Type> SupportedRequestTypes
            {
                get
                {
                    return new[] { typeof(GetCustomerDataRequest) };
                }
            }

            /// <summary>
            /// Post trigger code.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <param name="response">The response.</param>
            public async Task OnExecuted(Request request, Response response)
            {
                //Custom logic

            // The only stub to handle async signature
                await Task.CompletedTask;
            }

            /// <summary>
            /// Pre trigger code
            /// </summary>
            /// <param name="request">The request.</param>
            public async Task OnExecuting(Request request)
            {
                // custom logic
                await Task.CompletedTask;
            }
        }

拡張機能の登録

拡張ライブラリを ...\RetailServer\webroot\bin\ext フォルダーにコピーして貼り付け、構成セクションのカスタム拡張ライブラリ情報を含む commerceRuntime.ext.config ファイルを更新します。 この例では、Contoso.Commerce.Runtime.Services はカスタムの拡張機能名です。

<add source="assembly" value="Contoso.Commerce.Runtime.Services" />

CRT 拡張機能がオフライン モードで動作するためには、構成セクションの下にある拡張ライブラリ情報で、...\Microsoft Dynamics 365\70\Retail Modern POS\ClientBroker\ext\CommerceRuntime.MPOSOffline.ext.config を更新してください。 次に、拡張ライブラリを ...\Microsoft Dynamics 365\70\Retail Modern POS\ClientBroker\ext にコピーし貼り付けます。

CRT のデバッグ

POS から CRT をデバッグするには、POS が Retail Server に接続されているときに、CRT 拡張プロジェクトを、w3wp.exe (Retail Server の IIS プロセス) に関連付けます。 オフライン モードの場合は、dllhost.exe プロセスに CRT 拡張プロジェクトを関連付けます。