Может использоваться в простых типовых случаях, без необходимости написания динамического кода. Позволяет гибко ограничивать в конфигурации правила правки процессов и автоматически выполняемые с ними операции.
Реализуется одним или несколькими правилами в конфигурации типа процесса вида:
onProcessEvent.<n>.events=<events>
onProcessEvent.<n>.eventsExclude=<eventsExclude>
# обязателен хотя бы один из двух
onProcessEvent.<n>.doExpression=<doExpression>
onProcessEvent.<n>.commands=<commands>
# необязательные параметры
onProcessEvent.<n>.ifExpression=<ifExpression>
onProcessEvent.<n>.checkExpression=<checkExpression>
onProcessEvent.<n>.checkErrorMessage=<checkErrorMessage>
-
<n> - ordered int rule’s number;
-
<events> - обрабатываемые правилом события через точку с запятой, если параметр не указывается - то обрабатываются все события связанные с данным типом процесса;
-
<eventsExclude> - исключаемые из обработки правилом события через точку с запятой, если параметр не указывается - то никакие событие не исключаются;
-
<ifExpression> - JEXL выражение проверки условия при котором отрабатывают команды макроса;
-
<checkExpression> - JEXL выражение проверки условия при невыполнении которого генерируется ошибка <checkErrorMessage>, используется только с checkErrorMessage;
-
<checkErrorMessage> - текст ошибки, сообщаемой при невыполнении условия <checkExpression>;
-
<commands> - команды макроса обработки;
-
<doExpression> - выполняемый JEXL скрипт, более гибкий аналог <commands>.
В <events> поддержаны следующие события:
События *ing отличаются от *ed событий тем, что они гененрируются до момента записи в БД.
Правила просматриваются в порядке их номеров. Первое правило выдавшее сообщение прерывает просмотр и отменяет изменение связанное с процессом.
В <commands> указывается макрос обработки процесса, состоящий из команд, разделённых точкой с запятой. Все команды макроса выполняются последовательно и в рамках текущей транзакции. Ошибка в любой из команд прерывает текущую транзакцию, откатывая внесённые в БД изменения.
|
Более гибким и рекомендуемым способом выполнения команд является использование JEXL выражений с помощью doExpression. Обратите внимание на примеры. Значительная часть команд ядра может быть заменена вызовами функций из ru.bgcrm.dao.expression.ProcessChangeFunctions. Используйте сложные команды из перечня ниже, например emailNotifyExecutors, только если вы не найдёте аналогичной Java функции.
|