Hybris: возможно ли игнорировать строку impex, если код нулевой?

Я хочу импортировать медиа так, чтобы, если код нулевой, то hybris должен игнорировать его, иначе он его пропустит. Вот мой импекс

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

У меня есть один файл CSV, который имеет несколько наборов данных для продуктов. Некоторые продукты имеют носители, некоторые нет. Поэтому я пытаюсь разрешить нулевой в атрибуте кода, но он не работает.

Я проверил с impex.legacy.mode=true Также, но не повезло. Его все еще выбрасывает ошибку. Может быть, это возможно через бобовую оболочку, но не знаю, как это сделать. Я не хочу писать собственный переводчик для этого. Пожалуйста, дайте мне несколько возможных решений.

2 ответа

Решение

После долгих раздумий я не смог найти правильного решения, кроме как создать собственный процессор. Вот решение

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;
}
}

Импекс должен быть таким..

 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 Pointer, как я получал в моей консоли (большой действительно ненавижу это). Так что если 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;
    }
}

Нет, это невозможно. Случайное использование устаревшего режима не поможет.

Вам необходимо пересмотреть свое преобразование файлов CSV в Impex.

Другие вопросы по тегам