杂种: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。
答案 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;...
为什么不对结果进行搜索/替换?