0

Broadleaf commerce v2.2 のドキュメント/チュートリアル、具体的には Add Item Workflow と Dynamic Pricing モジュールのカスタマイズを読みました。

商品がカートに追加されたときに動的に価格を設定したいと考えています。

私の考えは正しいですか? 製品の価格を変更する必要がある場合、2 つの方法がありますか?:

これは次のように説明できます。

アプローチ 1:

class DynamicPricingActivity extends BaseActivity{

....
@Override
public ProcessContext execute(ProcessContext context) throws Exception {
CartOperationRequest request = ((CartOperationContext) context).getSeedData();

updatePhonePrice(request.getOrder());

return context;
}
....
}

アプローチ 2:

Dynamic Pricing Configurationの手順に関する質問があります。

  • メソッドはどのようMyDynamicSkuPricingServiceImpl # getSkuPrices()に呼び出されますか?

    (ドキュメントではMyDynamicSkuPricingServiceImpl#getSkuPrices()、getPrice() メソッドが呼び出されたときに呼び出されると記載されています。ドキュメントに記載されているようにすべてを構成しましたが、getSkuPrices() が暗黙的に呼び出されることはありません)

更新-で HashMap の価格設定条件が空の場合、 が呼び出されないことを発見しましDynamicPricingFilterDynamicPricingService#getSkuPrices()。したがって、dynamicPricingService が機能するためには、空でない HashMap が不可欠であり、暗黙的に呼び出されます。なぜそれが必要なのかわかりません...

カートに追加された製品の価格を、データベースに保持せずに更新するにはどうすればよいですか?

更新しました

データベースに値を永続化することなく、動的価格設定を追加できました

  DiscreteOrderItem orderItem = orderItemService.createDynamicPriceDiscreteOrderItem(orderRequest,          pricingConsiderations);
    orderItem.setRetailPrice(new Money("623.34"));
    orderItem.setSalePrice(new Money("888.888"));
    orderItem.setPrice(orderItem.getSalePrice());
    cart.addOrderItem(orderItem);

    cart = orderService.save(cart, true);

ただし、カートの合計は小売価格の値: 623.34 に設定されます。正しい合計 (888.888) を取得するにはどうすればよいですか?

4

1 に答える 1

1

価格のオーバーライドに関する最後の質問について。Broadleaf は、価格をオーバーライドするメソッドを提供します(orderItem.setOverrideRetailPrice(), orderItem.setOverrideSalePrice())

これらの方法を使用しない場合、価格設定サービスは SKU の現在の価格 (または動的価格設定の実装) にリセットされます。

いずれの場合も、retailPrice より大きい salePrice は無視されます。

多くの場合、価格をオーバーライドするときに、割引エンジンもバイパスしたいことがあります。を使用できますorderItem.setDiscountingAllowed(false)

[orderItem.setPrice()]これは典型的な動作であるため、販売価格と小売価格の両方をオーバーライドし、割引を false に設定する便利なメソッドも提供されています。

Brian Polster -- ブロードリーフ コマース

于 2013-07-03T21:07:18.167 に答える