Сервис «Управление бизнес-правилами»#
1. Введение#
1.1. Назначение интерфейса#
Интерфейс «Управление бизнес-правилами» предназначен для:
централизованного хранения бизнес-логики;
настройки правил без изменения кода приложения;
выполнения правил в едином контексте (пространстве правил);
отладки и тестирования логики через встроенные инструменты.
Примечание
По функциональности система соответствует подходу BRF+ (Business Rule Framework plus) в SAP:
правила выносятся из кода в базу данных;
поддерживаются различные типы условий (фильтры, JEXL-скрипты);
доступно версионирование, логирование и разграничение доступа.
1.2. Где находится интерфейс#
Путь в приложении:
Приложение "Настройка системы" > основное меню, раздел "Настройки и сервисы" > "Сервисы JEXL" > "Управление бизнес-правилами"
2. Основные понятия#
2.1. Пространство правил (Rule Space)#
Пространство правил — это контейнер, объединяющий:
параметры;
источники данных;
функции;
наборы правил.
Пространство имеет уникальный код, по которому оно вызывается извне.
2.2. Bts-процедура#
Bts-процедура — это именованный блок JEXL-кода, который:
хранится отдельно от пространства;
может быть переиспользован в разных пространствах;
автоматически создаётся при первом добавлении JEXL-функции или правила;
редактируется как в справочнике процедур, так и непосредственно в интерфейсе пространства.
2.3. Контекст выполнения (rop)#
rop — это объект контекста, который передаётся в пространство при вызове.
Через rop доступны:
параметры вызова (например,
gidобъекта);ранее вычисленные значения;
вспомогательные сервисы (логирование, доступ к БД).
2.4. Жизненный цикл выполнения пространства#
Вызов
Bts_RuleSpacePkg.execute(код, параметры).Загрузка конфигурации пространства.
Выполнение запроса инициации (если есть) → формирование строк-итераций.
Для каждой строки:
выполняются все наборы правил (если активны и попадают в даты);
внутри набора — последовательное выполнение правил до первого
false(если не настроено иное).
Возврат результата (лог, изменённые параметры).
3. Структура интерфейса#
3.1. Панель навигации (слева)#
Дерево всех пространств правил, доступных пользователю.
Внутри каждого пространства — разделы:
Параметры
Источники данных
Функции
Наборы правил (с индикацией активности)
Для наборов и правил отображается иконка состояния (действует / не действует).
3.2. Рабочая область (справа)#
Отображает выбранный в навигации элемент.
Позволяет:
создавать/редактировать параметры;
настраивать источники данных;
писать JEXL-код;
конфигурировать условия универсального фильтра;
управлять доступом и логированием.
3.3. Операция «Тестирование документа»#
Расположена на панели инструментов пространства.
Позволяет выполнить пространство с ручным вводом параметров без вызова из внешнего кода.
Результат выполнения отображается в виде лога и итоговых значений параметров.
4. Настройка пространства правил#
4.1. Управление доступом#
Настройка ведётся в разрезе пользователей.
Для каждого пользователя или группы задаётся признак «Редактирование»:
если признак установлен — пользователь может изменять пространство;
если снят — доступ только на чтение и выполнение.
4.2. Уровень логирования#
Определяет, какая информация будет записываться в лог выполнения пространства:
Блокировка — логируются только критические ошибки, останавливающие выполнение.
Информация — записываются все шаги выполнения (рекомендуется для отладки).
Критическая ошибка — только ошибки, влияющие на корректность результата.
Дополнительные уровни могут быть добавлены в зависимости от конфигурации системы.
Важно: Уровень логирования влияет на производительность — для продуктивной среды рекомендуется использовать «Блокировка» или «Критическая ошибка».
4.3. Параметры пространства#
Переменные, доступные всем функциям и правилам пространства.
Для каждого параметра задаётся:
Тип данных (число, строка, дата, логический и др.);
Значение по умолчанию;
Источник заполнения (можно указать, из какого источника данных подставлять значение).
Признак «Доступен для фильтра»:
если установлен — параметр появляется в списке доступных полей при настройке Условия универсального фильтра как для функций, так и для правил наборов.
5. Источники данных#
5.1. Назначение#
Источники данных — это SQL-запросы, которые:
выполняются до основной логики пространства;
могут предоставлять данные для параметров;
могут использоваться по имени внутри JEXL-процедур.
5.2. Запрос инициации выполнения правил#
Признак: отмечается один из источников как «Запрос инициации».
Особенности:
может быть только один на пространство;
количество строк, возвращённых запросом, определяет число итераций выполнения пространства;
каждая строка становится отдельным контекстом выполнения (параметры наполняются значениями из полей запроса).
5.3. Дополнительные источники данных#
Не имеют признака инициации.
К ним можно обратиться по имени из любого JEXL-кода внутри пространства (например,
dataSource.get("mySource")).
5.4. Необязательность источников#
Если запрос инициации отсутствует, пространство выполняется один раз при условии, что все необходимые параметры переданы через rop в методе execute().
6. Функции пространства#
6.1. Назначение#
Функции — это переиспользуемые блоки логики, которые можно вызывать:
из правил внутри наборов (тип правила «Функция»);
из других функций (при необходимости).
6.2. Типы функций#
6.2.1. JEXL-код#
Представляет собой ссылку на Bts-процедуру.
При создании новой функции:
автоматически создаётся связанная Bts-процедура;
в рабочей области доступен редактор JEXL для написания кода.
При редактировании существующей функции:
код процедуры обновляется в новой версии (сохраняется история).
Также возможно вручную выбрать Bts-процедуру из справочника.
6.2.2. Условие универсального фильтра#
Настраивается графически на закладке «Условие».
Доступные поля для условий:
колонки из источников данных пространства;
параметры пространства с признаком «Доступен для фильтра».
Пользователь выбирает:
поле;
оператор сравнения (=, <, >, LIKE, IN, и др.);
значение (константа или параметр).
Система автоматически генерирует JEXL-код, который можно посмотреть на закладке «JEXL» (только для чтения).
7. Наборы правил#
7.1. Определение#
Набор правил — это логическая группа правил, выполняемая последовательно в рамках пространства.
7.2. Собственные параметры набора#
В наборе можно создавать локальные параметры.
Глобальные параметры пространства также отображаются (с пометкой о принадлежности).
Локальные параметры видны только внутри данного набора.
7.3. Ограничения действия#
Для каждого набора можно задать:
Временной диапазон (дата начала и дата окончания действия);
Признак «Действует» — если снят, набор не выполняется (в навигации отображается специальный индикатор).
7.4. Порядок выполнения правил#
Правила выполняются строго последовательно в порядке, указанном в интерфейсе (порядок можно изменять).
По умолчанию выполнение набора останавливается, если какое-либо правило вернуло
false.
7.5. Типы правил в наборе#
7.5.1. Условие универсального фильтра#
Полностью аналогично функции того же типа (п. 6.2.2), но действует только в рамках данного набора.
Настройка условий — через тот же графический конструктор.
7.5.2. JEXL-код#
Полностью аналогично функции JEXL, но локально для набора.
Также привязывается к Bts-процедуре (автоматически или вручную).
7.5.3. Функция#
Вызов глобальной функции пространства (см. раздел 6).
Позволяет переиспользовать общую логику в нескольких наборах без дублирования кода.
7.6. Дополнительные атрибуты правил#
Описание — текстовое пояснение (рекомендуется для документирования).
Сообщение для лога — текст, который будет выведен в лог выполнения при срабатывании правила.
Условие выполнения правила — отдельное условие (также через Bts-процедуру), которое определяет, будет ли правило выполняться в текущем контексте (см. раздел 8.2).
8. Управление выполнением и ветвлением логики#
8.1. Базовое правило остановки набора#
Если правило типа «Условие» или «JEXL» возвращает
false, выполнение набора прерывается.Последующие правила в этом наборе не выполняются.
Пространство переходит к следующему набору (если он активен).
8.2. Условие входа в правило (ветвление)#
Для каждого правила можно настроить «Условие входа» — это Bts-процедура, которая возвращает
trueилиfalse.Если условие возвращает
false, правило пропускается (не выполняется).Это позволяет реализовать конструкции «Если … То …»:
в первом правиле проверяется условие;
во втором — действие, но оно выполняется только если первое правило изменило параметр-флаг.
Важно: условие входа вычисляется до выполнения самого правила.
8.3. Пример остановки всего пространства#
Создаётся параметр пространства, например,
found.В первом правиле каждого набора проверяется
found == true— если да, правило пропускается (через условие входа).В функции записи результата, после нахождения нужного значения, параметр
foundустанавливается вtrue.Таким образом, все последующие наборы пропускают свою логику (условие входа не проходит), и пространство завершается досрочно.
9. Вызов пространства правил извне#
9.1. Пакет Bts_RuleSpacePkg и метод execute()#
Для вызова пространства из любого места системы (включая точки расширения, JEXL-операции) используется:
Bts_RuleSpacePkg.execute(<код пространства>, <параметры>)
9.2. Параметры вызова#
<код пространства>— строковый идентификатор.<параметры>— объект, содержащий:контекст выполнения (rop);
значения для параметров пространства;
дополнительные переменные.
9.3. Пример использования в точке расширения#
В точке расширения Stm_ActInApi.setidStateMC() вызов может выглядеть так:
Bts_RuleSpacePkg.execute("PRICE_CALC", rop)
Где rop уже содержит gid документа, на основе которого будут выполнены правила расчёта цены.
9.4. Вызов через интерфейс (Тестирование документа)#
В интерфейсе пространства нажать кнопку «Тестирование документа».
Откроется диалог ввода параметров (можно подставить тестовые значения).
После выполнения система покажет:
лог выполнения (с учётом установленного уровня логирования);
итоговые значения всех параметров пространства.
10. Приложения#
10.1. Глоссарий терминов#
Термин |
Определение |
|---|---|
Пространство правил |
Контейнер для параметров, источников, функций и наборов правил. |
Bts-процедура |
Именованный блок JEXL-кода, хранящийся в системе для переиспользования. |
JEXL |
Java Expression Language — язык для написания выражений и скриптов. |
rop |
Объект контекста выполнения, передаваемый в пространство. |
Запрос инициации |
SQL-запрос, определяющий количество итераций выполнения пространства. |
Условие универсального фильтра |
Графически настраиваемое условие, конвертируемое в JEXL. |
Набор правил |
Группа последовательно выполняемых правил с собственными параметрами. |
Условие входа |
Bts-процедура, определяющая, будет ли правило выполнено в текущем контексте. |
10.2. Типовые сценарии использования#
Сценарий |
Реализация |
|---|---|
Расчёт цены по сложной формуле |
Создать пространство с параметрами (цена, скидка, регион), функцией расчёта и набором правил для разных категорий товаров. |
Валидация документа перед сохранением |
Вызвать пространство из точки расширения |
Динамическое назначение статуса |
В зависимости от значений полей (сумма, дата, контрагент) набор правил устанавливает параметр |
Маршрутизация заявки |
Использовать условие входа для пропуска наборов, если заявка уже направлена в определённый отдел. |
10.3. Рекомендации по производительности и отладке#
Источники данных:
Оптимизируйте SQL-запросы (индексы, фильтрация) источника данных — они выполняются до всех правил;
Если запрос инициации возвращает тысячи строк, пространство будет выполнено тысячи раз — проектируйте логику с учётом этого.
Источник данных не является обязательным элементом пространства. Можно получить необходимые значения напрямую от объекта (через rop).
JEXL-код:
Избегайте рекурсии;
Используйте функции;
Используйте конструкции try-catch;
Bts-процедуры - версионный объект, при внесении изменений создавайте новую версию процедуры.
Отладка:
Используйте «Тестирование документа» с уровнем логирования «Информация» для пошагового анализа выполнения;