次の方法で共有


POS でカスタム通知を表示する

メモ

Dynamics 365 Commerce のリテール・インタレスト・グループは、Yammer から Viva Engage に移転しました。 新しい Viva Engage コミュニティにアクセスできない場合は、このフォーム (https://aka.ms/JoinD365commerceVivaEngageCommunity) に入力して追加し、最新のディスカッションに参加してください。

この記事では、Microsoft Dynamics 365 Commerce point of sale (POS) でカスタム通知を追加する方法について説明します。 この記事は、最新のバイナリ修正がある Microsoft Dynamics 365 Finance、Enterprise edition 7.3 および Dynamics 365 for Retail 7.3 とそれ以降のバージョンに適用されます。

次のシナリオで、POS 通知フレームワークを拡張できます。

  • カスタム通知を表示して、店舗の関連付けが通知に基づいて必要なアクションを実行したり、カスタム ロジックを実行できるようにします。
  • 定期的に、バックグラウンドで操作を実行します。 ただし、このシナリオは、パフォーマンスの問題を引き起こす可能性があるため、推奨されません。

カスタム通知の仕組み

POS の通知フレームワークは、Retail で構成された操作に対して定期的に実行されます。 (定期的な実行の頻度を構成できます)。コマース ランタイム (CRT) の通知サービスと Retail のリアルタイム サービスを呼び出します。 POS が CRT で通知サービスに対する呼び出しを行うと、CRT はビジネス ロジックを実行し、操作に対して POS に送信される通知があるかどうかを決定します。 操作 ID は、要求にパラメータとして渡されます。 CRT 通知サービスは操作 ID をチェックし、通知の詳細を返します。

通知が存在する場合、CRT は POS に利用可能な通知があることを報告する応答を返します。 この通知は、POS によって解析され、ユーザー インターフェース (UI) に表示されます。 POS ユーザが通知を選択すると、POS で関連する操作が実行されます。 通知は操作にリンクされています。 操作ハンドラー内で、実行する必要があるビジネス ロジックを書き込みます。

CRT が通知に対する応答を返すと、通知、メッセージ、およびアクション パラメーターの数が返されます。 POS フレームワークには、応答を解析して POS 操作 ID を取得し、ユーザーが通知を選択したときにそれを呼び出す組み込みロジックがあります。

操作内で、POS ユーザーが通知を選択したときに何が起こるかを指定するカスタム ロジックを記述できます。 action プロパティを使用して、CRT から POS にさらに多くのパラメーターを送信できます。 これらのパラメーターは、POS の操作要求内で使用できます。

受け取りの注文を準備するように POS ユーザーに通知するには、CRT 内で、受け取りの注文があるかどうかを確認します。 ある場合、関連するパラメーターを使用して通知応答を更新します。 POS が応答を解析し、通知を表示します。 POS ユーザーが通知を選択すると、POS は通知からのパラメータを使用して操作を呼び出します。 (拡張ロジックは、パラメータを送信する必要があるかどうかを決定します。) 操作内で、POS が集荷の保留中の注文をすべて読み取り、POS ユーザーがさらにアクションを実行できるように、注文を UI に表示します。

カスタム操作の通知を使用可能にするための必要な手順

  1. Retail 本部で リテールとコマース > チャネル設定 > POS 設定 > POS > POS 操作に移動し、操作を作成します。

    メモ

    カスタム操作の場合は、5000 を超える操作 ID を使用します。

  2. 通知サービスを拡張します。 通知サービスのスケジューラが実行されると、通知メッセージを取得するために、CRT とリアルタイム トランザクション サービス拡張コードの両方の拡張コードが呼び出されます。

  3. POS を拡張します。 POS で POS 操作内にロジックを記述して、POS ユーザーが通知を選択したときの動作を指定します。 POS 操作の作成方法については、ボタン グリッド デザイナーを使用して POS 操作を POS レイアウトに追加 を参照してください。

  4. Retail Headquarters で、カスタム操作の通知サービスを構成します。 その後、スケジューラが通知サービスを実行すると、カスタム操作が含まれます。 POS で通知を構成する方法については、ボタン グリッド デザイナーを使用して POS 操作を POS レイアウトに追加 を参照してください。

    POS ユーザーが通知を選択すると、フレームワークは CRT が返す応答に基づいて正しい操作を呼び出します。 Retail Headquarters で構成されているすべての通知に対して通知サービスが実行され、操作 ID と通知の詳細を含む応答が返されます。 そのため、POS には操作 ID のコンテキストがあり、フレームワークはこのコンテキストを使用して操作の実装を呼び出します。

メモ

通知スケジューラは、CRT と Retail Headquarters の両方で、新しい通知を確認します。 シナリオに応じて、Retail Headquarters または CRT のみのリアルタイム トランザクション サービスを拡張できます。 通知にリアルタイム処理が必要なシナリオでは、Retail Headquarters でリアルタイム トランザクション サービスを拡張します。 リアルタイム処理を必要としない場合は、CRT のみを拡張します。

CRT の通知サービスの拡張

CRT の通知サービスを拡張するには、GetNotificationsExtensionServiceRequest を上書きし、GetNotificationsExtensionServiceResponse を返します。

Retail ソフトウェア開発キット (SDK) には、通知サービス (RetailSDK\SampleExtensions\CommerceRuntime\Extensions.NotificationSample) を拡張する方法を示すサンプルが含まれています。

  • GetNotificationsExtensionServiceRequest – このクラスには、操作 ID、スタッフ、およびチャネルが含まれます。 Retail Headquarters の構成に基づいて、POS は構成された各操作に対して通知スケジューラを実行します。
  • GetNotificationsExtensionServiceResponse – 応答で、通知の詳細エンティティ (NotificationDetailCollection) を返し、GetNotificationsExtensionServiceResponse を更新して、すべての通知を返します。 応答はコレクションであるため、複数の通知を返すことができます。

通知詳細エンティティのプロパティ

通知の詳細エンティティには、次のプロパティがあります。 これらのプロパティの一部は、Retail essentials ボタン グリッド デザイナーおよびコマース本社で構成できます。

プロパティ データ型 説明
ActionProperty 文字列 POS 操作に送信するカスタム プロパティ。 ボタン グリッド デザイナーの [操作] パラメーター フィールドを使用して、このプロパティを構成します。
表示テキスト 文字列 通知の表示テキスト。
IsLiveContentOnly ブール 通知がライブ コンテンツのみを対象とするかどうかを示す値。
IsNew ブール 通知が新しいかどうかを示す値。
IsSuccess ブール 通知が成功したかどうかを示す値。
アイテム数 long 通知の数。
最終更新日時 DateTimeOffset アクション プロパティのアイテムが最後に更新された日時。
LastUpdatedDateTimeStr 文字列 アクション プロパティの項目が文字列形式で最後に更新された日時。

詳細な手順

  1. Retail SDK から Runtime.Extensions.NotificationSample.proj を開きます (RetailSDK\SampleExtensions\CommerceRuntime\Extensions.NotificationSample)。
  2. 標準の名前付け規則に従ってプロジェクトの名前を変更します。
  3. プロジェクト内で、 NotificationExtensionService.csという名前のクラス ファイルを開きます。
  4. GetNotificationsExtensionServiceRequest クラスをオーバーライドして、カスタム通知を追加します。 GetNotificationsExtensionServiceResponse を返します。
  5. 新しいクラスを作成し、 GetNotificationsExtensionServiceRequest をオーバーライドするか、サンプル テンプレートを使用します。
  6. NotificationExtensionService クラスには、Process という名前のメソッドがあります。 このコードは、メソッド内で操作 ID を確認し、操作 ID に基づいて通知の詳細オブジェクトを作成し、通知を追加します。 カスタム操作 ID かどうかを確認し、通知があるかどうかを確認するロジックを記述します。 通知がある場合は、詳細を含む通知オブジェクトを作成し、応答と共に返します。 次に、POS によって応答が解析され、通知が表示されます。 テンプレートに基づくコード例を次に示します。

メモ

通知詳細エンティティのアクション プロパティが POS 操作要求に送信されます。 このアクション プロパティを使用すると、通知サービス から POS にカスタム情報を渡すことができます。 ActionProperty はボタン グリッド デザイナーの [操作] パラメーター フィールドを使用して構成でき、ActionProperty 値はボタン グリッド デザイナーの Operation パラメーターの入力と等しい必要があります。

   namespace Contoso
    {
        namespace Commerce.Runtime.NotificationSample
        {
            using System;
            using Microsoft.Dynamics.Commerce.Runtime;
            using Microsoft.Dynamics.Commerce.Runtime.DataModel;
            using Microsoft.Dynamics.Commerce.Runtime.Services.Messages;
            /// <summary>
            /// Service class responsible executing the service requests.
            /// </summary>
            public class NotificationExtensionService : SingleRequestHandler<GetNotificationsExtensionServiceRequest, GetNotificationsExtensionServiceResponse>
            {
                /// <summary>
                /// The handler for the <c>GetNotificationsExtensionServiceRequest</c> request.
                /// </summary>
                /// <param name="request">The request with the operation.</param>
                /// <returns>The notification details for the operation.</returns>
                protected override GetNotificationsExtensionServiceResponse Process(GetNotificationsExtensionServiceRequest request)
                {
                    ThrowIf.Null(request, "request");
                    NotificationDetailCollection details = new NotificationDetailCollection();
                    DateTimeOffset lastNotificationDateTime = DateTimeOffset.Now;
                    string myOperationId = "5000";
                    // do the actual work here
                    if ((request.SubscribedOperation).ToString() == myOperationId)
                    {
                        NotificationDetail detail = new NotificationDetail()
                        {
                        // Text which will display for the notification detail in the POS notification center
                        DisplayText = "Custom notification",
                        // Number of notifications found
                        ItemCount = 1,
                        // Timestamp of creation of latest notification item (Used to determine whether notification is new)
                        LastUpdatedDateTime = lastNotificationDateTime,
                        // Boolean value representing whether the attempt to get notifications for the given operation was successful
                        IsSuccess = true,
                        // If you would like POS to navigate to a specific action property for the given operation
                        // when the notification tile is selected, define the action property as well.
                        // This property can be configured using the Operation parameter field of the button grid designer and passed to the CRT code.
                        ActionProperty = "1"
                        };
                    details.Add(detail);
                    }
                    var serviceResponse = new GetNotificationsExtensionServiceResponse(details);
                    return serviceResponse;
                }
            }
        }
    }
  1. 変更が完了したら、プロジェクトをビルドし、出力ライブラリを \RetailServer\webroot\bin\Ext にドロップします。
  2. CommerceRuntime.Ext.config ファイルに出力ライブラリを登録します。
  3. POS で、CRT 拡張機能で使用したのと同じ操作 ID を持つ新しい操作を作成します。 この例では、操作 ID は 5000 です。 5000 を超える任意の操作 ID を使用できます。
  4. POS ユーザーが通知タイルを選択すると、POS フレームワークは使用される操作 ID の操作ハンドラーを呼び出します。 ハンドラー内で、POS ユーザーが通知を選択したときに行われる特定の動作について、必要なロジックを追加します。 POS 操作要求、応答、およびハンドラーの作成方法については、 販売時点管理 (POS) での注文通知の表示 を参照してください。
  5. 販売時点管理 (POS) での注文通知の表示 の指示に従って、通知スケジューラをコンフィギュレーションします。

カスタマイズの検証

  1. 拡張 Store Commerce アプリケーションを開きます。

    POS は、通知スケジューラのコンフィギュレーションに基づいて通知サービスをトリガーします。

  2. CRT プロジェクトを w3wp.exe にアタッチして、CRT コードをデバッグします。 POS から通知サービスが呼び出されるたびにブレークポイントにヒットします。

  3. POS で通知を受信したら、通知を選択します。 通知は POS 操作ハンドラーを呼び出し、その中でカスタム ロジックを実行します。