Impex导出:多值属性中的冒号由双反斜杠转义-如何删除此行为?

时间:2018-10-24 06:22:14

标签: hybris

杂种:6.3.0.0-SNAPSHOT(行为与6.3.0.21相同)

导出Impex时,我们注意到导出非多值Type属性与导出多值Type属性是有区别的。

在导出不带冒号的String属性数据时,可以将非多值属性导出为专家,而将多值属性导出为 Experts | Hybris

当导出带有冒号(例如URL)的带有String属性数据的Type时,冒号以双反斜杠转义(仅用于多值)。非多值属性可以导出为 https://experts.hybris.com ,而多值属性可以导出为 https \://experts.hybris.com (如果有)仅1个值;如果有2个值,则为 https \://experts.hybris.com | https \://help.hybris.com

如何阻止出口逃离冒号?有没有我可以覆盖的方法来更改此行为?我想将结果更改为 https://experts.hybris.com|https://help.hybris.com https://experts.hybris.com” |“ https://help.hybris.com

业务案例::我们要从导出的impex复制URL,但该URL包含双反斜杠。导出的Impex不能重新导入。

注释#`:这些URL存储在一个集合中(例如Product.newAttribute,其中newAttribute是具有字符串的自定义类型的集合)。因此,Impex标头看起来像“ INSERT_UPDATE Product; newAttribute(data)”

注释#2:(更新:无效)目前,我正在检查是否可以使用CSVCellDecorator。这仅用于导入。

注释#3:当前,我正在检查是否可以使用AbstractSpecialValueTranslator。

2 个答案:

答案 0 :(得分:1)

对于这种特定情况,我创建了一个新的转换器,扩展了AbstractValueTranslator。然后,我实现了exportValue方法,将字符串数据(即URL)连接在一起,而没有转义它们。

public String exportValue(final Object value) throws JaloInvalidParameterException
{
    String joinedString = "";
    if (value instanceof Collection)
    {
        final Collection valueCollection = (Collection) value;
        if (!valueCollection.isEmpty())
        {
            final ArrayList<CustomType> list = (ArrayList<CustomType>) valueCollection;
            final StringJoiner joiner = new StringJoiner("|");
            for (final CustomType customType : list)
            {
                // data is a URL
                joiner.add(customType.getData());
            }
            // value would be something like "https://experts.hybris.com|https://help.hybris.com"
            joinedString = joiner.toString();
        }
    }

    return joinedString;
}

参考:

答案 1 :(得分:0)

我认为这可能是不可能的,因为冒号用于分隔引用类型的键。如

...;catalogVersion(catalog(id),version);...
...;myCatalog:Staged;...

为什么不对结果进行搜索/替换?