Hybris: 6.3.0.0-SNAPSHOT (поведение такое же, как и в 6.3.0.21)

При экспорте impex мы заметили разницу при экспорте атрибута немногозначного типа и при экспорте атрибута многозначного типа.

При экспорте данных строкового атрибута без двоеточия немногозначный атрибут можно экспортировать как Experts , а многозначный атрибут можно экспортировать как Experts | Hybris .

При экспорте типа с данными атрибута String с двоеточиями (например, URL) двоеточие экранируется двойной обратной косой чертой (только для многозначных значений). Немногозначный атрибут можно экспортировать как https://experts.hybris.com , а многовариантный атрибут можно экспортировать как https \: //experts.hybris.com , если имеется только 1 значение, или как https \: //experts.hybris.com | https \: //help.hybris.com , если есть 2 значения.

Как я могу предотвратить экспорт двоеточия? Есть ли метод, который я могу переопределить, чтобы изменить это поведение? Я хочу изменить результат на https: //experts.hybris .com | https: //help.hybris.com или на "https: //experts.hybris.com "|" https://help.hybris.com " .

Экономическое обоснование. Мы хотим скопировать URL-адрес из экспортированного импекса, но URL-адрес содержит двойные обратные косые черты. Экспортированный импекс не предназначен для повторного импорта.

Примечания # `: URL-адреса хранятся в коллекции (например, Product.newAttribute, где newAttribute - это коллекция настраиваемых типов, которая имеет строку). Итак, заголовок Impex выглядит примерно так: «INSERT_UPDATE Product; newAttribute (data)»

Примечания № 2: (ОБНОВЛЕНИЕ: не работает) В настоящее время я проверяю, возможно ли это с помощью CSVCellDecorator; это только для импорта.

Примечания № 3: В настоящее время я проверяю, возможно ли это, с помощью AbstractSpecialValueTranslator.

0
geffchang 24 Окт 2018 в 09:22

2 ответа

Лучший ответ

Для этого конкретного случая я создал новый переводчик, расширяющий 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
geffchang 24 Окт 2018 в 16:14

Я думаю, что это может быть невозможно, поскольку двоеточие используется для разделения ключей для ссылочных типов. Как в

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

Почему бы не запустить поиск / замену по результату?

0
Johannes Nolte 24 Окт 2018 в 08:17
52962180