5.5. Тип процесса - конфигурация

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

В конфигурации типа процесса может быть указано:

# код параметра - категории, который должен быть указан перед переводом процесса в конечный статус
categoryParamId=<param_code>
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
requireFillParamIdsBeforeStatusSet.<status_to_code>=<param_codes>
# при создании процесса занесение в исполнители создавшего пользователя
setExecutor=current
# скрытие в редакторе процесса смены исполнителей
hideExecutors=1
# скрытие в редакторе процесса смены приоритета
hidePrioprity=1
# скрытие в редакторе процесса просмотра сообщений
hideMessages=1
# скрытие в редакторе процесса кнопки полного изменения описания
hideDescriptionChange=1
# скрытие в редакторе процесса кнопки добавления в описание процесса
hideDescriptionAdd=1
# сокрытие (0) либо отображение 1 (на вкладке), 2 (в левой части карточки процесса) в процессе привязок
processShowLinks=1
# сокрытие (0) либо отображение 1 (на вкладке) сообщений, связанных с процессом
processShowMessages=1
# требования указания обязательного комментария при переводы в статусы
requireChangeCommentStatusIds=<status_ids>
# сокрытие параметров в том или ином статусе, одна или несколько записей вида
hideParamIdsInStatus.<status_code>=<param_codes>
# параметры, редактор для которых скрыт в данном типе процесса (заполняются программно)
readonlyParamIds=<param_codes>
# шаблон текста при добавлении в описание процесса текста кнопкой "Добавить"
descriptionAddPattern=\n[${time} ${user}]\n\t${text}
# JSP шаблон для отображения карточки процесса вместо стандартного /WEB-INF/jspf/user/process/process/process.jsp, выполняйте рекомендации
#processCardJsp=/WEB-INF/jspf/user/process/process/custom/process_jur/zayavka.jsp

Где:

<param_code> - код параметра процесса, который должен быть указан при его закрытии, при этом редактор открывается под переключением статуса процесса;
<status_to_code> - код статуса, в который переводится процесс;
<param_codes> - коды параметров процесса через запятую;
<status_ids> - коды статусов через запятую;
<status_code> - код текущего статуса процеса.

5.5.1. Ограничение количества исполнителей по группам

Одно или несколько правил вида:

executorRestriction.<n>.groupId=<groupId>
executorRestriction.<n>.maxCount=<maxCount>

Где:

<n> - порядковый числовой номер правила;
<groupId> - код группы пользователей;
<maxCount> - максимальное число исполнителей из данной группы на процессе.

Просматриваются все правила в порядке их номеров.

5.5.2. Настройка связки процессов между собой

Процесс может ссылаться на другой процесс следующими способами:

Ссылается - простая ссылка одного процесса на другой;
Порождён - указание, что ссылаемый процесс создан из данного процесса;
Зависит - процесс не может быть закрыт пока не закрыты все процессы на которые он ссылается данным способом.

Параметры в конфигурации типа процесса:

processShowProcessLinks=1 - отображение в карточке процесса вкладки со связями процесса с другими процессами;
processCreateLinkModeSelect=1 - привязка к процессу произвольных открытых процессов (цифра 3 на снимке далее).

Рассмотрим отображаемые на снимке экрана области В таблице 1 отображаются процессы, которые ссылаются на текущий процесс. В таблице 2 - те процессы, на которые ссылается текущий процесс.

Замечание

Кнопки удаления связей должны быть включены специальной опцией в конфигурации действия "Удаление привязки".

Выпадающий список 3 - позволяет выбрать метод отношейний для привязки к текущему другого процесса, открытого на вкладке.

Выпадающий список 4 - позволяет создать процесс и привязать к данному процессу. Содержимое списка определяется записями в конфигурации типа процесса вида:

processCreateLink.<n>.title=<title>
processCreateLink.<n>.processTypeId=<typeId>
processCreateLink.<n>.linkType=<linkType>
# необязательные параметры
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.copyParams=<copyRules>
# копирование привязок
#processCreateLink.<n>.copyLinks=1

Где:

<n> - порядковый номер записи;
<title> - наименование для списка;
<linkType> - тип связи: "processLink" - ссылается, "processMade" - порождён, "processDepend" - зависит;
<typeId> - код типа создаваемого процесса;
<expression> - JEXL выражение, позволяющее показывать пункт списка в зависимости от условий;
<copyRules> - через запятую коды копирующихся с текущего на создаваемый параметров, либо пары <from>:<to> - кодов однотипных параметров с какого на какой необходимо копировать.

В JEXL процессор передаются объекты:

processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры процесса.

Пример конфигурации. Создаётся ссылаемый процесс с кодом типа 9244, запись отображается в списке только если значение параметра с кодом 227 равно 1.

processShowProcessLinks=1
processCreateLink.1.title=Авария
processCreateLink.1.processTypeId=9244
# processLink - ссылается, processMade - порождён
processCreateLink.1.linkType=processLink
#processCreateLink.1.checkExpression=processParam: getParamValue(227) == 1
#processCreateLink.1.copyParams=48,46,150,151
processCreateLink.1.copyLinks=1

5.5.3. Создание процесса с привязанными объектами

Разрешает создание процесса во вкладке Процессы объекта.

Переменная в конфигурации типа процесса:

create.in.objectTypes=<типы объектов через запятую>
create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой
# открывать (1) либо не открывать (0) вкладку с созданным привязанным процессом
create.in.<тип объекта>.openCreated=1

Копирование параметров поддерживается только для объектов, использующих стандартную систему параметров системы.

Типы объектов ядра:

customer - контрагент.

Типы объектов плагинов описаны в документации плагинов.

Пример. Возможность создания процесса с привязкой контрагента, копированием параметра с кодами 1 и 5 в контрагента в параметры процесса с кодами 3 и 6 соответственно:

create.in.objectTypes=customer
create.in.copyParams=1:3;5:6

5.5.4. Описание процесса

Макрос описаний процесса позволяет сгенерировать текст для заголовка вкладки процесса или для перечня процессов.

Для генерации описаний в конфигурацию типа процесса добавляются записи вида:

processReference.<n>.objectTypes=<objectTypes>
processReference.<n>.stringExpression=<macros>

Где:

<n> - порядковый номер записи;
<objectTypes> - области, где используется данный макрос через запятую, перечень областей см. далее;
<macros> - JEXL выражение, передаваемые объекты см. далее.

Перечень областей:

customer - вкладка Процессы контрагента;
processCard - заголовок вкладки процесса;
linkedProcessList - список процессов к которым привязан данный процесс;
linkProcessList - список процессов, привязанных к данному.

В JEXL процессор передаются объекты:

process - объект класса ru.bgcrm.model.process.Process - процесс;
processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры процесса.
processLink - объект класса ru.bgcrm.dao.expression.ProcessLinkFunction для работы с привязками процесса.

Кроме того доступны переменные устанавливаемые в ru.bgcrm.servlet.filter.SetRequestParamsFilter.

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

processReference.1.objectTypes=customer
processReference.1.stringExpression=u.toString( processParam.addressValues( 90, 'fromStreet' ) ) + " : " + u.toString( processParam.listValueTitles( 238 ) )
processReference.2.objectTypes=processCard
processReference.2.stringExpression="Запрос док. ОИО: " + u.escapeXml( u.toString( processLink:linkTitles( "customer" ) ) ) + "<br/>" + u.escapeXml( u.toString( processParam:addressValues( 90, 'fromStreet' ) )  ) + "&nbsp;"

Как выглядит в интерфейсе.

5.5.5. Простая обработка изменения процессов

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

Одно или несколько правил вида:

onProcessEvent.<n>.commands=<commands>
onProcessEvent.<n>.events=<events>
onProcessEvent.<n>.eventsExclude=<eventsExclude>
# необязательные параметры
onProcessEvent.<n>.ifExpression=<ifExpression>
onProcessEvent.<n>.checkExpression=<expression>
onProcessEvent.<n>.checkErrorMessage=<message>

Где:

<n> - подядковый числовой номер правила;
<events> - обрабатываемые правилом события через точку с запятой, если параметр не указывается - то обрабатываются все события связанные с данным типом процесса;
<eventsExclude> - исключаемые из обработки правилом события через точку с запятой, если параметр не указывается - то никакие событие не исключаются;
<ifExpression> - JEXL выражение проверки условия при котором отрабатывают команды макроса;
<expression> - JEXL выражение проверки условия при невыполнении которого генерируется ошибка <expression>, используется только с <expression>;
<message> - текст ошибки, сообщаемой при невыполнении условия <expression>;
<commands> - команды макроса обработки.

В <events> поддержаны следующие события:

statusChanging:<statusIds> - статус изменяется на одно на одно из значений, коды которых указаны через запятую в <statusIds>;
statusChanged:<statusIds>- статус изменился на одно из значений, коды которых указаны через запятую в <statusIds>;
closed - процесс закрыт;
created - процесс создан;
createdAsLink - процесс создан как привязанный к другому процессу;
descriptionAdding - в описание процесса добавляется текст;
descriptionAdded - в описание процесса добавлен текст;
descriptionChanging - описание процесса изменяется целиком;
descriptionChanged - описание процесса изменилось целиком;
linkAdding - к процессу добавляется привязка;
linkAdded - к процессу добавлена привязка;
linkRemoving - удаляется привязка процесса;
linkRemoved - удалена привязка процесса;
messageAdded - в процесс поступило новое сообщение;
paramChanging:<paramIds> - изменяется параметр процесса, код которого указан через запятую в <paramIds>;
paramChanged:<paramIds> - изменился параметр процесса, код которого указан через запятую в <paramIds>.

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

user - объект класса ru.bgcrm.model.user.User - текущий пользователь;
userParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры текущего пользователя;
process - объект класс ru.bgcrm.model.process.Process - изменяющийся процесс;
processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры изменяющегося процесса.

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

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

Команды поддержанные макросе:

addGroups:<groupIds> - добавить в процесс разрешённые для типа процесса группы решения с ролью 0 "Выполнение", коды которых указанны через запятую в <groupIds>;
clearGroups - очистить список групп процесса;
addExecutors:<executorIds> - добавить в процесс исполнителей, коды которых указаны через запятую в <executorIds>; группа для привязки определяется путём пересечения множества текущих групп исполнителя с множеством групп, соотнесённых процессу;
addExecutorsInGroups:<groupIds>:<executorIds> - добавить исполнителей, коды которых указаны через запятую в <executorIds>; исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в <groupIds> через запятую;
setExecutorsInGroups:<groupIds>:<executorIds> - установить в процесс исполнителей, коды которых указаны через запятую в <executorIds>; исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в <groupIds> через запятую, существующие исполнители заменяются;
setExecutorsInGroupsIfNot:<groupIds>:<executorIds> - аналогично предыдущему, но исполнители устанавливаются, только если к группе-роли из перечня не приязан исполнитель;
clearExecutors - очистить список исполнителей процесса;
setStatus:<statusId> - установить статус процесса, код которого указан в <statusId>;
checkExecutorsInGroups:<groupIds> - проверить наличие исполнителей с группами, коды которых указаны через запятую в <groupIds>;
refreshCurrentQueue - перейти в текущую открытую очередь процессов и обновить её;
open - открыть или обновить карточку обрабатываемого процесса;
close - закрыть карточку обрабатываемого процесса;
decreasePriority:<count> - понизить приоритет процесса на <count>;
increasePriority:<count> - повысить приоритет процесса на <count>.

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

Пример. Разршение на правку процесса в различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса.

changeControl.1.checkExpression=process:getStatusId() !~ [9, 13, 36,39] or 8 =~ user:getGroupIds()
changeControl.1.checkErrorMessage=В этом статусе разрешена правка только сотрудникам КС
changeControl.2.checkExpression=process:getStatusId() != 9 or user:getId()  =~ process:getExecutorIds() or 33 =~ user:getPermsetIds()
changeControl.2.checkErrorMessage=В этом статусе разрешена правка только исполнителем процесса либо администратором КС
changeControl.3.checkExpression=empty process:getCloseTime()
changeControl.3.checkErrorMessage=Запрещена правка закрытого процесса

Пример. Добавление текущего пользователя в исполнители и установка в статус с кодом 40, если процесс создан как привязанный к другому процессу.

onProcessEvent.1.events=createdAsLink
onProcessEvent.1.commands=addExecutors:{@ctxUserId};setStatus:40

Пример. Изменение статуса процесса на 3 при получении в него нового сообщения.

onProcessEvent.1.events=messageAdded
onProcessEvent.1.ifExpression=process:getStatusId() != 3
onProcessEvent.1.commands=setStatus:3