Commerce Store レシートの拡張

この記事では、Commerce store レシートを拡張する方法を説明します。 レシートには 2 種類の拡張子を使用できます。

  • カスタム フィールド - 新しい入庫フィールドを既存の入庫に追加します。
  • カスタム入庫タイプ - カスタム シナリオのための新しい入庫を作成します。

カスタム フィールド

シナリオ: Fabrikam は保証のついた製品が販売されるたびに特別な領収書を印刷したいと考えています。 販売レシートには、保証の有効期限日、保証 ID、およびその他の情報を含める必要があります。 業務要件を次に示します。

  • 特殊な領収書を印刷します。
  • 販売レシートに、その他の保証の情報を印刷します。

次の手順では、カスタム フィールドの HQ コンフィギュレーションおよび CRT コードの変更を示します。

カスタム フィールド用にバックオフィスを構成する

本社 (HQ) では 2 つのカスタム レシート フィールドを作成します。保証有効期限の EXPIRATIONDATE と保証 ID の WARRANTYID です。 レシート形式レイアウトにこれらのフィールドを追加します。

  1. HQ にサインインします。

  2. Retail とコマース > チャネル設定 > POS 設定 > POS プロファイル > 言語テキストの順に移動します。

  3. POS タブで、追加を選択して新しい POS 言語テキストを追加します。

    レシート パネルに表示されるテキストはローカライズすることができます。 したがって、同じテキスト ID の異なる言語で複数のテキストを作成することができます。 次に例を示します。

    言語 ID テキスト ID テキスト
    ja-JP 1 WARRANTYID
    en-UK 1 WARRANTYID
  4. アクション ウィンドウで、保存を選択して変更を保存します。

  5. Retail とコマース > チャネル設定 > POS 設定 > POS プロファイル > カスタム フィールドの順に移動します。

  6. アクション ウィンドウで、新規を選択して新しいカスタム フィールドを追加し、次の情報を指定します。

    1. 名前フィールドに、カスタム フィールドの名前を入力します。
    2. タイプフィールドで、レシートを選択します。
    3. キャプション テキスト ID フィールドで、手順 3 で使用したテキスト ID を指定します。

    次に例を示します。

    Name キャプション テキスト ID
    WARRANTYID 受信 1
  7. アクション ウィンドウで、保存を選択して変更を保存します。

  8. Retail とコマース>チャネル設定>POS設定>POS>受領書フォーマットの順に移動します。

  9. 既存の受領書フォーマットまたは新しい受領書フォーマットを選択して、アクション ペインでデザイナー を選択します。

  10. アプリケーションを開いて確認するよう求めるメッセージが表示されたら、開くを選択して、インストールの指示に従ってください。

  11. デザイナーをインストールすると、Azure Active Directory (Azure AD) の資格情報を要求されます。 デザイナーを開始するための情報を入力します。

  12. デザイナーで、左ウィンドウから画面レイアウトへカスタム フィールドをドラッグ アンド ドロップします。

メモ

カスタム フィールドは法人固有であり、つまり画面レイアウト デザイナーはシステム管理 > ユーザーにログインしたユーザーに対して設定された法人 (会社) に固有の顧客属性をフェッチします。 別の法人に対してカスタム フィールドを構成した場合、画面レイアウト デザイナーがこれらの値が表示しない場合があります。

  1. 変更を保存します。
  2. Retail とコマース > Retail とコマース IT > 配送スケジュールの順に移動します。
  3. チャネル構成 (1070) ジョブを選択し、今すぐ実行を選択します。

カスタム フィールドを実装するためのサンプル コード

カスタム フィールドを売上票または領収書フォーマットに追加するには、次のコードに示すように GetSalesTransactionCustomReceiptFieldServiceRequest および CRT でカスタム フィールドのビジネス ロジックを実装します。 詳細については、Commerce Runtime (CRT) の拡張性を参照してください。

public IEnumerable<Type> SupportedRequestTypes
{
    get
    {
        return new[] { typeof(GetSalesTransactionCustomReceiptFieldServiceRequest) };
    }
}
public Response Execute(Request request)
{
    Type requestedType = request.GetType();
    if (requestedType == typeof(GetSalesTransactionCustomReceiptFieldServiceRequest))
    {
        return this.GetCustomReceiptFieldForSalesTransactionReceipts( (GetSalesTransactionCustomReceiptFieldServiceRequest)request);
    }
    throw new NotSupportedException(string.Format("Request '{0}' is not supported.", request.GetType()));
}

ビジネス ロジックをカスタム フィールドへ追加する

private GetCustomReceiptFieldServiceResponse GetCustomReceiptFieldForSalesTransactionReceipts( GetSalesTransactionCustomReceiptFieldServiceRequest request)
{
    string receiptFieldName = request.CustomReceiptField;
    string returnValue = null;
    switch (receiptFieldName)
    {
        case "WARRANTYID":
            {
                // Write your logic
            }
            break;
        case "EXPIRATIONDATE":
            {
                // Write your logic
            }
            break;
    }
    return new GetCustomReceiptFieldServiceResponse(returnValue);
}

カスタム レシート タイプ

HQ のカスタム レシート タイプの構成

  1. Retail とコマース>チャネル設定>POS設定>POS>受領書フォーマットの順に移動します。
  2. 新しいレシート フォーマットを作成し、レシート タイプを選択し、CustomRecrecptType (1....20) のいずれかを選択します。
  3. 変更を保存します。
  4. アクション ウィンドウで、デザイナーを選択します。
  5. アプリケーションを開いて確認するよう求めるメッセージが表示されたら、開くを選択して、インストールの指示に従ってください。
  6. デザイナーをインストールすると、Azure Active Directory (Azure AD) の資格情報を要求されます。 デザイナーを開始するための情報を入力します。
  7. デザイナーで、左ウィンドウから受領書デザイナーへ必要とされるレシート フィールドをドラッグ アンド ドロップします。
  8. 変更を保存します。
  9. Retail とコマース > Retail とコマース IT > 配送スケジュールの順に移動します。
  10. チャネル構成 (1070) ジョブを選択し、今すぐ実行を選択します。

カスタム レシート タイプを実装するためのサンプル コード

新しいレシート タイプのためにロジックを追加するには、CRT で GetCustomReceiptsRequest を実装します。

protected override GetReceiptResponse Process(GetCustomReceiptsRequest request)
{
    Collection<Receipt> result = new Collection<Receipt>();
        // 2. Now we can handle any additional receipt here.
    switch (request.ReceiptRetrievalCriteria.ReceiptType)
    {
        // An example of getting custom receipts.
        case ReceiptType.CustomReceipt1:
            {
                IEnumerable<Receipt> customReceipts = this.GetCustomReceipts(salesOrder, request.ReceiptRetrievalCriteria);
                    result.AddRange(customReceipts);
            }
            break;
        default:
            // Add more logic to handle more types of custom receipt types.
            break;
    }
    return new GetReceiptResponse(new ReadOnlyCollection<Receipt>(result));
}

完全なサンプルコードは、ソフトウェアの開発キット (SDK) の RetailSDK\SampleExtensions\CommerceRuntime\Extensions.ReceiptsSamplefolder フォルダーで利用可能です。

メモ

クライアントから カスタム レシート タイプの印刷を指示する必要があります。 詳細については、POS からのカスタム レシートの印刷 を参照してください。

ベスト プラクティス

各カスタム受領書フィールドに対してデータベース呼び出しを行うことは避けてください。 代わりに、エンティティに前に設定された拡張機能プロパティを使用します。 カスタムのレシート タイプは、任意のロジック (販売明細行ごと、いくつかの条件ごとに 1 回) で呼び出すことができます。 包括的なシナリオのサンプルを参照してください。