如何覆盖Europe1PriceFactory

2020-09-04 08:21发布

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

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


嗨,

我想以这种方式自定义Europe1PriceFactory,而不再希望使用DefaultPDTRowsQueryBuilder。

为此,我创建了一个新的扩展,其managersuperclass是:

  managersuperclass =" de.hybris.platform.europe1.jalo.Europe1PriceFactory"

  

然后,我从新创建的扩展的coremodule中编辑了TZRpricefactoryManager类(请参阅:)

  

  

要覆盖getPDTRowsQueryBuilderFor方法以返回我的自定义类,并告诉hybris使用新的扩展名(local.properties)

  default.pricefactory = tzrpricefactory

  

到这一步为止,它工作正常,但是现在我遇到了问题,即启动服务器后,属性restoreChannelStrategy为null。 在状态注册过程中,我可以看到已调用setter,从而设置了属性。 但是当我使用新的PriceFactory进行cronjob时,该属性再次为null。

要设置属性,我在新扩展的spring.xml中添加了以下行:

  
          <属性名称=" retrieveChannelStrategy" ref =" retrieveChannelStrategy"/>
      

  

谁能告诉我我做错了什么以及如何正确地注入财产?

我正在使用Hybris 5.7.0.3

谢谢

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

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


嗨,

我想以这种方式自定义Europe1PriceFactory,而不再希望使用DefaultPDTRowsQueryBuilder。

为此,我创建了一个新的扩展,其managersuperclass是:

  managersuperclass =" de.hybris.platform.europe1.jalo.Europe1PriceFactory"

  

然后,我从新创建的扩展的coremodule中编辑了TZRpricefactoryManager类(请参阅:)

  

  

要覆盖getPDTRowsQueryBuilderFor方法以返回我的自定义类,并告诉hybris使用新的扩展名(local.properties)

  default.pricefactory = tzrpricefactory

  

到这一步为止,它工作正常,但是现在我遇到了问题,即启动服务器后,属性restoreChannelStrategy为null。 在状态注册过程中,我可以看到已调用setter,从而设置了属性。 但是当我使用新的PriceFactory进行cronjob时,该属性再次为null。

要设置属性,我在新扩展的spring.xml中添加了以下行:

  
          <属性名称=" retrieveChannelStrategy" ref =" retrieveChannelStrategy"/>
      

  

谁能告诉我我做错了什么以及如何正确地注入财产?

我正在使用Hybris 5.7.0.3

谢谢

付费偷看设置
发送
5条回答
CPLASF-自律
1楼 · 2020-09-04 08:55.采纳回答

对于那些想知道的人。 我最终通过重写createInstance方法来设置SessionFacory,以在每次创建新会话时都设置PriceFactoy。

  @Service
  SessionFactory类扩展了JaloSessionFactory
  {
      私有静态最终Logger LOG = Logger.getLogger(SessionFactory.class);
      私有MyPriceFactory priceFactory;
 
      @Override
      受保护的JaloSession createInstance()引发异常
      {
          最后的JaloSession newSession = super.createInstance();
          newSession.setPriceFactory(priceFactory);
    
          返回newSession;
      }
 
      公共无效setPriceFactory(最终MyPriceFactory priceFactory)
      {
          this.priceFactory = priceFactory;
      }
 
  }
  
绿领巾童鞋
2楼-- · 2020-09-04 09:01

解决了您的问题吗?

Doze时光
3楼-- · 2020-09-04 09:04

嗨,Paul,您可以在管理器中创建一个函数,该函数将在需要时为您提供值,而无需为管理器声明一个bean来注入该属性。 :

 私有RetrieveChannelStrategy getRetrieveChannelStrategy(){
      返回(RetrieveChannelStrategy)Registry.getApplicationContext()。getBean(" retrieveChannelStrategy");
  }
  

然后,而不是调用

  PriceRowChannel channel = this.retrieveChannelStrategy.getChannel(ctx);
  

您可以打电话

  PriceRowChannel channel = getRetrieveChannelStrategy()。getChannel(ctx);
  

对您来说应该很好。

Juan

歪着头看世界
4楼-- · 2020-09-04 09:04

嗨,

要覆盖europe1pricefactory,1.告诉Hybris使用您的工厂。 在local.properties中:default.pricefactory = XXX(您做到了)2.声明一个bean @id =" XXX.manager" @ class ="与de.hybris.platform.europe1.jalo.Europe1PriceFactory兼容的东西"/p>

仅此而已。

SAP浪
5楼-- · 2020-09-04 08:53

只需在带有价格工厂类的spring xml文件中添加bean(我已经在CompanyCore扩展中添加了

 
    <属性名称=" retrieveChannelStrategy" ref =" retrieveChannelStrategy"/>
  

类文件:

公共类CompanyCatalogAwareEurope1PriceFactory扩展了CatalogAwareEurope1PriceFactory {

     @Override
     公共PriceValue getBasePrice(AbstractOrderEntry条目)引发JaloPriceFactoryException {
         super.getBasePrice(entry);
     }
 }
 

一周热门 更多>