2020-09-04 08:08发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
如何从Java代码更改产品价格?例如,如果我有ProductModel,请在将产品添加到购物车之前说一下
如果可以避免的话,最好不要使用子类型,这会使您的代码更加脆弱。 您可以在任何扩展名中添加类,但必须将其添加到src中,而不是web/src目录中,以确保由全局类加载器加载。
公共类MyPriceFactory实现PriceFactory { 私有最终PriceFactory originalPriceFactory = Europe1PriceFactory.getInstance(); /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getAllPriceInformations(de.hybris.platform.jalo.SessionContext, * de.hybris.platform.jalo.product.Product,java.util.Date,boolean) */ @Override public ProductPriceInformations getAllPriceInformations(最终SessionContext paramSessionContext,最终产品paramProduct, final Date paramDate,final boolean paramBoolean)引发JaloPriceFactoryException { 返回originalPriceFactory.getAllPriceInformations(paramSessionContext,paramProduct,paramDate,paramBoolean); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getBasePrice(de.hybris.platform.jalo.order.AbstractOrderEntry) */ @Override 公共PriceValue getBasePrice(final AbstractOrderEntry paramAbstractOrderEntry)引发JaloPriceFactoryException { //在这里实现自定义逻辑 返回null; } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getDiscountValues(de.hybris.platform.jalo.order.AbstractOrderEntry *) */ @Override 公共列表getDiscountValues(final AbstractOrderEntry paramAbstractOrderEntry)引发JaloPriceFactoryException { 返回originalPriceFactory.getDiscountValues(paramAbstractOrderEntry); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getDiscountValues(de.hybris.platform.jalo.order.AbstractOrder) */ @Override 公共列表getDiscountValues(final AbstractOrder paramAbstractOrder)引发JaloPriceFactoryException { 返回originalPriceFactory.getDiscountValues(paramAbstractOrder); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getProductDiscountInformations(de.hybris.platform.jalo.SessionContext *,de.hybris.platform.jalo.product.Product,java.util.Date,布尔值) */ @Override 公共列表getProductDiscountInformations(最终SessionContext paramSessionContext,最终产品paramProduct, final Date paramDate,final boolean paramBoolean)引发JaloPriceFactoryException { 返回originalPriceFactory.getProductDiscountInformations(paramSessionContext,paramProduct,paramDate,paramBoolean); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getProductPriceInformations(de.hybris.platform.jalo.SessionContext *,de.hybris.platform.jalo.product.Product,java.util.Date,布尔值) */ @Override 公共列表getProductPriceInformations(最终SessionContext paramSessionContext,最终产品paramProduct, final Date paramDate,final boolean paramBoolean)引发JaloPriceFactoryException { 返回originalPriceFactory.getProductPriceInformations(paramSessionContext,paramProduct,paramDate,paramBoolean); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getProductTaxInformations(de.hybris.platform.jalo.SessionContext, * de.hybris.platform.jalo.product.Product,java.util.Date) */ @Override 公共列表getProductTaxInformations(最终SessionContext paramSessionContext,最终产品paramProduct, final Date paramDate)引发JaloPriceFactoryException { 返回originalPriceFactory.getProductTaxInformations(paramSessionContext,paramProduct,paramDate); } /* *(非Javadoc) * * @看到 * de.hybris.platform.jalo.order.price.PriceFactory#getTaxValues(de.hybris.platform.jalo.order.AbstractOrderEntry) */ @Override 公共集合getTaxValues(final AbstractOrderEntry paramAbstractOrderEntry)引发JaloPriceFactoryException { 返回originalPriceFactory.getTaxValues(paramAbstractOrderEntry); } /* *(非Javadoc) * * @请参阅de.hybris.platform.jalo.order.price.PriceFactory#isNetUser(de.hybris.platform.jalo.user.User) */ @Override public boolean isNetUser(最终用户paramUser) { 返回originalPriceFactory.isNetUser(paramUser); } }
嗨,Brandan,是否建议采用这种扩展Europe1PriceFactory的方法,因为那样,我们需要使用代码作为return originalPriceFactory.isNetUser(paramUser)的代码来编写所有方法的实现。 如果在下一版本中将Europe1PriceFactory添加一个新方法,将会发生什么? 请澄清一下,因为我需要扩展Europe1PriceFactory类。我建议扩展Europe1PriceFactory类。 请咨询。
您可以设置AbstractOrderEntry的basePrice,该价格将一直保留到您重新计算购物车/订单之后,然后再使用产品的当前价格并将其保存在AbstractOrderEntry上。 因此,如果您要重新计算购物车/订单,则可以将basePrice设置为您的值,但是我认为您真正想要做的是创建自己的价格工厂并覆盖de.hybris.platform.jalo.order.price.PriceFactory.getBasePrice (AbstractOrderEntry),这样您就可以确保协商的价格在整个结帐过程中始终坚持下去。
创建您自己的PriceFactory实现,并将所有其他方法委托给标准价格工厂(Europe1PriceFactory.getInstance()),并重写getBasePrice(..)。
将default.pricefactory = xx.xx.MyPriceFactory添加到您的project/local.properties中,以确保使用了价格工厂。
您是否将此xx.xx.MyPriceFactory放在其自己的扩展名中? 证明困难的是正确配置该类以使其找到,但实际上发生的是它找不到它,并且它尝试使用" core.dummyFactoryPrice",然后由于找不到它而引发了异常。 任何帮助
您好Dominic
产品的价格是静态属性,因此努力使它成为动态属性。 我将建议您仅更改会话的价格,这是最佳做法,而不是在添加到购物车之前更改产品的价格。
添加适当的产品后,您可以使用促销活动将折扣自动应用于购物车的价格。 这是一个有用的链接: https://wiki.hybris.com/display/release3/Key + Concepts + of + Promotions 通过促销,您可以在满足某些要求后为产品添加百分比折扣。
最诚挚的问候,
Niko
嗨,我已经看过了,但是问题是我要设置的价格是动态的。 它不是通过impex配置的。 问题涉及拍卖,因此我希望中标者结算的价格是中标价格,而不是产品的默认基本价格。 您将如何解决这个问题? 我必须仅在1点进行此更改,以便所有其他计算(如小计,税金,总计等)都使用中标者的价格。
感谢Niko,这就是我想在一天结束时实现的目标。 我想要的是在将产品添加到购物车时更改购物车中产品的价格,否则要在执行addToCart方法之后。 您如何去做呢? 我试图删除价格行并创建一个新的行,但是它只能删除并且不能添加新的价格行。 参见下面的代码。
epf = Europe1PriceFactory.getInstance(); //最终集合oldPrices = factory.getProductPriceRows(product,null);
最终集合oldPrices = epf.getProductPriceRows(ctx,产品,epf.getPPG(ctx,产品)); 最后的Collection oldPriceModels = new ArrayList (); modelService.getAll(oldPrices,oldPriceModels); modelService.removeAll(oldPriceModels); 最终PriceRowModel priceRow = modelService.create(PriceRowModel.class); priceRow.setCurrency(defaultCommonI18NService.getCurrency(" EUR")); priceRow.setUnit(defaultUnitService.getUnitForCode(" pieces"))); priceRow.setPrice(new Double(210.30)); modelService.save(priceRow);
最多设置5个标签!
如果可以避免的话,最好不要使用子类型,这会使您的代码更加脆弱。 您可以在任何扩展名中添加类,但必须将其添加到src中,而不是web/src目录中,以确保由全局类加载器加载。
嗨,Brandan,是否建议采用这种扩展Europe1PriceFactory的方法,因为那样,我们需要使用代码作为return originalPriceFactory.isNetUser(paramUser)的代码来编写所有方法的实现。 如果在下一版本中将Europe1PriceFactory添加一个新方法,将会发生什么? 请澄清一下,因为我需要扩展Europe1PriceFactory类。我建议扩展Europe1PriceFactory类。 请咨询。
您可以设置AbstractOrderEntry的basePrice,该价格将一直保留到您重新计算购物车/订单之后,然后再使用产品的当前价格并将其保存在AbstractOrderEntry上。 因此,如果您要重新计算购物车/订单,则可以将basePrice设置为您的值,但是我认为您真正想要做的是创建自己的价格工厂并覆盖de.hybris.platform.jalo.order.price.PriceFactory.getBasePrice (AbstractOrderEntry),这样您就可以确保协商的价格在整个结帐过程中始终坚持下去。
创建您自己的PriceFactory实现,并将所有其他方法委托给标准价格工厂(Europe1PriceFactory.getInstance()),并重写getBasePrice(..)。
将default.pricefactory = xx.xx.MyPriceFactory添加到您的project/local.properties中,以确保使用了价格工厂。
您是否将此xx.xx.MyPriceFactory放在其自己的扩展名中? 证明困难的是正确配置该类以使其找到,但实际上发生的是它找不到它,并且它尝试使用" core.dummyFactoryPrice",然后由于找不到它而引发了异常。 任何帮助
您好Dominic
产品的价格是静态属性,因此努力使它成为动态属性。 我将建议您仅更改会话的价格,这是最佳做法,而不是在添加到购物车之前更改产品的价格。
添加适当的产品后,您可以使用促销活动将折扣自动应用于购物车的价格。 这是一个有用的链接: https://wiki.hybris.com/display/release3/Key + Concepts + of + Promotions 通过促销,您可以在满足某些要求后为产品添加百分比折扣。
最诚挚的问候,
Niko
嗨,我已经看过了,但是问题是我要设置的价格是动态的。 它不是通过impex配置的。 问题涉及拍卖,因此我希望中标者结算的价格是中标价格,而不是产品的默认基本价格。 您将如何解决这个问题? 我必须仅在1点进行此更改,以便所有其他计算(如小计,税金,总计等)都使用中标者的价格。
感谢Niko,这就是我想在一天结束时实现的目标。 我想要的是在将产品添加到购物车时更改购物车中产品的价格,否则要在执行addToCart方法之后。 您如何去做呢? 我试图删除价格行并创建一个新的行,但是它只能删除并且不能添加新的价格行。 参见下面的代码。
epf = Europe1PriceFactory.getInstance(); //最终集合oldPrices = factory.getProductPriceRows(product,null);
一周热门 更多>