Может использоваться в простых типовых случаях, без необходимости написания динамического кода. Позволяет гибко ограничивать в конфигурации правила правки процессов и автоматически выполняемые с ними операции.
Реализуется одним или несколькими правилами в конфигурации типа процесса вида:
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> - подядковый числовой номер правила;
-
<events> - обрабатываемые правилом события через точку с запятой, если параметр не указывается - то обрабатываются все события связанные с данным типом процесса;
-
<eventsExclude> - исключаемые из обработки правилом события через точку с запятой, если параметр не указывается - то никакие событие не исключаются;
-
<ifExpression> - JEXL выражение проверки условия при котором отрабатывают команды макроса;
-
<checkExpression> - JEXL выражение проверки условия при невыполнении которого генерируется ошибка <checkErrorMessage>, используется только с checkErrorMessage;
-
<checkErrorMessage> - текст ошибки, сообщаемой при невыполнении условия <checkExpression>;
-
<commands> - команды макроса обработки;
-
<doExpression> - выполняемый JEXL скрипт, более гибкий аналог <commands>.
В <events> поддержаны следующие события:
-
statusChanging:<statusIds> - статус изменяется на одно на одно из значений, коды которых указаны через запятую в <statusIds>;
-
statusChanged:<statusIds> - статус изменился на одно из значений, коды которых указаны через запятую в <statusIds>;
-
created - процесс создан;
-
createdAsLink - процесс создан как привязанный к другому процессу;
-
createFinished - завершено создание процесса в мастере;
-
descriptionAdding - в описание процесса добавляется текст;
-
descriptionAdded - в описание процесса добавлен текст;
-
descriptionChanging - описание процесса изменяется целиком;
-
descriptionChanged - описание процесса изменилось целиком;
-
linkAdding - к процессу добавляется привязка;
-
linkAdded - к процессу добавлена привязка;
-
linkRemoving - удаляется привязка процесса;
-
linkRemoved - удалена привязка процесса;
-
messageAdded - в процесс поступило новое сообщение;
-
paramChanging:<paramIds> - изменяется параметр процесса, код которого указан через запятую в <paramIds>;
-
paramChanged:<paramIds> - изменился параметр процесса, код которого указан через запятую в <paramIds>;
-
executorsChanging - изменяются исполнители процесса;
-
executorsChanged - изменились исполнители процесса.
События *ing отличаются от *ed событий тем, что они гененрируются до момента записи в БД.
Правила просматриваются в порядке их номеров. Первое правило выдавшее сообщение прерывает просмотр и отменяет изменение связанное с процессом.
В <commands> указывается макрос обработки процесса, состоящий из команд, разделённых точкой с запятой. Все команды макроса выполняются последовательно и в рамках текущей транзакции. Ошибка в любой из команд прерывает текущую транзакцию, откатывая внесённые в БД изменения.
|
Более гибким и рекомендуемым способом выполнения команд является использование JEXL выражений с помощью doExpression. Обратите внимание на примеры. Значительная часть команд ядра может быть заменена вызовами функций из ru.bgcrm.dao.expression.ProcessChangeFunctions. Используйте сложные команды из перечня ниже, например emailNotifyExecutors, только если вы не найдёте аналогичной Java функции.
|