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

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

Математические операции в действии триггера

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

Разберем популярный кейс по добавлению наценки к стоимости доставки с помощью триггера, который будет срабатывать при изменении информации в поле "Себестоимость доставки".

Примечание

Чтобы данный триггер работал корректно, модуль интеграции со службой доставки должен быть настроен таким образом, чтобы в поле "Себестоимость доставки" в карточке заказа фиксировалась стоимость доставки по тарифу от службы доставки.

changeSet.hasChangedField("delivery_net_cost") and changeSet.newValue("delivery_net_cost") != null 

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

order.deliveryNetCost+100

Данный код прибавит наценку в размере 100 рублей к себестоимости доставки, которую для интернет-магазина предоставила служба доставки.

Использование функций в действиях триггеров

В pipeLang имеются функции и доп.функции, которые возможно использовать в действии, а также условии триггера. Рассмотрим довольно популярный кейс по изменению ответственного менеджера в заказе на какого-то конкретного пользователя системы.

В условии триггера укажем:

changeSet.isCreate() and order.orderType.code == "eshop-legal"

Данный код сработает, если в систему поступит заказ с типом заказа "Юридическое лицо", которое в данном примере обрабатывает конкретный менеджер с идентификатором 4.

Примечание

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

Добавим действие по изменению ответственного менеджера заказа и в выражении укажем:

entity_by_id('User', 4)

Подобный триггер назначит ответственным менеджером заказа - пользователя, с идентификатором 4, если в системе создастся заказ для юр.лица.

Работа с массивами в действие триггера

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

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

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

Создадим триггер с условием:

changeSet.hasChangedField("order_product")

В действии триггера выберем изменение заказа, из выпадающего списка полей выберем созданное ранее пользовательское поле и укажем в выражении такой код:

order.availableOrderProducts | reduce( (sum, x) => sum + x.purchasePrice * x.quantity )

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

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