0

海布里斯 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);
            }
         }
    }
}

创建了一个新的项目类型“AttributeFormat”,我正在基于它更新产品特征数据。

如果我从后台更新或创建 AttributeFormat,此侦听器工作正常,但在通过 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 使用正确的类型代码值。每当第一次创建 AttributeFormat 时,侦听器都可以使用正确的类型代码和 if 块正在执行。但在更新的情况下,它不起作用。

4

1 回答 1

1

在 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);
            }
        }
    });
}
于 2018-02-23T14:29:36.787 回答