-
Kernel
-
Plugins
-
Решения
-
CHANGES
Kernel
Plugins
Решения
CHANGES
Процесс - сущность, позволяющая учитывать различные протекающие в организации процессы. Процесс обладает встроенными параметрами:
тип;
текущий статус и время его установки;
время начала;
время завершения;
исполнители и группы решения;
описание;
Остальные параметры назначаются с помощью системы параметров для разных типов процессов.
В большинстве ERP систем ближайшим родственным понятием процессу выступает понятие "Задача". Однако, с помощью системы связывания процессов между собой, возможна настройка полноценных бизнес-процессов с подчинёнными задачами.
Новый процесс можно создать в:
очереди процессов;
на вкладке "Процессы" объекта;
как привязанный;
при обработке сообщений.
Правка статусов производится в оснастке Администрирование / Процессы / Статусы процессов. Статус определяет текущее состояние процесса. Позиция статуса определяет порядок его в списке статусов.
Кнопка Показать отображает типы процессов, в которых используется статус.
Правка выполняется в оснастке Администрирование / Процессы / Типы процессов. Типы процессов организованы в древовидный список.
При редактирование типа может быть указано его название и признак наследования либо не наследования свойств от родительского типа.
В свойствах типа указываются следующие параметры:
разрешённые статусы, их порядок в редакторе и возможные переходы между ними;
допустимые параметры процесса, их порядок;
код (ID) начального и конечных статусов;
динамический класс, обрабатывающий события изменения процесса (не обязательно);
начальные группы решения, устанавливаемые в процесс с указанием их ролей (не обязательно) ;
допустимые для установки в процесс группы решения с указанием их ролей;
конфигурация (не обязательно).
Не следует без необходимости порождать большое количество типов процессов, наследованных от общего предка и различающихся только наименованием. Тип - главный классифицирующий признак для очереди процессов и в случае их большого количества эффективность фильтрации сильно падает. Пользуйтесь списковым параметром для разделения таких процессов. |
В конфигурацию типа процесса могут быть включены блоки основной конфигурации.
Параметры конфигурации типа процесса, поддержанные ядром.
# скрытие в редакторе процесса ссылки полной правки описания
hideDescriptionChange=1
# 0 - hide, 1 (default) - show on tab process messages
#show.tab.messages=1
# отображение в процессе сообщений также и дочерних привязанных процессов
#show.messages.link.process=processMade, processDepend
# empty (default) or 0 - hide, 1 - show on tab process links
#show.tab.links=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%
# parameters related to linked processes
# 0 - hide, 1 (default) - show on tab linked processes
#show.tab.links.process=0
# при закрытии процесса проверка закрытости связанных дочерних процессов - down, либо родительских - up, 0 - не проверять никаких
process.close.check.processDepend=up
process.close.check.processMade=down
Где:
<status_ids> - коды статусов через запятую;
<groupIds> - коды групп через запятую.
# при ошибке правки параметров - обновление таблицы с параметрами, необходимо в случае, если при этом другие параметры изменяются динамическим кодом
onErrorChangeParamsReload=1
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
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.<paramId>.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.
На снимке ниже подписаны соответствующие блоки левого блока карточки процесса.
Пример:
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
Переменная в конфигурации типа процесса:
# * (default) - allow creation as linked in any object
#create.in.objectTypes=<типы объектов через запятую>
create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой
#
# открывать (1), не открывать (0), открывать мастером (wizard) вкладку с созданным привязанным процессом
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 выражение, передаваемые объекты см. далее.
Перечень областей:
В JEXL процессор передаются объекты:
process - объект класса ru.bgcrm.model.process.Process - процесс;
processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction - параметры процесса.
processLink - объект класса ru.bgcrm.dao.expression.ProcessLinkFunction - для работы с привязками процесса.
Кроме того доступны переменные устанавливаемые в ru.bgcrm.servlet.filter.SetRequestParamsFilter.
Retrieving parameters may be quite expensive. |
Пример конфигурации для генерации описания списке процессов контрагента из адреса и перечня услуг и на вкладке процесса из наименования контрагента и адреса:
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'))) + " "
Пример вывода исполнителей процесса в описании. Выводится в связанных процессах контрагентов и договорах биллинга bitel.
processReference.1.objectTypes=customer,contract:bitel
processReference.1.stringExpression=<<END
result = process.getDescription();
result += "<br><b>" + u.getObjectTitles(u.getObjectList(ctxUserList, process.getExecutorIds())) + "</b>";
return result;
END
Как выглядит в интерфейсе.
В описании возможно использование HTML разметки, с выделением части описания жирным шрифтом для отображения в буфере. Например:
processReference.1.objectTypes=processCard
processReference.1.stringExpression="<span class='title'>#" + process.getId() + " " + process.getTypeTitle() + " " + "</span><span>" + u.escapeXml(process.getDescription()) + "</span>"
При закрытии в буфер, данный процесс будет выглядеть следующим образом:
Карточка процесса открывается в буфере объектов и позволяет редактировать свойства уже созданного процесса.
В левой области расположены блоки редактирования свойства процесса и ссылки для их редактирования, настроенные для типа процесса параметры. Вид левого блока можно настроить в конфигурации типа процесса.
Строка с описанием процесса (по-умолчанию содержит код процесса и наименование его типа) может быть настроена в конфигурации. Эта же строка отображается в буфере закрытых объектов, позволяя вернуться на недавно открытый процесс.
В правой области отображаются связанные с процессом данные, например связанные процессы, либо различные расширения, предоставляемые плагинами.
Ссылка [X] слева от типа процесса вызывает меню с операциями Удаление и Слияние. Обе операции уничтожают текущий процесс, вторая предварительно переносит все сообщения и описание из него в целевой.
Каждый процесс может выполняться одним или несколькими подразделениями (группами). При этом группа выступает в процессе в той или иной роли. По-умолчанию в системе определена одна роль с кодом 0 - "Выполнение" процесса. Список ролей может быть дополнен в конфигурации. Примерами ролей могут быть: "Инициация", "Продажа", "Согласование" и т.п. У каждой роли должен быть свой уникальный код.
На снимке ниже одна группа выполняет процесс в роли "Выполнение", другая "Инициация".
Для каждой группы выполнения процесса могут быть установлены исполнители один или несколько.
Отображение привязок в карточке процесса задаётся переменной в конфигурации типа процесса. К процессу могут быть привязаны различные объекты. Например: контрагенты, договоры.
Привязываемый к процессу объект должен бть доступен в буфере интерфейса. Контрагент может быть привязан с несколькими ролями. По-умолчанию в системе доступна лишь роль "Контрагент", это изменяется в конфигурации.
У привязанных объектов процессы к ним относящиеся отображаются на вкладке Процессы.
По-умолчанию отображаются несколько обязательных полей процессов, возможна настройка описания в конфигурации типа для области customer.
Данный способ, однако, вызывает значительную дополнительную нагрузку на БД при выводе списка и не позволяет гибко настраивать отображаемые столбцы. Вместо стандартного списка может быть отображена очередь процессов с фильтром по данному объекту. В конфигурации очереди могут быть определены столбцы и сортировки с явным значением value.
Данная функция включается в конфигурации:
<objectType>.processes.queue=<queueId>
Где:
<objectType> - тип привязанного объекта, например customer или contract:<billingId>;
<queueId> - код очереди процессов.
Например:
customer.processes.queue=12
contract:bitel.processes.queue=11
С помощью настройки в конфигурации типа процесса возможно разрешение создания процессов определённого типа прямо из данной вкладки.
You can see the feature enabled and sample configurations in Demo System, process description Kernel Process Link. |
The feature can be configured process type properties configuration.
Связи между процессами носят всегда направленный характер.
To distinguish those, we name sometimes a Parent process as Linked and a Child as Link.
Relations might have three types.
Where:
Link - simple reference from one process to another, no additional logic has been added;
Made - процессы B и C является частями процесса A, который может быть закрыт только после закрытия B и C;
Depend - процесс C зависит от процесса B и может быть закрыт только после закрытия B.
На скриншоте ниже в верхней таблице указаны процессы, к которым привязан данный (родительские для него), в нижней - привязанные к данному процессу (дочерние). Добавление привязок производится только в родительском процессе.
Рассмотрим отображаемые на снимке экрана области В таблице 1 отображаются процессы, которые ссылаются на текущий процесс. В таблице 2 - те процессы, на которые ссылается текущий процесс. Краткое описание, выводящееся в таблице привязанных процессов, вид левого блока карточки процесса возможно настроить в конфигурации типа.
Карточка привязанного процесса может быть открыта прямо на вкладке привязок кликом по строке таблицы. При этом открывается только левая часть карточки процесса с основными свойствами.
Clicking on the add link opens adding link editor.
Выпадающий список 3 - позволяет выбрать метод отношейний для привязки к текущему другого процесса, открытого в буфере.
After the relation type choice is taken the table with available processes is shown.
On the top area presented processed, opened in buffer. Below those selected so-called available processed, configured in process type using the following blocks.
<linkDirection>.available.{@inc:cnt}.link.types=<linkTypes>
<linkDirection>.available.{@cnt}.filter.process.types=<processTypes>
<linkDirection>.available.{@cnt}.filter.process.open=<openOrClose>
<linkDirection>.available.{@cnt}.filter.process.statuses=<statuses>
Where:
<linkDirection> - link for child links, linked for parent ones;
<linkTypes> - optional comma separated list of allowed relation types: processMade, processDepend, processLink;
<processTypes> - optional comma separated list with allowed process IDs;
<openOrClose> - optional 1 or 0 for selecting only open or closed processes;
<statuses> - optional comma separated list of allowed process status IDs.
Example for available parent and child processes:
linked.available.{@inc:cnt}.link.types=processDepend
linked.available.{@cnt}.filter.process.types=17
linked.available.{@cnt}.filter.process.open=1
linked.available.{@cnt}.filter.process.statuses=2,10
link.available.{@inc:cnt}.link.types=processMade,processLink
link.available.{@cnt}.filter.process.types=19
There are may be many such rules for link and linked available processes. Any of them will be selected sequentially.
Не допускаются циклические привязки типов Link и Made, при попытке добавления такой система возвращает ошибку: "Циклическая зависимость". |
Выпадающий список 4 - позволяет создать child процесс и привязать к данному процессу. Содержимое списка определяется записями в конфигурации типа процесса вида:
processCreateLink.<n>.title=<title>
processCreateLink.<n>.processTypeId=<typeId>
processCreateLink.<n>.linkType=<linkType>
# необязательные параметры
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.checkErrorMessage=<expressionError>
# copy process parameters
#processCreateLink.<n>.copyParams=<copyRules>
# copy process links
#processCreateLink.<n>.copyLinks=<copyLinks>
Где:
<n> - порядковый номер записи;
<title> - наименование для списка;
<linkType> - тип связи: processLink - ссылается, processMade - порождён, processDepend - зависит;
<typeId> - код типа создаваемого процесса;
<expression> - JEXL expression, when returns false - the combo-box item is displayed strikethrough;
<exressionError> - error message shown on attempt to use a disabled item;
<copyRules> - через запятую коды копирующихся с текущего на создаваемый параметров, либо пары <from>:<to> - кодов однотипных параметров с какого на какой необходимо копировать;
<copyLinks> - копирование привязок на процесс, 1 - копировать все привязки, возможно ограничение по маске типов объектов, например: contract%, customer%.
В JEXL процессор передаются объекты:
processParam - объект класса ru.bgcrm.dao.expression.ParamValueFunction, параметры процесса.
Пример конфигурации. Создаётся ссылаемый процесс с кодом типа 9244, запись отображается в списке только если значение параметра с кодом 227 равно 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
Использование связанных процессов рекомендуется в случае, когда существующие иные разделения не позволяют учитывать всю информацию.
Существующие методы организации данных о бизнес-процессах:
Долгоживущая сущность, у неё есть параметры, исполнители, группы решения, статусы меняются. В перспективе в нём же будет учёт затраченного времени и оценка оставшегося. Запланированные даты. Процесс и его параметры постоянно изменяются.
Любой информационный обмен в рамках процесса. Параметров мало: тип, направление, адрес противоположной стороны. Входящие - исходящие звонки, письма, сообщения форума, HelpDesk а. Здесь же в дальнейшем будут сохраняться и встречи (как в классическом календаре Outlook). Это протокол обмена информацией, сообщения не изменяются после отправки.
Отложенное действие по процессу. Например, напомнить менеджеру сделать звонок. Или дублировать периодический процесс.
В рамках текущего процесса порождается новый. Исполнители у него совершенно другие и не связаны с основным процессом. Статусы тоже. В основном процессе должна отображаться лишь краткая сводка о текущем статусе дочернего процесса. Порождать дочерние процессы следует экономно, иначе можно запутаться.
Разделять процессы следует в случае, если вложенные процессы:
Исполняются параллельно с другими дочерними либо с основным процессом. Если процесс просто последовательно меняет состояния - лучше добавить статусов. Исполняется несколькими исполнителями или группами - добавить групп решения либо ролей.
Исполняется множество на один родительский процесс. Подключения по разным адресам, например. В этом случае текущее состояние можно отобразить только множеством статусом.