# Process Default Change ListenerS

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

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

    onProcessEvent.<n>.events=<events>
    onProcessEvent.<n>.eventsExclude=<eventsExclude>

    # if the class if defined, then the rest of keys are not used
    onProcessEvent.<n>.class=<className>

    # обязателен хотя бы один из двух
    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> - исключаемые из обработки правилом события через точку с запятой, если параметр не указывается - то никакие событие не исключаются;

- <className> - Custom class implementing org.bgerp.app.event.iface.EventListener and performing all the logic;

- <ifExpression> - JEXL выражение проверки условия при котором отрабатывают команды макроса;

- <checkExpression> - JEXL выражение проверки условия при невыполнении которого генерируется ошибка <checkErrorMessage>, используется только с checkErrorMessage;

- <checkErrorMessage> - текст ошибки, сообщаемой при невыполнении условия <checkExpression>;

- <doExpression> - выполняемый JEXL скрипт;

- <commands> - deprecated way, команды макроса обработки;

В <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

JEXL processor becomes standard context for process plus:

- event - the events' class, extends org.bgerp.event.base.UserEvent

## Commands (Deprecated)

| Более гибким и рекомендуемым способом выполнения команд является использование JEXL выражений с помощью doExpression. Обратите внимание на примеры. Значительная часть команд ядра может быть заменена вызовами функций из org.bgerp.dao.expression.ProcessChangeExpressionObject.

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

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

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

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

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

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

#### clearGroups

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

#### clearExecutors

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

#### setStatus:<statusId>

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

| Устарел, использовать org.bgerp.dao.expression.ProcessChangeExpressionObject.

#### refreshCurrentQueue

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

#### open

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

#### close

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

#### createProcessLink:<configId>

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

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

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

## Примеры

Примеры