1

コードがnullの場合、hybrisがそれを無視するようにメディアをインポートしたいのですが、それ以外の場合は通過します。これが私のImpexです

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

製品の複数のデータセットを持つ 1 つの CSV ファイルがあります。メディアのある製品とない製品があります。したがって、コード属性で null を許可しようとしていますが、機能していません。

私もチェックしましimpex.legacy.mode=trueたが、運がありません。まだスローエラーです。ビーンシェルを介して可能かもしれませんが、どうすればよいかわかりません。そのためのカスタムトランスレーターを書きたくありません。可能な解決策をいくつか教えてください。

4

2 に答える 2

1

よく考えた結果、独自のプロセッサを作成する以外に適切な解決策を見つけることができませんでした。ここに解決策があります

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 Pointer Exception はスローされません (大きなものはこれが本当に嫌いです)。したがって、code = nullシステムがその行をダンプして次へ進む場合。

アップデート :

簡単なハックで問題が解決しました。code = null の場合に完全な行をダンプする適切な解決策は次のとおりです(私の要件による)

1行ですべてが魅力的に機能しました!!!

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;
    }
}
于 2014-09-02T06:03:12.043 に答える