第二列中的空值(传入的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 ;;)
答案 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
}
}
希望有所帮助:)