导入impex

时间:2017-05-21 11:37:20

标签: hybris impex

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将在第一次创建时,侦听器就可以正确使用正确的类型代码并且正在执行块。但是在更新的情况下,它不起作用。

1 个答案:

答案 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);
            }
        }
    });
}