Далее описываются параметры конфигурации типа процесса, поддержанные ядром. Параметры, поддерживаемые различными плагинами, описываются в разделах документации соответствующих плагинов.
В конфигурации типа процесса может быть указано:
# код параметра - категории, который должен быть указан перед переводом процесса в конечный статус 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
Где:
- код параметра процесса, который должен быть указан при его закрытии, при этом редактор открывается под переключением статуса процесса; |
- код статуса, в который переводится процесс; |
- коды параметров процесса через запятую; |
- коды статусов через запятую; |
- код текущего статуса процеса. |
Одно или несколько правил вида:
executorRestriction.<n>.groupId=<groupId> executorRestriction.<n>.maxCount=<maxCount>
Где:
- порядковый числовой номер правила; |
- код группы пользователей; |
- максимальное число исполнителей из данной группы на процессе. |
Просматриваются все правила в порядке их номеров.
Процесс может ссылаться на другой процесс следующими способами:
- простая ссылка одного процесса на другой; |
- указание, что ссылаемый процесс создан из данного процесса; |
- процесс не может быть закрыт пока не закрыты все процессы на которые он ссылается данным способом. |
Параметры в конфигурации типа процесса:
- отображение в карточке процесса вкладки со связями процесса с другими процессами; |
- привязка к процессу произвольных открытых процессов (цифра 3 на снимке далее). |
Рассмотрим отображаемые на снимке экрана области В таблице
отображаются процессы, которые ссылаются на текущий процесс. В таблице - те процессы, на которые ссылается текущий процесс.Кнопки удаления связей должны быть включены специальной опцией в конфигурации действия "Удаление привязки".
Выпадающий список
- позволяет выбрать метод отношейний для привязки к текущему другого процесса, открытого на вкладке.Выпадающий список
- позволяет создать процесс и привязать к данному процессу. Содержимое списка определяется записями в конфигурации типа процесса вида:processCreateLink.<n>.title=<title> processCreateLink.<n>.processTypeId=<typeId> processCreateLink.<n>.linkType=<linkType> # необязательные параметры #processCreateLink.<n>.checkExpression=<expression> #processCreateLink.<n>.copyParams=<copyRules> # копирование привязок #processCreateLink.<n>.copyLinks=1
Где:
- порядковый номер записи; |
- наименование для списка; |
- тип связи: "processLink" - ссылается, "processMade" - порождён, "processDepend" - зависит; |
- код типа создаваемого процесса; |
JEXL выражение, позволяющее показывать пункт списка в зависимости от условий; | -
- через запятую коды копирующихся с текущего на создаваемый параметров, либо пары <from>:<to> - кодов однотипных параметров с какого на какой необходимо копировать. |
В JEXL процессор передаются объекты:
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
Разрешает создание процесса во вкладке
объекта.Переменная в конфигурации типа процесса:
create.in.objectTypes=<типы объектов через запятую> create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой # открывать (1) либо не открывать (0) вкладку с созданным привязанным процессом create.in.<тип объекта>.openCreated=1
Копирование параметров поддерживается только для объектов, использующих стандартную систему параметров системы.
Типы объектов ядра:
- контрагент. |
Типы объектов плагинов описаны в документации плагинов.
Пример. Возможность создания процесса с привязкой контрагента, копированием параметра с кодами 1 и 5 в контрагента в параметры процесса с кодами 3 и 6 соответственно:
create.in.objectTypes=customer create.in.copyParams=1:3;5:6
Макрос описаний процесса позволяет сгенерировать текст для заголовка вкладки процесса или для перечня процессов.
Для генерации описаний в конфигурацию типа процесса добавляются записи вида:
processReference.<n>.objectTypes=<objectTypes> processReference.<n>.stringExpression=<macros>
Где:
- порядковый номер записи; |
- области, где используется данный макрос через запятую, перечень областей см. далее; |
JEXL выражение, передаваемые объекты см. далее. | -
Перечень областей:
- вкладка контрагента; |
- заголовок вкладки процесса; |
- список процессов к которым привязан данный процесс; |
- список процессов, привязанных к данному. |
В JEXL процессор передаются объекты:
ru.bgcrm.model.process.Process - процесс; | - объект класса
ru.bgcrm.dao.expression.ParamValueFunction - параметры процесса. | - объект класса
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' ) ) ) + " "
Как выглядит в интерфейсе.
Может использоваться в типовых случаях, без необходимости написания динамического кода. Позволяет гибко ограничивать в конфигурации правила правки процессов и автоматически выполняемые с ними операции.
Одно или несколько правил вида:
onProcessEvent.<n>.commands=<commands> onProcessEvent.<n>.events=<events> onProcessEvent.<n>.eventsExclude=<eventsExclude> # необязательные параметры onProcessEvent.<n>.ifExpression=<ifExpression> onProcessEvent.<n>.checkExpression=<expression> onProcessEvent.<n>.checkErrorMessage=<message>
Где:
- подядковый числовой номер правила; |
- обрабатываемые правилом события через точку с запятой, если параметр не указывается - то обрабатываются все события связанные с данным типом процесса; |
- исключаемые из обработки правилом события через точку с запятой, если параметр не указывается - то никакие событие не исключаются; |
JEXL выражение проверки условия при котором отрабатывают команды макроса; | -
JEXL выражение проверки условия при невыполнении которого генерируется ошибка , используется только с ; | -
- текст ошибки, сообщаемой при невыполнении условия ; |
- команды макроса обработки. |
В
поддержаны следующие события:- статус изменяется на одно на одно из значений, коды которых указаны через запятую в ; |
- статус изменился на одно из значений, коды которых указаны через запятую в ; |
- процесс закрыт; |
- процесс создан; |
- процесс создан как привязанный к другому процессу; |
- в описание процесса добавляется текст; |
- в описание процесса добавлен текст; |
- описание процесса изменяется целиком; |
- описание процесса изменилось целиком; |
- к процессу добавляется привязка; |
- к процессу добавлена привязка; |
- удаляется привязка процесса; |
- удалена привязка процесса; |
- в процесс поступило новое сообщение; |
- изменяется параметр процесса, код которого указан через запятую в ; |
- изменился параметр процесса, код которого указан через запятую в . |
В JEXL процессор передаются следующие объекты для вызова функций:
ru.bgcrm.model.user.User - текущий пользователь; | - объект класса
ru.bgcrm.dao.expression.ParamValueFunction - параметры текущего пользователя; | - объект класса
ru.bgcrm.model.process.Process - изменяющийся процесс; | - объект класс
ru.bgcrm.dao.expression.ParamValueFunction - параметры изменяющегося процесса. | - объект класса
Правила просматриваются в порядке их номеров. Первое правило выдавшее сообщение прерывает просмотр и отменяет изменение связанное с процессом.
В
указывается макрос обработки процесса, состоящий из команд, разделённых точкой с запятой. Все команды макроса выполняются последовательно и в рамках текущей транзакции. Ошибка в любой из команд прерывает текущую транзакцию, откатывая внесённые в БД изменения.Команды поддержанные макросе:
- добавить в процесс разрешённые для типа процесса группы решения с ролью 0 "Выполнение", коды которых указанны через запятую в ; |
- очистить список групп процесса; |
- добавить в процесс исполнителей, коды которых указаны через запятую в ; группа для привязки определяется путём пересечения множества текущих групп исполнителя с множеством групп, соотнесённых процессу; |
- добавить исполнителей, коды которых указаны через запятую в ; исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в через запятую; |
- установить в процесс исполнителей, коды которых указаны через запятую в ; исполнители привязываются к одной группе процесса, код которой попадает в перечень указанный в через запятую, существующие исполнители заменяются; |
- аналогично предыдущему, но исполнители устанавливаются, только если к группе-роли из перечня не приязан исполнитель; |
- очистить список исполнителей процесса; |
- установить статус процесса, код которого указан в ; |
- проверить наличие исполнителей с группами, коды которых указаны через запятую в ; |
- перейти в текущую открытую очередь процессов и обновить её; |
- открыть или обновить карточку обрабатываемого процесса; |
- закрыть карточку обрабатываемого процесса; |
- понизить приоритет процесса на ; |
- повысить приоритет процесса на . |
В команды могут быть подставлены паременные из объединённой конфигурации пользователя.
Пример. Разршение на правку процесса в различных статусах различным группам, исполнителю либо администратору и запрет правки закрытого процесса.
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