从 impex 获取值到 InitDefaultInterceptor Hybris

Posted

技术标签:

【中文标题】从 impex 获取值到 InitDefaultInterceptor Hybris【英文标题】:get values from impex into InitDefaultInterceptor Hybris 【发布时间】:2021-05-25 19:36:43 【问题描述】:

我有一个 impex 文件(示例)

INSERT_UPDATE Subscriber;firstName[unique=false];lastName[unique=false];email[unique=true];bulk(code)[default=false]
;FirstName;lastName;email@gmail.com;true;

和一个 InitDefaultInterceptor

 public class MyInterceptor implement InitDefaultInterceptor<SubscriberModel>

onInitDefaults(SubscriberModel model, InterceptorContext ctx)

如何从这个拦截器中的 impex 获取值?我尝试使用

model.getFirstName(); 
....

但所有方法都返回“null”。我能做些什么来获得价值?在将它们保存到数据库之前,我需要实现一个逻辑。

【问题讨论】:

你的用例是什么,我的意思是说你想实现什么? 我在 Yoni 回答中说这个想法作为评论。先生,您能对我目前的问题提出建议吗?非常感谢! 【参考方案1】:

如果您想使用正在发送的值,您需要使用PrepareInterceptor 而不是InitDefaultInterceptor 拦截器。

InitDefaultInterceptor :当模型填充了其默认值时,将调用 Init Defaults Interceptor。在您的情况下,这发生在创建要添加到数据库的对象的新实例时。此拦截器用于添加 default 值(在您已在 items.xml 中定义的值旁边)。此时仅插入在 items.xml 中标记的默认值。 这里没有加载来自您的 impex 的数据,因为这只是处理新对象的默认值,无论稍后要添加的内容是什么。

PrepareInterceptor :在模型保存到数据库之前调用 Prepare Interceptor。使用它可以在模型中添加值或在保存现有值之前对其进行修改。在这个拦截器中,你的 impex 的值将被填充到模型对象中。您可以根据自己的用例在此处添加或修改数据。

有关所有类型的拦截器的更多信息,SAP 的help 页面描述了所有拦截器。

【讨论】:

我照你说的做了,除了我有问题。所以我有准备拦截器,我将模型传递给服务。在那里我填写了一些字段,其中一个是布尔值。逻辑完成后布尔值需要为假,从 impex 他成真。所以发生的事情是:Prepare 拦截器传递模型,在服务中方法接收模型,设置一些值并调用方法“modelService.save(object)”。 在返回到准备拦截器之后,布尔值为 false。之后进入验证拦截器,然后再次进入准备拦截器,其中布尔值再次为真,需要再次重复此步骤以保持假。在不重复该步骤的情况下,我该怎么做才能保持布尔值为假? 非常感谢您的解释! 问题在于您的服务。那不应该调用 modelService.save(Object) 因为你现在正在保存你的对象。调用保存时触发准备拦截器。所以在你的情况下=>准备拦截器=>调用服务=>调用保存=>调用准备拦截器=>(可能会再次调用保存?并导致某种循环)=>其余的准备/验证拦截器 我放了 modelService.save() 因为在我看来,我认为它需要在我更新他之后保存模型,但是我删除了该行,现在一切正常。非常感谢您的时间和很好的解释!!祝您有美好的一天,再次感谢您!

以上是关于从 impex 获取值到 InitDefaultInterceptor Hybris的主要内容,如果未能解决你的问题,请参考以下文章

如何从表单获取输入框值到iframe?

从 jquery 获取值到 django 视图

如何从网格获取值到c#控制器

如何从自定义 UITableViewCell 获取值到 ViewController?

php 从db获取默认值到select表单

从html获取数据属性值到jquery