Особенности формирования валидации
Скопировать ссылку на статью
Скопировано

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

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

В условии можно работать с объектом, над которым производится действие (это order,customer, customercorporate, task), а также с объектом changeSet (тип Change\EntityChangeSet), в котором содержится информация об изменяемых полях.

changeSet.isUpdate() and changeSet.hasChangedField('payments.status')

В некоторых случаях в валидации требуется проверить некоторые атрибуты пользователя, который изменяет данные в заказе/клиенте/ корп. клиенте/задаче. Например, проверить, что пользователь входит в определенную группу. Получить пользователя, меняющего данные, можно через функцию user().

  • Запрет на завершение задачи без заполненного поля «Описание»
changeSet.isUpdate()
and changeSet.hasChangedField("complete")
and changeSet.getNewValue("complete") == true
and task.commentary == null
  • Запрет на создание задачи без срока исполнения
changeSet.isCreate() and task.getDatetime() == null
  • Разрешено только завершение задачи, редактировать нельзя
changeSet.isUpdate()
and changeSet.hasChangesExcluding(["complete", "completed_at"])
  • Запрет менять статус оплаты заказа
changeSet.isUpdate() and changeSet.hasChangedField('payments.status')
  • Дата доставки должна быть сегодняшней датой или позднее
order.deliveryDate < date('now 00:00:00') and (
(changeSet.isCreate() and order.deliveryDate) or
(changeSet.isUpdate() and changeSet.hasChangedField('delivery_date'))
)
  • Отгрузку может выполнять только пользователь группы Логист

Примечание

По умолчанию в системе нет группы Логист, но вы можете создавать нужные вам группы пользователей.

changeSet.hasChangedField('shipped') and not user().hasGroup('logist')
  • Пользователь может менять только определенные поля
changeSet.hasChangesExcluding(['status', 'first_name', 'last_name'])
Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Работа с товарами в триггерах, валидации и типах цен
Состав заказа является массивом данных, соответственно, работа с ним ведется с помощью специальных фильтров созданных в PipeLanguage. В статье разберем, как работать с фильтрами в типах цен, триггерах и валидации и в разрезе товаров.
Следующая статья
Проверка срабатывания триггеров и валидации
При необходимости проверить триггер или валидацию на корректную работу вы можете воспользоваться журналом действий, в котором отображается каждое срабатывание и, в случае возникновения, ошибки с подробным описанием.