如何重写jalo类中的方法?

2020-09-12 08:49发布

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

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


嗨,

我正在尝试在凭证扩展名下覆盖Voucher jalo的getDiscountValue方法。

即使我按照以下教程进行操作:

https://wiki.hybris.com/display/release4/Jalo+Layer

它不会在我新创建的jalo中运行代码。

重写Jalo类的正确方法是什么?

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

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


嗨,

我正在尝试在凭证扩展名下覆盖Voucher jalo的getDiscountValue方法。

即使我按照以下教程进行操作:

https://wiki.hybris.com/display/release4/Jalo+Layer

它不会在我新创建的jalo中运行代码。

重写Jalo类的正确方法是什么?

付费偷看设置
发送
8条回答
樱桃小丸子0093
1楼 · 2020-09-12 09:19.采纳回答

嗨Emre,
首先,您添加的链接来自版本4,除非您正在使用此版本,否则我建议您参考新版本:
https://wiki.hybris.com/display/release5/Jalo+Layer
然后是Jalo 层已弃用,并且使用起来不是很友好。 无法正确覆盖Voucher类的方法,但是您有两个选择:

  • 第一种可能性是创建在 -items.xml 中声明的您自己的类型,例如 MyVoucher ,从原始的 Voucher扩展到类型。 然后,在生成的 MyVoucher.java 类中,您应该实现新的逻辑。 然后,无论您在哪里创建凭证,都应改为创建 MyVoucher 实例,在这种情况下,可以从hmc或使用impex文件将 Voucher 的插入替换为 MyVoucher 。 在凭证示例中,此解决方案可能有效并且最简单,但并非总是可以根据需要控制对象的创建,在这种情况下,您可以选择第二种方法:

  • 第二种可能性是使用面向方面的编程,如果您不熟悉它,这将不简单。 AOP允许您拦截任何类的任何方法的执行并应用自己的逻辑。

例如,如果您要推断hybris默认 PromotionOrderChangeDeliveryModeAction evaluate()方法,则需要创建文件 aop.xml 位于 myextension/resources/META-INF 中(如果不存在,请创建它),它应该像这样:

  
      
          
      
      <方面>
          
      
  

  

weaver内的 include 标记表示将被扫描以查找要拦截的方法的包或类,在这种情况下,默认的hybris是 PromotionOrderChangeDeliveryModeAction 。 在第二部分中,声明了实际的方面,它是类似于以下内容的java类:

 包com.myproject.core.aspects;
 
  导入org.apache.log4j.Logger;
  导入org.aspectj.lang.ProceedingJoinPoint;
  导入org.aspectj.lang.annotation.Around;
  导入org.aspectj.lang.annotation.Aspect;
  导入org.aspectj.lang.annotation.Pointcut;
 
  @方面
  公共类ChangeDeliveryPromotionAspect {
      私有静态最终Logger LOG = Logger.getLogger(ChangeDeliveryPromotionAspect.class);
      @Pointcut(" execution(public * de.hybris.platform.promotions.jalo.PromotionOrderChangeDeliveryModeAction.apply(..))")
      公共无效评估(){
      }
      @Around(" evaluate()")
      公共对象评估(最终ProceedingJoinPoint pjp)抛出Throwable {
          LOG.info("正在评估OrderThresholdChangeDeliveryModePromotion"));
          返回pjp.proceed();
      }
  }
  

在此类中,我们指定要拦截的方法(@Pointcut批注),并拦截 @Around 。 之前或之后,还有其他可能性,以及采用方法参数或类实例本身的更为复杂的情况。
我希望这有助于指导如何覆盖jalo方法,因为关于该方法的信息不多
问候,胡安

闻人可可
2楼-- · 2020-09-12 09:19

如何覆盖Voucher类的getVoucherValue?

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答