Экспорт Impex: двоеточие в многозначном атрибуте экранируется двойной обратной косой чертой. Как удалить это поведение? - PullRequest
0 голосов
/ 24 октября 2018

Hybris: 6.3.0.0-SNAPSHOT (поведение аналогично 6.3.0.21)

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

При экспорте данных атрибута String без двоеточия, не многозначный атрибут можно экспортировать как 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-адрес из экспортированного impex, но URL-адрес содержит двойную обратную косую черту.Экспортированный импекс не предназначен для повторного импорта.

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

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

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Для этого конкретного случая я создал новый переводчик, расширяющий 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;
}

Ссылка:

0 голосов
/ 24 октября 2018

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

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

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

...