この記事では、Microsoft Dynamics 365 Commerce で価格と割引の機能を拡張する方法について説明します。
Commerce 価格エンジンを拡張する
コマース価格エンジンは、Dynamics 365 Commerceの価格と割引機能のハブです。 コマース価格エンジンを拡張するには、まず次の表の用語を理解します。
| Name | Description |
|---|---|
| 割引パッケージ | 割引パッケージは、異なるタイプの割引として機能する IDiscountPackage インターフェイスを実装するクラスです。 異なる割引パッケージを作成することで、さまざまな割引動作を定義できます。 |
| 割引フィルター | 割引の適用性をカスタマイズするには、ビジネス要件に基づいて IDiscountFilter インターフェイスを実装して、一部の割引を除外します。 |
コマース価格エンジンは、コマース本社とコマース スケール ユニット (CU) 間で共有されるアセンブリです。 そのため、1 つの価格エンジン拡張機能 (たとえば、新しい割引パッケージ) を記述するだけで済みます。 この拡張機能は、本社と販売時点管理 (POS) の両方で使用できます。
拡張機能の登録
価格エンジン拡張機能を作成したら、 PricingEngineExtensionRepositoryを使用して登録します。 登録プロセスは、統合する製品によって異なります。
CSU と Store Commerce
拡張機能パッケージを適用するサービス要求のプリトリガーを追加します。 次の表にサービス要求を示します。
| サービス要求 | Description |
|---|---|
| CalculatePricesServiceRequest | このサービス要求は、販売トランザクションの価格を計算します。 これらの価格には、基準価格、売買契約、および価格調整が含まれます。 |
| CalculateDiscountsServiceRequest | このサービス要求は、販売トランザクションの割引を計算します。 これらの割引には、割引売買契約、シンプルな割引組み合わせ割引、数量割引、およびしきい値割引が含まれます。 |
| GetIndependentPriceDiscountServiceRequest | このサービス要求では、価格と単一行割引のみが計算されます。 製品価格が個別に計算される製品の一覧と製品の詳細ページに使用します。 |
| CalculateShippingDiscountsServiceRequest | このサービス要求は、販売トランザクションの出荷割引を計算します。 |
たとえば、新しい割引パッケージを作成するときに、 CalculateDiscountsServiceRequest サービス要求にプリトリガーを追加し、プリトリガー内で PricingEngineExtensionRepository.RegisterDiscountPackage(new DiscountPackage()); を呼び出します。
メモ
CalculateDiscountsServiceRequest の既成のハンドラーを置き換える場合は、request.Transaction.IsDiscountFullyCalculated を true にマークするようにしてください (割引が計算される場合)。 この値を設定しない場合、チェックアウトプロセスでトランザクションがブロックされ、トランザクションの合計と同様のエラーが発生する可能性があります。チェックアウト 前に計算する必要があります。
財務と運用アプリ
財務および運用アプリの場合は、ユーザー シナリオに基づいて X++ 拡張機能を使用して割引を登録します。 たとえば、コール センターの販売注文にカスタマイズされた割引パッケージを適用する場合は、 RetailSalesOrderCalculator::setPricesDiscountsOnOrder にプリトリガーを追加し、プリトリガー内で Microsoft.Dynamics.Commerce.Runtime.Services.PricingEngine::RegisterDiscountPackage(new DiscountPackage()); を呼び出します。
今日以外の日付に対する価格と割引の計算
既定では、コマース価格エンジンは、販売トランザクションが発生した日付に基づいて価格と割引を適用します。 通常、この日付は「今日」です。
既定の動作をオーバーライドするには、次の手順に従います。
CalculatePricesServiceRequestにプリトリガーを追加し、そのDateWhenActive値を計算が行われる日付に更新します。CalculateDiscountsServiceRequestにプリトリガーを追加し、そのDateWhenActive値を計算が行われる日付に更新します。メモ
DateWhenActiveのCalculateDiscountsServiceRequest値は、Commerce バージョン 10.0.37 以降でのみ変更できます。Headquarters で、Retail と Commerce>Headquarters の設定>パラメーター>Commerce パラメーターに移動し、次の構成キーと値を追加します。
- キー: Pricing.ResetSalesDateKillSwitch
- 値: true
1070 (チャネル構成) Commerce Data Exchange (CDX) ジョブを実行します。
メモ
すべての販売ラインの SalesDate 値が、 DateWhenActiveに設定した日付と一致していることを確認する必要があります。