Hybris 6.3.0.2
我创建了一个AfterSaveListener,它在保存项目后执行一些自定义逻辑。
* AfterSaveListener -
@Override
public void afterSave(final Collection<AfterSaveEvent> events)
{
for (final AfterSaveEvent event : events)
{
final int type = event.getType();
if (AfterSaveEvent.UPDATE == type || AfterSaveEvent.CREATE == type)
{
final PK pk = event.getPk();
//The AttributeFormat Model typecode is "11001"
if (11001 == pk.getTypeCode())
{
final AttributeFormatModel attributeFormat = modelService.get(pk);
updateProductFeatureByAttributeFormat(attributeFormat);
}
}
}
}
基于我正在更新产品特征数据的基础上创建了新的Item类型“AttributeFormat”。
如果我从后台更新或创建AttributeFormat但是在通过impex导入数据时它不能正常工作,那么这个监听器工作正常。
Impex -
INSERT_UPDATE AttributeFormat;code[unique=true];prefix[lang=$lang];suffix[lang=$lang];separator[lang=$lang];$classSystemVersion
;prefix_suffix_separator;<;change;,
当我导入此Impex时,调用将转到AfterSaveListener,但预期的类型代码未到来。方法if (11001 == pk.getTypeCode())
块根本没有执行。
我调试并发现其他一些媒体类型代码即将推出但不是AttributeFormat。有没有人遇到同样的问题?
AfterSaveListener在第一次创建项目的情况下使用正确的typecode值。每当AttributeFormat将在第一次创建时,侦听器就可以正确使用正确的类型代码并且正在执行块。但是在更新的情况下,它不起作用。
答案 0 :(得分:0)
在hybris管理控制台中检查您的模型AttributeFormatModel的类型代码,通常是在考虑的父类的类型代码中 我建议使用instanceof
进行检查@Override
public void afterSave(final Collection<AfterSaveEvent> events)
{
events.forEach(event -> {
if (event.getType() == AfterSaveEvent.CREATE)
{
final PK pk = event.getPk();
final Object object = getModelService().get(pk);
if (object instanceof ManageTransportOfferingForScheduleConfigurationCronJobModel)
{
final ManageTransportOfferingForScheduleConfigurationCronJobModel cronjob =
(ManageTransportOfferingForScheduleConfigurationCronJobModel) object;
cronjob.setActive(Boolean.TRUE);
getCronJobService().performCronJob(cronjob, true);
}
}
});
}