Бизнес-правила
Бизнес-правило – это действие, которое запускается на серверной стороне при создании, обновлении или удалении записи. Бизнес-правила выполняются в рамках транзакции с базой данных (БД), вне зависимости от интерфейса, через который была инициирована транзакция (отправка формы пользователем, выполнение серверного скрипта, REST запрос, выполнение блока Workflow Activity). Действие правила может выполнятся как в отношении текущей записи, так и в отношении других записей.
Бизнес-правила могут использовать скрипты для выполнения действий с записями в базе данных. Также доступны возможности действи й скриптов в клиентских скриптах и UI-действиях.
Бизнес правила используются для:
- изменения значений в полях записи, которая соответствовала определенным условиям для срабатывания правила.
- выполнения серверного скрипта правила.
- выведения сообщений на сторону клиента.
- создания системных событий для отправки уведомлений по электронной почте или выполнения других серверных скриптов.
- прерывания выполнения транзакции с БД.
Для просмотра всех бизнес-правил в навигаторе перейдите в Настройка системы → Бизнес-правила.
Для просмотра бизнес-правил относящихся к конкретной таблице, выполните следующие действия:
- Перейдите к списку или форме таблицы.
- Выберите Настроить → Бизнес-правила в бургер-меню.
Типы бизнес-правил
В зависимости от выполняемой би знес-задачи, вы можете использовать один из следующих типов бизнес-правил:
- перед
- после
- после (асинхронно)
Условия запуска правил типа перед:
- После начала действия с записью (создание, обновление или удаление).
- До того, как система выполняет обновления на сервере.
Условие запуска правил типа после:
- После выполнения системой обновления на сервере.
Условие запуска правил типа после (асинхронно):
- После всех бизнес-правил других типов.
Бизнес-правила типа после (асинхронно) срабатывают после бизнес-правил типов перед и после. Благодаря этому, пользователь сн ачала получает форму со всеми изменениями, а затем срабатывают правила типа после (асинхронно). Таким образом вы можете оптимизировать время отклика системы – используйте правила типа после (асинхронно) для ресурсоемких скриптов, выполнение которых занимает много времени.
На схеме ниже показано в какой момент срабатывают правила типов перед, после и после (асинхронно). Все правила исполняются после начала действия с записью (создание, обновление или удаление).
Процесс начинается с действия на форме: если это действие обновления, источником данных является база данных, поэтому у записи есть блок previous. Блок previous представляет состояние формы до совершения действия (отправка формы – создание, обновление или удаление), а блок current представляет состояние формы после завершения действия. Отправка формы может выполняться пользователем, скриптом или запросом REST API.
Создание бизнес-правила
Требуемая роль: admin.
Чтобы создать новое бизнес-правило, выполните следующие действия:
- Перейдите в Настройка системы → Бизнес-правила.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.
Поля формы Бизнес-правило
- Общее
- Когда запустить
- Дейс твие
- Расширенная настройка
Поле | Обязательно | Описание |
---|---|---|
Наименование | Да | Введите наименование бизнес-правила. |
Таблица | Да | Выберите таблицу, в которой будет выполняться бизнес-правило. |
Описание | Нет | Введите краткое описание действия. |
Активно | Нет | Установите флажок, чтобы активировать бизнес-правило. |
Наследуемое | Нет | Установите флажок, чтобы применять данное бизнес-правило ко всем дочерним таблицам указанной Таблицы. |
Расширенная настройка | Нет | Установите флажок для отображения поля Скрипт и расширенных настроек, таких как тип бизнес-правила (поле Когда во вкладке Когда запустить). |
Поле | Обязательно | Описание |
---|---|---|
Когд а | Нет | Выберите момент выполнения бизнес-правила:
|
Порядок | Нет | Укажите порядок выполнения бизнес-правила. При наличии нескольких бизнес-правил одного типа (перед, после, после (асинхронно)), они выполняются в порядке возрастания. Поле доступно, когда установлен флажок Расширенная настройка и установлено значение перед или после в поле Когда. |
Приоритет | Нет | Укажите приоритет бизнес-правила. При наличии нескольких бизнес-правил с одинаковым Порядком, они выполняются в порядке убывания Приоритета. Поле доступно, когда установлен флажок Расширенная настройка и установлено значение перед или после в поле Когда. |
Создание | Нет | Установите флажок, чтобы бизнес-правило срабатывало при добавлении новой записи. |
Обновление | Нет | Установите флажок, чтобы бизнес-правило срабатывало при обновлении записи. |
Удаление | Нет | Установите флажок, чтобы бизнес-правило срабатывало при удалении записи. Поле доступно, когда установлен флажок Расширенная настройка. |
Условия фильтра | Нет | Задайте условия для срабатывания бизнес-правила. После указания Таблицы, все ее поля доступны для построения условий. Используйте динамические условия фильтра, такие как равно (динамическое) или не равно (динамически) при составлении условий, чтобы ваши бизнес-правила были более гибкими. |
Вкладка Дей ствие недоступна для бизнес-правил типа после (асинхронно).
Поле | Обязательно | Описание |
---|---|---|
Установить значение | Нет | Выберите колонку и определите нужное вам значение. Доступные колонки зависят от выбранной Таблицы.
|
Прервать действие | Нет | Установите флажок, чтобы прервать транзакцию (создание, обновление или удаление) при соблюдении всех условий. Хорошей практикой считается указывать причину отмены действия. Установите флажок Добавить со общение и введите текст в поле Сообщение. Если сообщение не указано, при отмене действия отображается стандартное сообщение: Ошибка сохранения .Если условия отмены не удается создать при помощи поля Условия фильтра, вы можете использовать скрипт с применением методов setAbortAction и ss.addErrorMessage. В этом случае флажок Прервать действие должен быть снят. Помните, что при использовании метода setAbortAction() для отмены транзакции, скрипт, следующий за вызовом этой функции, не будет исполнен. |
Добавить сообщение | Нет | Установите флажок, чтобы отобразить поле Сообщение, если вам нужно показать пользователю сообщение при выполнении бизнес-правила. |
Сообщение | Нет | Введите текст сообщения, которое вы хотите показать пользователю при выполнении бизнес-правила. Оно будет выведено на экран как всплывающее сообщение. Вы также можете использоват ь значение записи Исходное сообщение (source_message) из категории app (значение в колонке Категория). Подробнее читайте в статье Локализация и многоязыковая поддержка. Не используйте переменные или динамические ссылки на другие записи в этих сообщениях. Чтобы добавить сообщение с переменными или динамическими ссылками, установите флажок Расширенная настройка и настройте скрипт в появившейся одноименной вкладке. Поле Сообщение доступно, когда установлен флажок Добавить сообщение. |
(function executeRule(current, previous /*null when async*/) {
current.update();
})(current, previous);
Поле | Обязательно | Описание |
---|---|---|
Скрипт | Нет | Введите скрипт, определяющий действия, которые будут выполнены при запуске бизнес-правила. Доступны переменные:
|
При создании записи:
- previous является пустой.
- current равна объекту SimpleRecord, который будет создан.
При обновлении записи:
- previous равна объекту SimpleRecord, каким он был до начала транзакции.
- current равна объекту SimpleRecord на момент начала выполнения правила.
При удалении записи:
- previous является пустой.
- current равна объекту SimpleRecord на момент начала выполнения правила.
Вы можете вызывать атрибуты расширенной модели записи в бизнес-правилах типа перед. В таком случае, во время обработки бизнес-правила, вы будете получать текущие значения атрибутов, до выполнения транзакции.
В момент срабатывания бизнес-правила типа после (асинхронно), действие правила отправляется в очередь. Поэтому возможна незначительная задержка между срабатыванием бизнес-правила и выполнением действия. Объекты current и previous в бизнес-правилах типа после (асинхронно) содержат состояние объекта на момент выполнения действия бизнес-правила.
- Избегайте использования функции current.update() в скриптах бизнес-правил типов перед или после (асинхронно), поскольку это может привести к рекурсии. Если использования current.update() не избежать, добавьте к правилу условие запуска, которое перестает выполняться после первого запуска правила. В противном случае рекурсия неизбежна.
- Избегайте использования метода setAbortAction в бизнес-правилах типа после (асинхронно).
- Если скрипт бизнес-правила создает или обновляет записи в других таблицах, используйте тип запуска после. В противном случае, если бизнес-правило выполняется с ошибкой в процессе исполнения транзакции, правило типа перед создает/обновляет запись в другой таблице, что приводит к неконсистентности данных.
Запуск серверной бизнес-логики может не выполняться для системных таблиц, если создание или обновление записей инициируется стороной backend. Например, создание Элементов набора в рамках загрузки Источника импорта или создание Электронной почты в результате срабатывания правила уведомления, и другое.
Пример таблиц, для которых может не срабатывать серверная бизнес-логика:
- Основной журнал (sys_log)
- Журнал работы скриптов (sys_log_script)
- Журнал исключений (sys_log_exception)
- Журнал удаления записей (sys_record_deletion_log)
- Наборы для импорта (sys_import_set)
- Объекты ленты активности (sys_activity_feed_item)
- Электронная почта (sys_email)
Прерывающие бизнес-правила
Существует возможность выполнения бизнес-правил, которые прекращают последующие действия и процессы: бизнес-правила, уведомления, правила согласований, и другое.
Чтобы бизнес-правило прерывало последующие процессы, выполните следующие действия:
- Откройте нужное бизнес-правило.
- Во вкладке Когда запустить определите условия отмены.
- Во вкладке Действие установите флажок Прервать действие.
- Во вкладке Когда запустить убедитесь, что в поле Когда установлено значение перед. Поле Когда отображается, когда установлен флажок Расширенная настройка.
- Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.
Переназначение коробочных правил
При необходимости, часть коробочных бизнес-правил может быть переопределена.
- Для приложений, кроме Simple, достаточно скопировать коробочное правило при помощи действия Создать копию и деактивировать его. После этого вы сможете задать необходимую логику в копии правила.
- В случае приложения Simple большинство правил поставляется с Политика защиты = Защищена, поэтому просто деактивировать их не удастся. Тем не менее правила с типом Когда = перед могут быть переопределены правилами с аналогичными условиями запуска с большим порядком. Например, коробочное правило типа перед формирует значение в поле Тема [subject]. Порядок правила – 999. Для изменения логики формирования значения достаточно создать копию правила при помощи действия Создать копию, задать необходимую логику и указать Порядок = 1000. Если значение в поле не должно меняться, используйте правило на событие Обновление со следующим скриптом:
(function executeRule(current, previous = null /*not null only when action is update*/) {
if (previous) {
current.subject = previous.subject;
}
})(current, previous);