Hybris:如果代码为空,是否可以忽略impex行?

时间:2014-08-27 18:07:50

标签: hybris impex

我想以这样的方式导入媒体:如果代码为null,那么hybris应该忽略它,否则它将通过它。这是我的Impex

INSERT_UPDATE Media;mediaFormat(qualifier);code[unique=true][allownull=true];youtubeURL;mime[default='video/mp4'];$catalogVersion;folder(qualifier)[default=images]

我有一个CSV文件,其中包含多组产品数据。有些产品有媒体,有些则没有。所以我试图在代码属性中允许null,但它不起作用。

我也检查了impex.legacy.mode=true但没有运气。它还在抛出错误。也许它可以通过beanshell但不知道该怎么做。我不想为此编写自定义翻译器。请给我一些可能的解决方案。

2 个答案:

答案 0 :(得分:0)

不,这是不可能的。随机尝试传统模式无济于事。

您需要重新考虑从CSV文件到Impex的转换。

答案 1 :(得分:0)

经过多次思考,除了创建自己的处理器之外,我找不到任何合适的解决方案。这是解决方案

public class MediaProcessor extends DefaultImportProcessor
{

@Override
public void init(final ImpExImportReader reader)
{
    super.init(reader);
}

@Override
public Item processItemData(final ValueLine valueLine) throws ImpExException
{
    Item item = null;
    final ValueEntry codeEntry = valueLine.getValueEntry(2);
    final String mediaCode = codeEntry.getCellValue();
    if (StringUtils.isNotEmpty(mediaCode))
    {
        item = super.processItemData(valueLine);
    }
    return item;
}
}

Impex应该是这样的..

 INSERT_UPDATE Media[processor=com.hybris.core.impex.processor.MediaProcessor];mediaFormat(qualifier);code[unique=true];youtubeURL;mime[default='video/mp4'];$catalogVersion;folder(qualifier)[default=images]

这不会导致救援错误。但它不会抛出Null指针异常,因为我进入我的控制台(一个大的人真的很讨厌这个)。因此,如果code = null系统将转储该行并继续下一行。

更新:

快速黑客解决了我的问题。如果code = null(根据我的要求)

,这是一个正确的解决方案来转储完整的行

一条线让一切都像魅力一样!

valueLine.resolve(item, Collections.EMPTY_LIST);

完整代码

public class MediaProcessor extends DefaultImportProcessor
{

    @Override
    public void init(final ImpExImportReader reader)
    {
       super.init(reader);
    }

    @Override
    public Item processItemData(final ValueLine valueLine) throws ImpExException
    {
        Item item = null;
        final ValueEntry codeEntry = valueLine.getValueEntry(2);
        final String mediaCode = codeEntry.getCellValue();
        if (StringUtils.isNotEmpty(mediaCode))
        {
           item = super.processItemData(valueLine);
        }
        else
        {
           valueLine.resolve(item, Collections.EMPTY_LIST);
        }
        return item;
    }
}