Как использовать набор изменений для разных типов полей
Скопировать ссылку на статью
Скопировано

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

Число - проверка числового значения поля осуществляется путём указания проверяемого числа без дополнительных символов:

changeSet.hasChangedField("delivery_cost") and changeSet.newValue("delivery_cost") == 100

Строка - проверка строкового типа осуществляется путём написания необходимого для проверки текста в кавычках либо двойных кавычках:

changeSet.hasChangedField("status") and changeSet.newValue("status").code == "complete"
changeSet.hasChangedField("first_name") and changeSet.newValue("first_name") == "no name"

Чекбокс (флажок да/нет) - имеет 2 значения:

true - соответствующее значению "Да", то есть установленной галочке в поле, либо нажатой кнопке.

false - соответствующее значению "Нет", то есть не установленной галочке в поле, либо не нажатой кнопке.

changeSet.hasChangedField("call") and changeSet.newValue("call") == true

Дата - для сравнения значения изменяемого поля с конкретной датой необходимо использовать функцию date(), параметром которой будет необходимая дата.

changeSet.hasChangedField("delivery_date") and changeSet.newValue("delivery_date") == date("01.01.2000")

Набор изменений является массивом данных, соответственно, с помощью pipe фильтров можно производить отслеживание изменений во вложенных в массив объектах. Все доступные для использования фильтры представлены в соответствующей статье.

changeSet | contains(item => item.fieldName == "payments.status" and item.newValue.code == "paid")

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

Особенности отслеживания изменений в пользовательском поле

Пользовательские поля, как и стандартные поля системы, бывают разных типов, однако работа с отслеживанием изменений в пользовательских полях отличается. Значение полей с типом "Число" или "Целое число" в истории будет числом, для остальных типов полей значения будут текстом.

Для отслеживания изменений в пользовательском поле с типом "Число" и "Целое число":

changeSet.hasChangedField("custom_integer") and changeSet.newValue("custom_integer") == 12

Условие выполнится, если изменится пользовательское поле с символьным кодом integer, с типом "Целое число" и его новое значение будет числом 12.

changeSet.hasChangedField("custom_number") and changeSet.newValue("custom_number") == 1.25

Условие выполнится, если изменится пользовательское поле с символьным кодом number, с типом "Число" и его новое значение будет числом с плавающей точкой 1.25.

Примечание

Число с плавающей точкой необходимо указывать со знаком точки

Отслеживание изменений в пользовательском поле с типом "Флажок (да/нет)"

Пользовательские поля с типом "Флажок (да/нет)" могут содержать одно из значений:

true - соответствующее значению "Да", то есть установленной галочке в пользовательском поле.

false - соответствующее значению "Нет", то есть не установленной галочке в пользовательском поле.

Примечание

В случае с пользовательскими полями, значения true и false необходимо проверять как строку: 'true' и 'false' соответственно.

changeSet.hasChangedField("custom_callback") and changeSet.newValue("custom_callback") == 'true'

Условие выполнится, если изменится пользовательское поле с символьным кодом callback, с типом "Флажок (да/нет)" и его новое значение будет являться установкой галочки в этом пользовательском поле.

Для отслеживания изменений в пользовательском поле с типом "Строка" или "Текст":

changeSet.hasChangedField("custom_note") and changeSet.newValue("custom_note") == 'Перезвонить до 5 вечера'

Условие выполнится, если изменится пользовательское поле с символьным кодом note, с типом "Строка" или "Текст" и его новое значение будет текстом 'Перезвонить до 5 вечера'.

Важно!

Данное условие выполнится только в том случае, если в поле будет только проверяемая в коде информация

Для отслеживания изменений в пользовательском поле с типом "E-mail":

changeSet.hasChangedField("custom_mail") and changeSet.newValue("custom_mail") == "support@retailcrm.ru"

Условие выполнится, если изменится пользовательское поле с символьным кодом mail, с типом "E-mail" и его новое значение будет support@retailcrm.ru.

Примечание

В интерфейсе системы поля с данным типом имеют валидацию на корректность вводимых в поле данных, по маске mail@site.ru. Обязательным является знак "@" и url адрес после этого знака.

Отслеживание изменений в пользовательском поле с типом "Справочник"

В новом либо старом значении поля с типом "Справочник" хранится символьный код соответствующего справочника в текстовом формате

changeSet.hasChangedField("custom_directory") and order.customField("custom_directory").code == "two"

Условие выполнится, если изменится пользовательское поле с символьным кодом directory, с типом "Справочник" и символьным кодом измененного значения элемента справочника будет "two".

Для отслеживания изменений в пользовательском поле с типом "Дата":

changeSet.hasChangedField("custom_birthday") and changeSet.newValue("custom_birthday") == "1980-01-13"

Важно!

В пользовательских полях с типом "Дата" данные в истории хранятся в формате ГГГГ-ММ-ДД, отличным от формата в интерфейсе системы - ДД.ММ.ГГГГ.

Условие выполнится, если изменится пользовательское поле с символьным кодом birthday, с типом "Дата" и его новое значение будет 13.01.1980.

Особенности отслеживания изменений подписки клиента на маркетинговые Email, SMS, WhatsApp рассылки

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

Пример условия в триггере для проверки отписки клиента от email рассылки:

changeSet | contains (item => 
    item.fieldName == 'customer_subscription.subscribed' 
    and item.customerSubscription.subscription.channelCode == 'email' 
    and not item.newValue
)

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

Пример условия в триггере для проверки подписки клиента на канал sms с кодом категории news:

changeSet | contains (item => 
    item.fieldName == 'customer_subscription.subscribed' 
    and item.customerSubscription.subscription.channelCode == 'sms' 
    and item.customerSubscription.subscription.code == 'news' 
    and item.newValue
)
Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Набор изменений
В статье рассмотрены особенности работы с набором изменений.