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

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

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 событий тем, что они гененрируются до момента записи в БД.

В 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

Создание привязанного к данному процессу процесса. <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.

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

Примеры