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.