尝试通过impex将defaltValue插入到列中,但是获取错误无法在null

时间:2015-12-21 12:39:57

标签: java hybris impex

第二列中的空值(传入的csv文件): - >
输入CSV:10512 ,,            10513,12345,

IMPEX:

INSERT_UPDATE Product;code[unique=true];vendors(code)[translator=ca.batch.converter.StiboSetDefaultVendorIfNullTranslator];...

代码:

扩展de.hybris.platform.impex.jalo.translators.AbstractValueTranslator;

private final String defaultVendorCode = "000000";

@Override
public Object importValue(String valueExpr, final Item item)
        throws JaloInvalidParameterException {

    if (valueExpr == null || StringUtils.isEmpty(valueExpr)) {

        LOG.debug("Current attribute value is null so inserting "
                + defaultVendorCode);
        valueExpr = defaultVendorCode;

    }

    return valueExpr;
}

在12345也得到相同的误差,但最终的impex对齐行有数字(impex row - > 10153; 12345)

由于参数不匹配试图为属性de.hybris.platform.jalo.product.Product.vendors设置值'000000'(得到java.lang.String,期望de.h ybris.platform.jalo.product.Product)。,

(impex row - > 10153 ;;)

2 个答案:

答案 0 :(得分:1)

你应该试试这个:[allownull = true]属性修饰符; 你的impex应该是这样的:

INSERT_UPDATE Product;code[unique=true];vendors(code)[allownull=true]

仅导入 真假 默认值:false 如果设置为true,则此修饰符显式允许列值的空值。如果没有业务代码阻止空值,则此修饰符甚至允许强制属性中的空值,例如,媒体类型的catalogVersion属性。 例: [允许为空=真] 小费 在服务层模式下,如果设置了allownull,则导入可能会失败。从hybris Commerce Suite版本5.1.1开始,如果遇到此参数,导入将动态切换到传统模式。处理完一条线后,导入将切换回SL模式。

答案 1 :(得分:0)

我认为错误信息非常明确:

(got java.lang.String, expected de.h ybris.platform.jalo.product.Product).,

对于翻译人员,您必须查找实际的默认供应商对象,而不是返回默认的供应商代码。

我认为最简单的解决方案是,如果您使用装饰器,然后返回您的"供应商的代码值"属性。 您可以在此处找到详细说明: https://wiki.hybris.com/display/release5/ImpEx+API#ImpExAPI-WritingOwnCellDecorator

但基本上是这样的:

public class MyDecorator implements CSVCellDecorator
{
   public String decorate( int position, Map<Integer, String> srcLine )
   {
      // here add your custom logic to check and if applies return your default vendor code, otherwise return the given input value
      //String parsedValue=srcLine.get(position);
      //return parsedValue+"modified"; // some decoration stuff
   }
}

希望有所帮助:)