Поля в системе могут быть разных типов, и, соответственно, проверка значений полей в истории будет отличаться в зависимости от типа поля, который зафиксирован у каждого поля в справочнике объектов.
Число - проверка числового значения поля осуществляется путём указания проверяемого числа без дополнительных символов:
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
)