以编程方式更改产品的价格?

2020-09-04 08:08发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


如何从Java代码更改产品价格?例如,如果我有ProductModel,请在将产品添加到购物车之前说一下

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


如何从Java代码更改产品价格?例如,如果我有ProductModel,请在将产品添加到购物车之前说一下

付费偷看设置
发送
11条回答
clasier
1楼 · 2020-09-04 08:58.采纳回答

如果可以避免的话,最好不要使用子类型,这会使您的代码更加脆弱。 您可以在任何扩展名中添加类,但必须将其添加到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);
      }
 
  }
 
  
葫芦娃快救爷爷
2楼-- · 2020-09-04 09:14

嗨,Brandan,是否建议采用这种扩展Europe1PriceFactory的方法,因为那样,我们需要使用代码作为return originalPriceFactory.isNetUser(paramUser)的代码来编写所有方法的实现。 如果在下一版本中将Europe1PriceFactory添加一个新方法,将会发生什么? 请澄清一下,因为我需要扩展Europe1PriceFactory类。我建议扩展Europe1PriceFactory类。 请咨询。

My梦
3楼-- · 2020-09-04 09:10

您可以设置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中,以确保使用了价格工厂。

Haoba3210
4楼-- · 2020-09-04 08:55

您是否将此xx.xx.MyPriceFactory放在其自己的扩展名中? 证明困难的是正确配置该类以使其找到,但实际上发生的是它找不到它,并且它尝试使用" core.dummyFactoryPrice",然后由于找不到它而引发了异常。 任何帮助

SAP小菜
5楼-- · 2020-09-04 09:01

您好Dominic

产品的价格是静态属性,因此努力使它成为动态属性。 我将建议您仅更改会话的价格,这是最佳做法,而不是在添加到购物车之前更改产品的价格。

添加适当的产品后,您可以使用促销活动将折扣自动应用于购物车的价格。 这是一个有用的链接: https://wiki.hybris.com/display/release3/Key + Concepts + of + Promotions 通过促销,您可以在满足某些要求后为产品添加百分比折扣。

最诚挚的问候,

Niko

太Q了
6楼-- · 2020-09-04 09:06

嗨,我已经看过了,但是问题是我要设置的价格是动态的。 它不是通过impex配置的。 问题涉及拍卖,因此我希望中标者结算的价格是中标价格,而不是产品的默认基本价格。 您将如何解决这个问题? 我必须仅在1点进行此更改,以便所有其他计算(如小计,税金,总计等)都使用中标者的价格。

派大星 ヾ
7楼-- · 2020-09-04 08:55

感谢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); 
  

一周热门 更多>