在impex导入期间未执行拦截器(impex.legacy.mode为false)

2020-08-31 13:29发布

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

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


大家好,

我们有一个要求,我们必须使用第三方引擎的加密密钥并使用该密钥对信用卡号进行加密。 我们已禁用OOB信用卡号加密,如以下链接中所述 https://wiki.hybris.com/display/forum/INFO+How+to+disable+disable+encryption+of+creditcard+numbers

要加密信用卡号,我们在CreditCardPaymenInfo项目类型上编写了PrepareInterceptor。 该拦截器将从第三方引擎加密信用卡号。 同样,我们创建了一个LoadInterceptor,它将解密来自第三方引擎的信用卡号。

customextension-spring.xml文件中的拦截器豆:

  <属性名称=" interceptor" ref =" creditCardPaymentInfoPrepareInterceptor"/>
  
 
 

 

  
  
 

  

从店面(结帐流程)和hmc创建/查看信用卡时,拦截器被调用。

问题::当我们为CreditCardPaymenInfo导入impex时,拦截器没有被调用,因此,信用卡号被保存为数据库中的纯文本格式。 此外,impex.legacy.mode为false,但问题仍然存在。

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

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


大家好,

我们有一个要求,我们必须使用第三方引擎的加密密钥并使用该密钥对信用卡号进行加密。 我们已禁用OOB信用卡号加密,如以下链接中所述 https://wiki.hybris.com/display/forum/INFO+How+to+disable+disable+encryption+of+creditcard+numbers

要加密信用卡号,我们在CreditCardPaymenInfo项目类型上编写了PrepareInterceptor。 该拦截器将从第三方引擎加密信用卡号。 同样,我们创建了一个LoadInterceptor,它将解密来自第三方引擎的信用卡号。

customextension-spring.xml文件中的拦截器豆:

  <属性名称=" interceptor" ref =" creditCardPaymentInfoPrepareInterceptor"/>
  
 
 

 

  
  
 

  

从店面(结帐流程)和hmc创建/查看信用卡时,拦截器被调用。

问题::当我们为CreditCardPaymenInfo导入impex时,拦截器没有被调用,因此,信用卡号被保存为数据库中的纯文本格式。 此外,impex.legacy.mode为false,但问题仍然存在。

付费偷看设置
发送
9条回答
大简至美
1楼 · 2020-08-31 14:11.采纳回答

Ruchi,

从hybris Commerce Suite版本5.1.1开始,如果导入遇到标题行的参数" allownull"或" forceWrite",则导入将动态切换到旧版模式。

这是在以下Wiki页面的 https的"属性相关修饰符的TIp"部分中编写的: //wiki.hybris.com/display/release5/ImpEx+语法

您指定的所有impex导入标题中都包含allownull。 如果您使用的是Hybris 5.1.1及更高版本,则会看到此问题。

感谢Sachin

haha101010
2楼-- · 2020-08-31 14:00

customextension-spring.xml文件中的拦截器bean:

  
      
      
  
 

  
 
  
      
      
  
  
太Q了
3楼-- · 2020-08-31 13:58

感谢Saurabh,

按照Wiki, https://wiki.hybris.com/display/ " release5/Interceptors#Interceptors-ImplementanInterceptor "在impex转换器之前调用了预备拦截器。"

我们也为B2BCustomer项目类型提供了自定义准备拦截器,并且在导入B2BCustomer impex时将执行该拦截器。

但是,当我们导入信用卡提示时,CreditCardPaymentInfo拦截器不会执行。 我们正在使用以下用于信用卡的提示:

$ cardtype = type(code)INSERT_UPDATE CreditCardPaymentInfo; code [unique = true]; user(B2BCustomer.uid); paymentName; number [allownull = true]; $ cardtype; ccOwner [allownull = true]; validToMonth [allownull = true]; validToYear [allownull = true]; issueNumber; billingAddress(unfAddressId); ; TestCC1; C21546; VISA Ruchi; 4444333322226666; visa ;; 12; 2019; 0;

天桥码农
4楼-- · 2020-08-31 14:10

Ruchi,您使用的hybris版本是什么?

悠然的二货
5楼-- · 2020-08-31 13:59

在下面的链接上查看卢克·G·波特的帖子

https://answer.sap.com/questions/12756513/how-to-intercept-a-relation-after-changing-model.html

您可以编写一个impex转换器,并在performImport方法中实现您的业务逻辑。 如果从此方法中执行modelService.save(),则应调用拦截器。

追夢秋陽
6楼-- · 2020-08-31 13:59

感谢索拉。

我在CreditCardPaymentInfo和PaymentInfo类中发现了相同的问题。 CreditCardPaymentInfo没有单独的jalo类,可能就是问题所在。 我现在已经写了同样的翻译。 尽管我仍然不太清楚,为什么拦截器为什么不对CreditCardPaymentInfo执行,因为拦截器应该在模型层而不是Jalo层工作。

bbpeas
7楼-- · 2020-08-31 13:51

完全符合我的想法,如果您在core-items.xml文件中搜索CreditCardPaymentInfo,您将意识到在项目类型定义上,generate修饰符设置为' 假",父类为PaymentInfo。 这意味着jalo类将为PaymentInfo生成,而不会为CreditCardPaymentInfo生成,


如果您使用decompiler进行深入研究,则可以看到CreditCardPaymentInfo作为静态公共类。 Impex Framework的复杂性对我来说仍然是个谜,不确定为什么jalo层仍然如此紧密地联系在一起。 如果有人可以详细解释我们,那就太好了。 无论如何,回到解决方案

  • 编写您自己的CreditCardPaymentInfo版本并保持generate Modify = true
  • 定义UNFCreditCardPaymentInfo扩展CreditCartPaymentInfo并生成= true
  • 在公共位置编写逻辑,然后从控制器代码和翻译器代码中调用
  • 修改core-items.xml文件,不好的主意

一周热门 更多>