【问题标题】:Customize ATG promotions so "highest priced item" considers sale price if there is one自定义 ATG 促销活动,以便“最高价商品”考虑销售价格(如果有)
【发布时间】:2016-08-29 18:14:46
【问题描述】:

我需要自定义应用于“最高价商品”的 ATG 促销,但它会考虑何时有销售价格并使用它而不是默认标价。

根据我在 BCC 中配置“条件和报价”以在标记选项时生成 PMDL 规则时从 atg.ui.commerce.pricing.DescriptionBuilder.java 读取的内容:

“应用折扣到”下的“最高价商品优先”它会生成带有此部分的 PDML 规则:

<up-to-and-including number="1" sort-by="priceInfo.listPrice" sort-order="descending">

但正如您所见,ATG 始终使用 PDML 规则中硬编码的 priceInfo.listPrice。

我怎样才能使我的促销活动足够智能,以检测商品何时具有销售价格,以便使用它而不是标价?

【问题讨论】:

  • 商品打折时,打折的价格字段不是加载真实的标价,标价字段是打折的价格吗?这样您就可以知道商品何时打折(该字段已填充)并且您的 PMDL 规则有效(折扣值在标价字段中)。
  • 感谢您的回答!在我的例子中,对于每个产品变体 (SKU),我们处理两个价目表,一个代码是“listPrices”,另一个是“salePrices” 所以在这种情况下,我们的“salePrice”还没有被 ATG 打折;只是我们为产品处理的另一个价目表;这就是为什么我需要找到可以更改逻辑的位置,因此在评估 PDML 规则时,它会考虑另一个“salePrice”价目表。

标签: oracle atg atg-dynamo


【解决方案1】:

很抱歉我延迟回复你的答案,我花了很长时间才开始研究它,我想分享我的发现:

  1. 在我公司,我们根据 ATG 建议实施了销售清单价格;这意味着在 atg/commerce/pricing/ItemPriceInfo 上,我们将从“List Price”列表中填充 listPrice,并从“Sale Price”列表中填充 salePrice。

  2. 为了在整个网站上显示商品价格,我们必须通过应用下一个逻辑来在两个列表之间进行选择,以优先考虑销售价格:

    isOnSale() && getSalePrice()

  3. 在 BCC 上创建新促销并选择将促销应用于最高(或最低)价格的商品时出现问题,因为默认情况下,BCC 会在 PDML 规则中添加 XML 标记,例如:

  4. 您可能注意到,PDML 的技巧是根据“priceInfo.listPrice”对所有项目进行排序,然后选择第一个。

在评估 PDML 时,ATG 通过 atg/commerce/pricing/definition/UpToAndIncludingElem 的实例映射此 XML 标记;那里的“评估”方法将调用位于 atg/commerce/pricing.definition.CompoundPricingModelExpression 中的方法“resolveCollectionList”,最终调用同一类的方法“sortList”。

  1. 这是一种对我有用的 hacky 方法,但我已经放弃了:

5.a 我反编译了 UpToAndIncludingElem.class 并添加了它自己版本的方法 sortList,因为此方法接收参数“sortBy”,所以我添加了一个条件,因此如果它的值为“priceInfo.listPrice”,我将其更改为自定义新属性“priceInfo.finalPrice”

5.b 因为我们已经扩展了 atg/commerce/pricing/ItemPriceInfo 类,所以我添加了一个名为“finalPrice”的新属性及其设置器和一个自定义获取器,用于评估是否有要使用的销售价格,正如我在步骤中解释的那样#2

现在每次在 PDML 规则中使用该 XML 标记进行促销以将促销应用于最高(或最低)价格的商品时,我的自定义 UpToAndIncludingElem 的 sortList 方法将替换 sortBy 参数以使用“priceInfo.finalPrice”,该 getter 方法将考虑售价。

我为什么放弃这种方法?

  1. 因为我覆盖类的方式依赖于将类添加到类路径中的项目的顺序,所以我觉得有风险
  2. 我使用的反编译工具无法保证是最佳的 JAVA 代码
  3. 如果稍后使用另一个 ATG 版本,此流程发生变化,我可能会遇到麻烦

我要做什么?

我将保留我在 ItemPriceInfo 类的自定义类中添加的“priceInfo.finalPrice”的定义

我会看看如何更改促销模板,以便硬编码我的自定义属性“priceInfo.finalPrice”而不是“priceInfo.listPrice”

感谢那些花时间阅读和回答我的问题的人,我希望我的发现和方法对你有用。

当然有信心提出问题或提出建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2019-04-23
    • 2022-10-08
    相关资源
    最近更新 更多