1764356607
2025-11-28 15:08:00
多くのエンタープライズ コマース実装では、ビジネス ユーザーは多くの場合、特に顧客サービス業務、B2B 交渉、または手動注文作成時に、カート レベルで製品価格を上書きできる柔軟性を必要とします。
最近、クライアントからの要望がありました。 スーパー管理者 (特別な CMS/コマース ロール) には、 各品目の価格をカートページから直接表示。
例えば:
商品のデフォルト価格が 1000ドル、スーパー管理者はこれを次のように変更できるはずです。 900ドル、 850ドル、または任意のカスタム値 – この価格が価格表に定義されていない場合でも、。
このカスタム価格設定は、以下の場合にも引き続き正しく機能する必要があります。
-
プロモーション エンジン
-
税金の計算
-
再計算ワークフロー
-
注文合計
この要件をクリーンかつ安全に満たすには、オーバーライドする方法が必要でした。 掲載価格 Commerce の価格設定パイプラインと連携した方法で、品目レベルで設定します。
このブログで説明しています コマースネイティブの正しい方法 カスタムの品目価格設定を実装します。
カスタム価格プロセッサーを使用する
カスタム価格設定を適切に実装するには、以下を介して Commerce の価格設定パイプラインに接続する必要があります。 IPlacedPriceProcessor
1 – ラインアイテムにカスタム価格を保存します
スーパー管理者がカート ページの価格を更新すると、次のようになります。
lineItem.Properties["SuperAdminCustomPrice"] = customPrice.ToString(); // SuperAdminCustomPrice is meta field
_cartRepository.SaveCart(cart);
このプロパティはカート/アイテムとともに保持されます。
2 – カスタム価格プロセッサーを実装する
[ServiceConfiguration(typeof(IPlacedPriceProcessor))]
public class SuperAdminPriceProcessor : DefaultPlacedPriceProcessor
{
public override void ApplyPlacedPrice(
IOrderGroup orderGroup,
IOrderForm orderForm,
ILineItem lineItem,
IMarket market)
{
// Allow Commerce to set its default price
base.ApplyPlacedPrice(orderGroup, orderForm, lineItem, market);
// Check for Super Admin’s custom price
if (!lineItem.Properties.ContainsKey("SuperAdminCustomPrice"))
{
return;
}
if (decimal.TryParse(
lineItem.Properties["SuperAdminCustomPrice"].ToString(),
out var customPrice))
{
// Save original Commerce price for audit/rollback
lineItem.Properties["OriginalPlacedPrice"] = lineItem.PlacedPrice;
// Apply custom override
lineItem.PlacedPrice = customPrice;
}
}
}
3 – UI での見た目
カート ページの[価格の編集]オプションは、カスタム プロパティを更新するだけです。
if (User.IsInRole("SuperAdmin"))
{
lineItem.Properties["SuperAdminCustomPrice"] = newPrice;
}
これはまさにクライアントが必要としていたものでした。
クリーンで本番環境でも安全な方法 スーパー管理者による品目の価格の上書き コマース機能を損なうことなく。
ありがとう、
スニル・クマール
2025 年 11 月 28 日
#Optimizely #Commerce #でのカスタム広告申込情報価格設定の実装