Условия в преобразованиях: когда правило срабатывает

Как работают условия в правилах преобразования: любое, равно, больше, содержит подстроку, пустое, регулярное выражение и проверка соседних узлов.

Условие в преобразовании отвечает на вопрос: выполнять это правило сейчас или пропустить его и перейти к следующему правилу. Например: если цена больше 100, добавить наценку; если артикул не пустой, добавить префикс; если значение содержит USD, удалить эту подстроку.

Одни и те же проверки могут встречаться в преобразованиях и в условиях выгрузки, но результат разный. Преобразование меняет значение поля. Условие выгрузки решает, попадет ли поле, строка, товар или XML/JSON-элемент в итоговый файл.

Где используется условие

В строке преобразования условие стоит между источником значения и действием. Сначала сервис берет значение из выбранного источника, затем проверяет условие и только после этого выполняет действие.

  • Источник - текущее значение или другой узел, атрибут, колонка либо системное значение.
  • Условие - проверка: любое, равно, больше, содержит подстроку, пустое, регулярное выражение и другие варианты.
  • Значение условия - то, с чем сравнивается источник. Для условий "любое", "пустое" и "не пустое" оно не нужно.
  • Действие - что сделать, если условие выполнено: заменить, удалить пробелы, увеличить на процент, не загружать поле и так далее.

Условие можно строить не только по текущему полю. Например, значение "Наличие" можно менять по остатку из соседнего узла stock, а цену - по валюте или признаку активности товара.

До или после преобразований

Внутри цепочки преобразований правила выполняются сверху вниз. Каждая следующая строка получает результат предыдущей строки. Если нужно сначала очистить цену от пробелов и валюты, а потом проверить число, поставьте очистку выше числового условия.

Справочник условий

В справочнике оставлены только смысловые колонки: название условия, когда его применять и как оно себя ведет. Отдельная колонка с примерами здесь не нужна: практические сценарии приведены ниже.

УсловиеКогда применятьПоведение
любоеПравило должно работать всегда.Срабатывает для любого значения, включая пустое.
равноНужно точное совпадение.Сравнивает значение целиком. Регистр букв учитывается только если включена чувствительность к регистру.
не равноНужно обработать все значения, кроме одного.Срабатывает, когда значение отличается от указанного.
большеНужно проверить число: цену, вес, остаток, количество.Обе стороны сравнения читаются как числа.
меньшеНужно найти значения ниже порога.Работает как числовая проверка.
больше или равноПорог тоже должен считаться подходящим.Срабатывает для значения, которое равно порогу или выше него.
меньше или равноПорог тоже должен считаться подходящим.Срабатывает для значения, которое равно порогу или ниже него.
содержит подстрокуНужно найти фрагмент внутри текста.Срабатывает, если указанный текст найден в любом месте значения.
не содержит подстрокуНужно исключить значения с определенным словом, кодом или фрагментом.Срабатывает, если указанного текста внутри значения нет.
начинается сВажен первый фрагмент значения.Срабатывает, если значение начинается с указанного текста.
заканчивается наВажен последний фрагмент значения.Срабатывает, если значение заканчивается указанным текстом.
пустоеНужно обработать незаполненные поля.Строка из одних пробелов считается пустой.
не пустоеДействие нужно только для заполненных значений.Срабатывает, когда после удаления пробелов по краям что-то остается.
регулярное выражениеНужно проверить значение по шаблону.Срабатывает, если регулярное выражение нашло совпадение.
не регулярное выражениеНужно обработать значения, которые не подходят под шаблон.Срабатывает, если регулярное выражение не нашло совпадение.

Практический пример

Ниже один исходный XML-фрагмент и два разных варианта настройки. Первый вариант готовит цену, второй создает значение наличия по остатку из соседнего узла.

<catalog>
  <product>
    <name>Стол Nordic</name>
    <sku>SKU-110</sku>
    <price>12 490 USD</price>
    <stock>8</stock>
  </product>
</catalog>
XML-снапшот с исходными значениями товара, цены и остатка
Снапшот показывает короткую версию исходного XML и значения, по которым можно настраивать преобразования.

Вариант 1: подготовить цену

Цена приходит как текст 12 490 USD. Чтобы получить число, правила выполняются последовательно: сначала очищают значение, затем проверяют уже подготовленное число.

  1. Условие любое: удалить пробелы из текущего значения.
  2. Условие содержит подстроку со значением USD: заменить подстроку на пустое значение.
  3. Условие больше со значением 100: увеличить цену на 10%.
Окно преобразований цены с условиями любое, содержит подстроку и больше
Каждая строка получает результат предыдущей, поэтому числовое условие применяется уже после очистки цены.
БылоЧто сработалоСтало
12 490 USDудалить пробелы, убрать USD, увеличить на 10%13739

Вариант 2: создать наличие по остатку

Поле наличия можно заполнить не из текущего значения, а по соседнему узлу stock. Это удобно, когда в итоговый файл нужно вывести текстовый статус, а в исходнике есть только количество.

  1. Сначала правило с условием любое задает базовое значение in_stock.
  2. Следующее правило смотрит на {/catalog/product/stock}. Если остаток меньше или равно 0, значение заменяется на out_of_stock.
Окно преобразований наличия с условием по соседнему узлу stock
Источник условия может отличаться от поля, которое преобразуется.
Остаток в исходникеРезультат в поле наличия
8in_stock
0out_of_stock

Что важно помнить

  • Для числовых условий сначала уберите валюту, пробелы, единицы измерения и другой текст.
  • Для условий "содержит подстроку", "начинается с" и "заканчивается на" значение поиска не должно быть пустым.
  • Если нужно убрать весь товар, строку или XML/JSON-элемент, используйте условия выгрузки, а не только преобразование одного поля.
  • Если правило не сработало, проверьте порядок строк: возможно, нужная очистка должна выполняться раньше.