Может использоваться в простых типовых случаях, без необходимости написания динамического кода. Позволяет гибко ограничивать в конфигурации правила правки процессов и автоматически выполняемые с ними операции.

Реализуется одним или несколькими правилами в конфигурации типа процесса вида:

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> поддержаны следующие события:

Event Description event class

statusChanging:<statusIds>

Cтатус изменяется на одно на одно из значений, коды которых указаны через запятую в <statusIds>

ru.bgcrm.event.process.ProcessChangingEvent

descriptionAdding

В описание процесса добавляется текст.

ru.bgcrm.event.process.ProcessChangingEvent

descriptionChanging

Описание процесса изменяется целиком.

ru.bgcrm.event.process.ProcessChangingEvent

executorsChanging

Изменяются исполнители процесса.

ru.bgcrm.event.process.ProcessChangingEvent

linkAdding

К процессу добавляется привязка.

ru.bgcrm.event.link.LinkAddingEvent

linkRemoving

Удаляется привязка процесса.

ru.bgcrm.event.link.LinkRemovingEvent

paramChanging:<paramIds>

Изменяется параметр процесса, код которого указан через запятую в <paramIds>.

ru.bgcrm.event.ParamChangingEvent

statusChanged:<statusIds>

Cтатус изменился на одно из значений, коды которых указаны через запятую в <statusIds>

ru.bgcrm.event.process.ProcessChangedEvent

created

Process was created.

ru.bgcrm.event.process.ProcessChangedEvent

createFinished

Завершено создание процесса в мастере

ru.bgcrm.event.process.ProcessChangedEvent

createdAsLink

Процесс создан как привязанный к другому процессу.

ru.bgcrm.event.process.ProcessCreatedAsLinkEvent

removed

Process was removed.

ru.bgcrm.event.process.ProcessRemovedEvent

descriptionAdded

В описание процесса добавлен текст.

ru.bgcrm.event.process.ProcessChangedEvent

descriptionChanged

Описание процесса изменилось целиком.

ru.bgcrm.event.process.ProcessChangedEvent

executorsChanged

Изменились исполнители процесса.

ru.bgcrm.event.process.ProcessChangedEvent

linkAdded

К процессу добавлена привязка.

ru.bgcrm.event.link.LinkAddedEvent

linkRemoved

Удалена привязка процесса.

ru.bgcrm.event.link.LinkRemovedEvent

messageAdded

В процесс поступило новое сообщение.

ru.bgcrm.event.process.ProcessMessageAddedEvent

paramChanged:<paramIds>

Изменился параметр процесса, код которого указан через запятую в <paramIds>.

ru.bgcrm.event.ParamChangedEvent

События *ing отличаются от *ed событий тем, что они гененрируются до момента записи в БД.

В JEXL процессор передаётся типовой набор объектов для обработки процесса плюс:

Правила просматриваются в порядке их номеров. Первое правило выдавшее сообщение прерывает просмотр и отменяет изменение связанное с процессом.

В <commands> указывается макрос обработки процесса, состоящий из команд, разделённых точкой с запятой. Все команды макроса выполняются последовательно и в рамках текущей транзакции. Ошибка в любой из команд прерывает текущую транзакцию, откатывая внесённые в БД изменения.

Более гибким и рекомендуемым способом выполнения команд является использование JEXL выражений с помощью doExpression. Обратите внимание на примеры. Значительная часть команд ядра может быть заменена вызовами функций из ru.bgcrm.dao.expression.ProcessChangeFunctions. Используйте сложные команды из перечня ниже, например emailNotifyExecutors, только если вы не найдёте аналогичной Java функции.

Команды в ядре

emailNotifyExecutors:<paramId>:<subjectOrJexl>:<msgJexl>

Уведомить о изменении процесса исполнителей за исключением пользователя, инициировавшего событие, посредством EMail. Где:

  • <paramId> - код параметра пользователя с EMail, обязателен;

  • <subjectOrJexl> - начало темы письма (продолжается кодом процесса и первой строкой из описания) либо имя параметра конфигурации с JEXL выражением для генерации темы, необязателен;

  • <msgJexl> - имя параметра конфигурации с JEXL выражением для генерации тела письма, необязателен.

В контекст JEXL выражения передаются следующие объекты:

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

emailNotifyUsers:<paramId>:<userIds>:<subjectOrJexl>:<msgJexl>

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

  • <userIds> - коды пользователей через запятую, обязательный параметр.

Остальные параметры идентичны emailNotifyExecutors.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

newsNotifyExecutors:<subject> либо newsPopupNotifyExecutors:<subject>

Уведомить о изменение процесса исполнителей, за исключением пользователя, иницировавшего событие, посредством сообщения (простого или всплывающего) в новости.

  • <subject> - начало темы новости, если не указано - то "Изменился процесс".

Продолжение темы новости генерируется с помощью макроса описаний. Первым ищется описание с ключом newsNotifySubject, затем processCard. Если описание не найдено то добавляются наименование типа и код процесса.

addGroups:<groupIds>

Добавить в процесс разрешённые для типа процесса группы решения с ролью 0 "Выполнение", коды которых указанны через запятую в <groupIds>.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

clearGroups

Очистить список групп процесса.

addExecutors:<executorIds>

Добавить в процесс исполнителей, коды которых указаны через запятую в <executorIds>. Группа для привязки определяется путём пересечения множества текущих групп исполнителя с множеством групп, соотнесённых процессу.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

addExecutorsInGroups:<groupIds>:<executorIds>

Добавить исполнителей, коды которых указаны через запятую в <executorIds>. Исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в <groupIds> через запятую.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

setExecutorsInGroups:<groupIds>:<executorIds>

Установить в процесс исполнителей, коды которых указаны через запятую в <executorIds>. Исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в <groupIds> через запятую, существующие исполнители заменяются.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

setExecutorsInGroupsIfNot:<groupIds>:<executorIds>

Аналогично предыдущему, но исполнители устанавливаются, только если к группе-роли из перечня не приязан исполнитель.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

clearExecutors

Очистить список исполнителей процесса.

setStatus:<statusId>

Установить статус процесса, код которого указан в <statusId>.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

checkExecutorsInGroups:<groupIds>

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

refreshCurrentQueue

Перейти в текущую открытую очередь процессов и обновить её. Команда на браузер пользователя.

open

Открыть или обновить карточку обрабатываемого процесса. Команда на браузер пользователя.

close

Закрыть карточку обрабатываемого процесса. Команда на браузер пользователя.

decreasePriority:<count>

Понизить приоритет процесса на <count>.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

increasePriority:<count>

Повысить приоритет процесса на <count>.

Устарел, использовать ru.bgcrm.dao.expression.ProcessChangeFunctions.

setRelativeDateParam:<paramId>:<days>

Установить значение параметра типа "date" либо "datetime" с кодом <paramId> в значение на <days> больше текущей даты.

cnt=0
#
# срок - +10 дней
onProcessEvent.{@inc:cnt}.events=created
onProcessEvent.{@cnt}.commands=setRelativeDateParam:47:10

createProcessLink:<configId>

Создание привязанного к данному процессу процесса. <configId> - код правила создания связанного процесса.

Команды плагина BGBilling

Устарели, использовать JEXL скрипты по образцу.

bgbilling:getLinkedContractAddressParam:<billingId>:<billingParamId>:<crmParamId> -

Копировать из привязанного договора BGBilling адресный параметр в параметр процесса. <billingId> - идентификатор биллинга, <billingParamId> - числовой идентификатор адресного параметра в биллинге, <crmParamId> - числовой код параметра BGERP типа address. === bgbilling:getLinkedContractParam:<billingId>:<billingParamId>:<crmParamId> Копировать из привязанного договора BGBilling строковое представление параметра (как в таблице параметров) в текстовый параметр процесса. <billingId> - идентификатор биллинга, <billingParamId> - числовой идентификатор параметра в биллинге, <crmParamId> - числовой код параметра BGERP типа text. === bgbilling:linkedContractParamToDescription:<billingId>:<billingParamId>:<prefix> Копировать из привязанного договора BGBilling текстовое представление параметра (как в таблице параметров) в конец описания процесса. <billingId> - идентификатор биллинга, <billingParamId> - числовой идентификатор параметра в биллинге, <prefix> - каким префиксом сопроводить параметр, необязательно, если не указан - префиксом выступает имя параметра. === bgbilling:linkedContractParamToDescriptionBefore:<billingId>:<billingParamId>:<prefix> Идентично предыдущему, но строка с префиксом добавляется в начало описание процесса.

bgbilling:linkedContractCommentToDescription:<billingId>:<prefix>

Копировать комментарий привязанного договора биллинга в конец описания процесса. <billingId> - идентификатор биллинга, <prefix> - каким префиксом сопроводить комментарий, необязательно.

bgbilling:linkedContractCommentToDescriptionBefore:<billingId>:<prefix>

Идентично предыдущему, но строка добавляется в начало описания процесса.

bgbilling:linkedContractCommentToParam:<billingId>:<crmParamId>

Копировать комментарий привязанного договора биллинга в параметр процесса с типом text. <billingId> - идентификатор биллинга, <crmParamId> - код параметра процесса типа text.

В команды могут быть подставлены переменные из объединённой конфигурации пользователя.

Примеры