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