Типы процессов

Общие сведения

Правка выполняется в оснастке Администрирование  Процессы  Типы процессов.

Типы процессов представляют из себя дерево.

process 2

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

process 3

В свойствах типа указываются следующие параметры:

  • разрешённые статусы, их порядок в редакторе и возможные переходы между ними;

  • допустимые параметры процесса, их порядок;

  • код (ID) начального и конечных статусов;

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

  • начальные группы решения, устанавливаемые в процесс с указанием их ролей (не обязательно) ;

  • допустимые для установки в процесс группы решения с указанием их ролей;

  • конфигурация (не обязательно).

Не следует без необходимости порождать большое количество типов процессов, наследованных от общего предка и различающихся только наименованием. Тип - главный классифицирующий признак для очереди процессов и в случае их большого количества эффективность фильтрации сильно падает. Пользуйтесь списковым параметром для разделения таких процессов.

Архивация типов процессов

Для типов процессов появилась возможность "переноса" типа процесса в архив для исключения его использования.

Как заархивировать тип процесса

Выставить флаг в редакторе типа процесса - Да\Нет.

У архивированного типа процесса в общем списке типов процессов появится приписка [В АРХИВЕ] и его название окрасится серым цветом.

Становится невозможным создать процесс из КА, договора, суба, через api или как связанный с другого типа процесса. При попытке его создания будет брошена ошибка BGMessageException "Данный тип процесса (id) не используется!"

Логика архивации

  • при архивации типа процесса все его дочерние типы так же становятся архивными

  • при разархивации типа процесса его дочерние типы НЕ разархивируются

  • невозможно разархивировать тип процесса если его родитель архивирован (ошибка вида: "Нельзя разархивировать тип, наследуемый от архивного.")

  • невозможно создать новый тип процесса как дочерний если родительский в архиве (ошибка вида: "Нельзя наследоваться от архивированного процесса.")

Конфигурация

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

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

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

Конфигурация
# отображать наименование процесса
#showEmptyTitle=1
#скрытие в редакторе процесса ссылки полной правки описания
hideDescriptionChange=1
# сокрытие (0) либо отображение 1 (на вкладке) сообщений, связанных с процессом
processShowMessages=1
# сокрытие (0) либо отображение 1 (на вкладке) !!!link:#1-7-4[привязок] процесса
processShowLinks=1
# требования указания обязательного комментария при переводы в статусы
requireChangeCommentStatusIds= <status_ids>
# коды групп исполнителей через запятую, которые можно указать при создании процесса
onCreateSelectGroup= <groupIds>
# шаблон текста при добавлении в описание процесса текста кнопкой "Добавить"
descriptionAddPattern=(${description}\n)[(${time}) (${user})]\t(${text})
# произвольный шаблон времени для добавляемого текста
descriptionAddPattern.timePattern=dd.MM HH:mm
#
# JSP шаблон для отображения карточки процесса вместо стандартного /WEB-INF/jspf/user/process/process/process.jsp #processCardJsp=/WEB-INF/jspf/user/process/process/custom/process_jur/zayavka.jsp
# HTML стиль левого и правого блока карточки процесса, по-умолчанию они делятся поровну
#style.processCardLeftBlock=min-width: 500px;
#style.processCardRightBlock=width: 100%
#
# параметры для отображения в карточке !!!link:#1-7-6[связанных процессов]
#processShowProcessLinks=1
#processCreateLinkModeSelect=1
#

Где:

  • <status_ids> - коды статусов через запятую;

  • <groupIds> - коды групп через запятую.

Настройки поведения параметров процесса

 # при ошибке правки параметров - обновление таблицы с параметрами, необходимо в случае, если при этом другие параметры изменяются динамическим кодом
onErrorChangeParamsReload=1
# код параметра - категории, который должен быть указан перед переводом процесса в конечный статус
categoryParamId= <param_code>
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
requireFillParamIdsBeforeStatusSet.= <status_to_code>=<param_codes>
# сокрытие параметров в том или ином статусе, одна или несколько записей вида
hideParamIdsInStatus.<status_code>=<param_codes>
# параметры, редактор для которых скрыт в данном типе процесса (заполняются программно)
readonlyParamIds=<param_codes>

Где:

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

  • <status_to_code> - код статуса, в который переводится процесс;

  • <param_codes> - коды параметров процесса через запятую;

  • <status_code> - код текущего статуса процесса.

Для настройки отображения параметра в зависимости от гибкой проверки условия одно или несколько правил:

# отображение параметра, только если выполняется JEXL выражение showParam..checkExpression=<JEXL_EXPR>

Где:

  • <paramId> - код параметра;

  • <JEXL_EXPR> - JEXL выражение.

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

  • user - объект класса ru.bgcrm.model.user.User - текущий пользователь;

  • process - объект класс ru.bgcrm.model.process.Process - изменяющийся процесс;

  • processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры изменяющегося процесса.

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

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

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

Где:

  • <n> - порядковый числовой номер правила;

  • <groupId> - код группы пользователей;

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

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

Настройка левой области карточки процесса

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

processCard.<id>.mode=<modes>
processCard.<id>.components=<components>

Где:

  • <id> - порядковый номер правила;

  • <modes> - список через запятую режимов отображения карточки процесса, допустимые значения: card - просмотр карточки с открытием в буфере, linked - просмотр карточки процесса, привязанного к другому процессу с открытием в правой области первого процесса;

  • <components> - через запятую компоненты левого блока, либо произвольные JSP файлы, позволяющие кастомизировать карту процесса; допустимые стандартные блоки: header, status,description, executors, links, params.

На снимке ниже подписаны соответствующие блоки левого блока карточки процесса.

process 4

Пример:

processCard.1.mode=card
processCard.1.components=header; jsp:/WEB-INF/jspf/user/process/process/custom/process_stp/contract_process_count.jsp;status;description;executors;params

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

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

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

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

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

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

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, 'fr
omStreet' ) ) + " : " + 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;"

Пример вывода исполнителей процесса в описании. Выводится в связанных процессах контрагентов и договорах биллинга RB.

processReference.1.objectTypes=customer,contract:RB
processReference.1.stringExpression=<<END
 result = process.getDescription();
 result += "<br><b>" + u.getObjectTitles(u.getObjectList(ctxUserList, process.getExecutorIds())) + "</b>";
 return result;
 END
process 5
process 6

В описании возможно использование HTML разметки, с выделением части описания жирным шрифтом для отображения в буфере. Например:

processReference.2.objectTypes=processCard
processReference.2.stringExpression="<span class='title'>#" + process.getId() + "
" + process.getTypeTitle() + " " + "</span><span>" + u.escapeXml( process.
getDescription() ) + "</span>"
process 7

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

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

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

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 - изменились исполнители процесса.

  • processOpen - открытие карточки процесса

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

В 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 - параметры изменяющегося процесса;

  • processLink - объект класса ru.bgcrm.dao.expression.ProcessLinkFunction - привязки изменяющегося процесса;

  • paramRepo - объект класса ru.bgcrm.dao.ParamValueDAO - DAO для изменения параметров без событий;

  • context - объект класса ru.bgcrm.context.core.ServerContext - контекст для получения сервисов;

  • processService - объект класса с имплементацией ru.bgcrm.model.process.service.ProcessService - сервис для изменения процесса с генерацией событий;

  • parameterService - объект класса с имплементацией ru.bgcrm.model.process.service.ru.bgcrm.model.param.service.ParameterService - сервис для изменения параметров с генерацией событий;

  • paramValue<id параметра> - значение параметра;

  • param<id параметра> - текстовое представление значения параметра;

  • conSet - объект класса ru.bgcrm.util.sql.ConnectionSet - соединения к БД;

  • form - объект класса ru.bgcrm.struts.form.DynActionForm - данные по запросу к серверу;

  • event - объект события, расширяющий класс ru.bgcrm.event.UserEvent;

  • объект класса ru.bgcrm.dao.expression.ProcessChangeFunctions передаётся как контекст функций поумолчанию, т.е. все его функции можно вызывать непосредственно в скрипте.

Остальные объекты:

  • ctxSetup - глобальная конфигурация;

  • ctxCustomerGroupMap - Map с группами контрагентов;

  • ctxCustomerGroupList - List с группами контрагентов;

  • ctxUser - текущий пользователь;

  • ctxUserList - List с пользователями системы;

  • ctxUserMap - List с пользователями системы;

  • ctxUserGroupRoleList - List с ролями групп в процессах;

  • ctxUserGroupRoleMap - Map с ролями групп в процессах;

  • ctxUserGroupList - List с группами пользователей;

  • ctxUserGroupMap - Map с группами пользователей;

  • ctxUserGroupFullTitledList - List с группами пользователей, наименования групп включают полный путь;

  • ctxUserGroupFullTitledMap - Map с группами пользователей, наименования групп включают полный путь;

  • ctxProcessTypeMap - Map с типами процессов;

  • ctxProcessStatusList - List со статусами процессов;

  • ctxProcessStatusMap - Map со статусами процессов;

  • ctxParameterMap - Map с параметрами;

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

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

Команды поддерживаемые макросом ядра

Команды ядра

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

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

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

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

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

  • process - объект класса ru.bgcrm.model.process.Process - процесс;

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

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

  • lastChangeLogItem - объект класса ru.bgcrm.model.EntityLogItem с последним изменением процесса, может быть null;

  • message - объект класса ru.bgcrm.model.message.Message передаётся на события, связанные с добавлением нового сообщения в процесс, в иных случаях - null.

Пример конфигурации:

subjTempl="Изменился процесс #".concat(process.getId().toString())
msgTempl="Изменился процесс,в котором вы числитесь исполнителем.".concat(NEW_LINE2)
msgTempl+=.concat( "Описание:").concat(NEW_LINE).concat(process.getDescription()
msgTempl+=.concat(message== null ?"" :NEW_LINE2.concat( "Сообщение:").concat(NEW_LINE).concat(message.getText()) )
msgTempl+=.concat(NEW_LINE2).concat("Открытьпроцесс:http://127.0.0.1:9089/user/process#").concat( process.getId().toString())
msgTempl+=.concat(lastChangeLogItem== null ?"" :NEW_LINE2.concat( "Изменение:").concat(NEW_LINE).concat(lastChangeLogItem.getTex()) )onProcessEvent.1.events=messageAdded;executorsChangedonProcesEvent.1.commands=setStatus:10 onProcessEvent.1.commands=emailNotify Executors:79:subjTempl:msgTempl

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

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

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

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

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

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

addGroups:<groupIds>

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

clearGroups

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

addExecutors:<executorIds>

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

aaddExecutorsInGroups: <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>.

setRelativeDateParam: <paramId>:<days>

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

Пример конфигурации:

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

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

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

createProcessLinkForSame: <configId>

Создание процесса, привязанного к тому же процессу, что и данный процесс.

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

Пример конфигурации:

#создание процесса "изготовление"
onProcessEvent.{@inc:cnt}.events=statusChanged:3
onProcessEvent.{@cnt}.commands=createProcessLinkForSame:26

telegramNotifyExecutors:<telegramParamId>:<parseMode>:<text>

Оповещение в Telegram исполнителей процесса.

  • <telegramParamId> - это идентификатор параметра "telegramId" в профиле пользователя;

  • <parseMode> - формат разметки (Markdown или HTML)

Пример конфигурации:

telegramNotifyExecutors:1799:Markdown:message

telegramNotifyUsers:<telegramParamId>:<parseMode>:<text>:<users>

Оповещение в Telegram определенных пользователей.

  • <telegramParamId> - это идентификатор параметра "telegramId" в профиле пользователя;

  • <parseMode> - формат разметки (Markdown или HTML);

  • <users> - id пользователей через запятую.

telegramNotifyProcessGroups:<telegramParamId>:<parseMode>:<text>:<groupsRole>

Оповещение в Telegram группы процесса.

  • <telegramParamId> - это идентификатор параметра "telegramId" в профиле пользователя;

  • <parseMode> - формат разметки (Markdown или HTML);

  • <groupsRole> - id роли групп.

telegramNotifyCreateProcessUser:<telegramParamId>:<parseMode>:<textMessage>

Оповещение в Telegram создателя процесса.

  • <telegramParamId> - это идентификатор параметра "telegramId" в профиле пользователя;

*<parseMode> - формат разметки (Markdown или HTML).

Команды плагина Abilling:

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

Копировать из привязанного договора ABilling адресный параметр в параметр процесса.

  • <billingId> - идентификатор биллинга;

  • <billingParamId> - числовой идентификатор адресного параметра в биллинге;

  • <crmParamId> - числовой код параметра ERP типа address.

bgbilling:getLinkedContractParam:<billingId>:<billingParamId>:<crmParamId>

Копировать из привязанного договора ABilling строковое представление параметра (как в таблице параметров) в текстовый параметр процесса.

  • <billingId> - идентификатор биллинга;

  • <billingParamId> - числовой идентификатор параметра в биллинге;

  • <crmParamId> - числовой код параметра ERP типа text.

bgbilling:linkedContractParamToDescription:<billingId>:<billingParamId>:<prefix>

Копировать из привязанного договора ABilling текстовое представление параметра (как в таблице параметров) в конец описания процесса.

  • <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.

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

Предпочтительным способом выполнения действий является использование JEXL выражений с помощью doExpression.

Шаблон конфигурации

Для включения раскомментируйте необходимые строчки
# ВСЕ ПРАВКИ СОГЛАСОВЫВАТЬ С ЛИДЕРОМ
# Лидер: Иванов Иван Иванович
# Солидер: Петров Петр Петрович

# СОЗДАНИЕ ПРОЦЕССА
# коды групп исполнителей через запятую, которые можно указать при создании процесса
#onCreateSelectGroup=<groupIds>
# возможность создать процесса с объектов
# типы объектов: customer, contract:<billing_id>, bgbilling-commonContract
#create.in.objectTypes=<типы объектов через запятую>
#create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой
## открывать (1) либо не открывать (0) вкладку с созданным привязанным процессом
#create.in.<тип объекта>.openCreated=1

# ГЕНЕРАЦИЯ ТЕКСТА ДЛЯ ЗАГОЛОВКА ПРОЦЕССА
# (http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/process_type.html#processes_description)
# objectTypes: customer - вкладка Процессы контрагента; processCard - заголовок вкладки процесса; linkedProcessList - список процессов к которым привязан данный процесс; linkProcessList - список процессов, привязанных к данному.
#processReference.<n>.objectTypes=<objectTypes>
#processReference.<n>.stringExpression=<macros>

# ПОВЕДЕНИЕ СТАТУСОВ ПРОЦЕССА
# требования указания обязательного комментария при переводы в статусы
#requireChangeCommentStatusIds=<status_ids>

# ПОВЕДЕНИЕ ОПИСАНИЯ ПРОЦЕССА
# отображать наименование процесса
#showEmptyTitle=1
# скрытие в редакторе процесса ссылки полной правки описания
#hideDescriptionChange=1
# шаблон текста при добавлении в описание процесса текста кнопкой "Добавить"
#descriptionAddPattern=(${description}\n)[(${time}) (${user})]\t(${text})
# произвольный шаблон времени для добавляемого текста
#descriptionAddPattern.timePattern=dd.MM HH:mm
# поддержка markdown
#description.markdown.enable=1
## кастомизация (необязательные параметры)
#description.markdown.h1.size=1.5em
#description.markdown.h2.size=1.25em
#description.markdown.h3.size=1em
#description.markdown.h4.size=.875em
#description.markdown.h5.size=.85em
#description.markdown.h6.size=.7em
#description.markdown.font.size=14px

# ПОВЕДЕНИЕ ГРУПП ПРОЦЕССА
# ограничение количества исполнителей по группам
#executorRestriction.<n>.groupId=<groupId>
#executorRestriction.<n>.maxCount=<maxCount>

# ПОВЕДЕНИЕ ПАРАМЕТРОВ ПРОЦЕССА
# при ошибке правки параметров - обновление таблицы с параметрами, необходимо в случае, если при этом другие параметры изменяются динамическим кодом
#onErrorChangeParamsReload=1
# код параметра - категории, который должен быть указан перед переводом процесса в конечный статус
#categoryParamId=<param_id>
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
#requireFillParamIdsBeforeStatusSet.<status_to_id>=<param_ids>
# сокрытие параметров в том или ином статусе, одна или несколько записей вида
#hideParamIdsInStatus.<status_id>=<param_ids>
# параметры, редактор для которых скрыт в данном типе процесса (заполняются программно)
#readonlyParamIds=<param_codes>
# отображение параметра, только если выполняется JEXL выражение
#showParam.<param_id>.checkExpression=<JEXL_EXPR>

# ВКЛАДКИ ПРОЦЕССА
# Настройка очередности вкладок процесса (поддерживается для ядровых вкладок)
#tabsOrder=showGantt,showNotes,<ключ вкладки>
# ОТОБРАЖЕНИЕ СВЯЗАННЫХ ПРОЦЕССОВ
#processShowProcessLinks=1
# Отображение "Процесс привязан к"
#processShowProcessLinks.Linked=1
# Фильтрация связных процессов
#processShowProcessLinks.ChildTypeIds=123,124
# Фильтрация родительских процессов
#processShowProcessLinks.ParentTypeIds=123,124
## возможность привязывать процесс из буфера
#processCreateLinkModeSelect=1
## настройки доступных для создания процессов
#processCreateLink.<n>.title=<title>
#processCreateLink.<n>.processTypeId=<typeId>
#processCreateLink.<n>.linkType=<linkType>
## необязательные параметры
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.copyParams=<copyRules>
## копирование привязок
## <copyLinks> - копирование привязок на процесс, 1 - копировать все привязки, возможно ограничение по маске типов объектов, например: contract%, customer%.
#processCreateLink.<n>.copyLinks=<copyLinks>
# Кастомные вкладки привязанных процессов
#customTab.process_links.X.title=<название вкладки>
#customTab.process_links.X.typeIds=YYYY,ZZZZ
#
# отображение привязок процесса
#processShowLinks=1
# отображение сообщений, связанных с процессом (http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/message.html)
#processShowMessages=1
# вкладка "Документы" (http://avantys.group/docs/avantys_erp/3/basic_documentation/plugin/document.html)
#document:processShowDocuments=1
#document:processCreateDocumentsAllowedTemplates=<коды шаблонов документов, доступных для генерации через запятую>
# вкладка "Чек-листы" (http://avantys.group/docs/avantys_erp/3/basic_documentation/plugin/checklist.html)
#checkList.enable=1
# вкладка с timeline (Gantt) связанных процессов (http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/process_card.html#_%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0_%D1%81_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BE%D0%B9_%D0%B3%D0%B0%D0%BD%D1%82%D0%B0)
#showGantt=1
## переопределение названия вкладки
#showGantt.tabName=Gantt
## id параметра процесса в котором хранится начало
#showGantt.startParamId=3163
## id параметра процесса в котором хранится конец
#showGantt.endParamId=3164
## id параметра процесса в котором хранится прогресс
## showGantt.progressParamId=3164
## id параметра процесса в котором хранится зависимость
#showGantt.dependenciesParamId=3164
# Вкладка процесса с Заметками (http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/process_card.html#_%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0_%D1%81_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BE%D0%B9_%D0%B3%D0%B0%D0%BD%D1%82%D0%B0)
#showNotes=1
## ID типа сообщения (см. документацию "Сообщения")
#showNotes.messageTypeId=6
# Вкладка с примечаниями привязанного договора
#bgbilling:processShowLinkedContractsInfo=memo

# МАСТЕР СОЗДАНИЯ ПРОЦЕССА
# типы шагов: http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/master_process.html#_%D1%82%D0%B8%D0%BF%D1%8B_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2
#step=1
#{@inc:step}
#createWizard.createStep.{@step}.title=<title>
#createWizard.createStep.{@step}.class=<class>
# условие отображения шага (необязательно)
#createWizard.createStep.{@step}.checkExpression=<expression>

# МАСТЕР РЕДАКТИРОВАНИЯ ПРОЦЕССА
# типы шагов такие же
#{@inc:step}
#createWizard.step.{@step}.title=<title>
#createWizard.step.{@step}.class=<class>
# условие отображения шага (необязательно)
#createWizard.step.{@step}.checkExpression=<expression>

# ПРОСТАЯ ОБРАБОТКА ИЗМЕНЕНИЙ ПРОЦЕССОВ (СОБЫТИЙ)
# документация: http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/process_type.html#processing_changes
# !!! рекомендуется использовать "Конструктор автоматизаций": http://avantys.group/docs/avantys_erp/3/basic_documentation/kernel/processes/process_type_automation.html
#cnt=0
#{@inc:cnt}
#onProcessEvent.{@cnt}.events=<events>
#onProcessEvent.{@cnt}.eventsExclude=<eventsExclude>
# обязателен хотя бы один из двух
#onProcessEvent.{@cnt}.doExpression=<doExpression>
#onProcessEvent.{@cnt}.commands=<commands>
# необязательные параметры
#onProcessEvent.{@cnt}.ifExpression=<ifExpression>
#onProcessEvent.{@cnt}.checkExpression=<checkExpression>
#onProcessEvent.{@cnt}.checkErrorMessage=<checkErrorMessage>

# КАСТОМИЗАЦИЯ ОТОБРАЖЕНИЯ КАРТОЧКИ ПРОЦЕССА
# JSP шаблон для отображения карточки процесса вместо стандартного /WEB-INF/jspf/user/process/process/process.jsp
#processCardJsp=/WEB-INF/jspf/user/process/process/custom/process_jur/zayavka.jsp
# HTML стиль левого и правого блока карточки процесса, по-умолчанию они делятся поровну
#style.processCardLeftBlock=min-width: 500px;
#style.processCardRightBlock=width: 100%
# Настройка левой области карточки процесса
# <modes> - список через запятую режимов отображения карточки процесса, допустимые значения: card - просмотр карточки с открытием в буфере, linked - просмотр карточки процесса, привязанного к другому процессу с открытием в правой области первого процесса;
# <components> - через запятую компоненты левого блока, либо произвольные JSP файлы, позволяющие кастомизировать карту процесса; допустимые стандартные блоки: header, status,description, executors, links, params.
#processCard.<n>.mode=<modes>
#processCard.<n>.components=<components>