About

Процесс - сущность, позволяющая учитывать различные протекающие в организации процессы. Процесс обладает встроенными параметрами:

  • тип;

  • текущий статус и время его установки;

  • время начала;

  • время завершения;

  • исполнители и группы решения;

  • описание;

  • приоритет .

Остальные параметры назначаются с помощью системы параметров для разных типов процессов.

В большинстве ERP систем ближайшим родственным понятием процессу выступает понятие "Задача". Однако, с помощью системы связывания процессов между собой, возможна настройка полноценных бизнес-процессов с подчинёнными задачами.

Новый процесс можно создать в:

  • очереди процессов;

  • на вкладке "Процессы" объекта;

  • как привязанный;

  • при обработке сообщений.

Setup

Status

Правка статусов производится в оснастке Администрирование / Процессы / Статусы процессов. Статус определяет текущее состояние процесса. Позиция статуса определяет порядок его в списке статусов.

proc status

Кнопка Показать отображает типы процессов, в которых используется статус.

Type

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

type

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

type prop

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

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

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

  • код (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%

Где:

  • <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 процессор передаются следующие объекты для вызова функций:

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

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

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

Где:

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

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

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

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

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

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

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

Где:

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

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

    • card - просмотр карточки с открытием в буфере,

    • linked - просмотр карточки процесса, привязанного к другому процессу с открытием в правой области первого процесса;

  • <components> - через запятую компоненты левого блока, допустимые стандартные блоки: header, description, executors, links, params; or custom JSP filed prefixied by jsp:.

Example:

// PzdcDoc snippet of: 'Kernel Process Card type configuration', lines: 1 - 2

processCard.{@inc:cnt}.mode=card
processCard.{@cnt}.components=description,params,links,header,executors

How does the configured card look like.

card config

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

# * (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

Process Reference

Processe reference macros allows to generate dynamically a description text for a process. To define a reference add the following block to process type configuration.

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

Where:

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

  • <objectTypes> - areas, there the macros is applicable, see the possible values below;

  • <macros> - JEXL expression, passed objects see below.

Areas:

  • customer - Tab Processes in a customer;

  • processCard - title of process' card;

  • linkedProcessList - table with parent related processes;

  • linkProcessList - table with child related processes;

  • messagePossibleProcess - table with possible processes for a message;

  • open.processCard - process card in open interface.

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

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

Retrieving parameters may be quite expensive.

Here is a simple example from our Demo System, type configuration of process Kernel Process Reference.

// PzdcDoc snippet of: 'Process Type Config Sample', lines: 1 - 4

processReference.{@inc:cnt}.objectTypes=customer,processCard
processReference.{@cnt}.stringExpression=<<END
    return "Reference 1: " + processParam.getValue({@PARAM_LIST_ID});
END

How does it look in UI like.

title

Some more examples with different retrieved data:

processReference.{@inc:cnt}.objectTypes=customer
processReference.{@cnt}.stringExpression=u.toString(processParam.addressValues(90, 'fromStreet')) + " : " + processParam.getValue(238)
processReference.{@inc:cnt}.objectTypes=processCard
processReference.{@cnt}.stringExpression="Request: " + u.escapeXml(u.toString(processLink.linkTitles("customer"))) + "<br/>" + u.escapeXml(u.toString(processParam.addressValues(90, 'fromStreet'))) + "&nbsp;"

How you could notice, HTML markup can be used in expressions. It is also possible to separate some buffer shown text like that.

buffer

Here is the process configuration for that.

processReference.{@inc:cnt}.objectTypes=processCard
processReference.{@cnt}.stringExpression="<span class='title'>#" + process.getId() +  " " + process.getTypeTitle() + " " +  "</span><span>" + u.escapeXml(process.getDescription())  + "</span>"

Process relatinons are ordered.

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 - processes C is part of process A that can be closed only after C;

  • Depend - process C depends on process B and can be closed only ater closing B.

You can change change this default closing linked processes logic in type configuration.

# on process closing checking of being closed related child processes - 'down', or parents - 'up', 0 - do not check at all
process.close.check.processDepend=up
process.close.check.processMade=down

Such complex character of relations is hidden from the end-user, operating on Related Processes tab. The tab is shown by default for any process type, it can be however disabled using properties configuration.

# 0 - hide, 1 (default) - show on tab linked processes
show.tab.links.process=0

Once the tab is shown, any type of linked processes have to be shown in a separated sub-tab, so named Category.

For every category of linked processes add the following record in process type configuration.

process.link.category.<n>=<title>
# optional keys
process.link.category.<n>.link=<link>
process.link.category.<n>.link.type=<relationType>
process.link.category.<n>.process.types=<processTypes>
process.link.category.<n>.add=<add>
process.link.category.<n>.add.process.statuses=<addProcessStatuses>

Where:

  • <n> - unique record’s numeric ID;

  • <title> - meaningful title for the category of linked processes;

  • <link> - 1 (default) for child relations, or 0 for parent;

  • <relationType> - process relation type: processLink (default), processMade, processDepend;

  • <processTypes> - comma separted process type IDs of linked processes;

  • <add> - 1 for ability to add linked processes in the category;

  • <addProcessStatuses> - comma separated process statuses for filtering available for adding; the order of statuses is used for sorting them.

For every item in creating and linking process combo box has to be added a record in process type configuration.

processCreateLink.<n>.title=<title>
processCreateLink.<n>.processTypeId=<typeId>
processCreateLink.<n>.linkType=<linkType>
# optionally
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.checkErrorMessage=<expressionError>
# copy process parameters
#processCreateLink.<n>.copyParams=<copyRules>
# copy process links
#processCreateLink.<n>.copyLinks=<copyLinks>

Where:

  • <n> - unique numeric ID;

  • <title> - title for the combo;

  • <linkType> - process relation type: processLink, processMade, processDepend;

  • <typeId> - created process type ID;

  • <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> - comma separated parameter IDs to be copied in each newly created process, or mapping pairs <from_id>:<to_id> for copying between different parameters but with a same type;

  • <copyLinks> - copy links to a created process, 1 - copy all links, but also possible to limit them by type, e.g.: contract%, customer%.

To JEXL processor for <expression> are passed objects:

Only child related processes can be created in a this way.
Рекомендации к применению

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

Существующие методы организации данных о бизнес-процессах:

Процесс

Долгоживущая сущность, у неё есть параметры, исполнители, группы решения, статусы меняются. В перспективе в нём же будет учёт затраченного времени и оценка оставшегося. Запланированные даты. Процесс и его параметры постоянно изменяются.

Сообщения

Любой информационный обмен в рамках процесса. Параметров мало: тип, направление, адрес противоположной стороны. Входящие - исходящие звонки, письма, сообщения форума, HelpDesk а. Здесь же в дальнейшем будут сохраняться и встречи (как в классическом календаре Outlook). Это протокол обмена информацией, сообщения не изменяются после отправки.

Задача

Отложенное действие по процессу. Например, напомнить менеджеру сделать звонок. Или дублировать периодический процесс.

Связанный процесс

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

Разделять процессы следует в случае, если вложенные процессы:

  • Исполняются параллельно с другими дочерними либо с основным процессом. Если процесс просто последовательно меняет состояния - лучше добавить статусов. Исполняется несколькими исполнителями или группами - добавить групп решения либо ролей.

  • Исполняется множество на один родительский процесс. Подключения по разным адресам, например. В этом случае текущее состояние можно отобразить только множеством статусом.

Usage

Process Card

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

card

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

Строка с описанием процесса (по-умолчанию содержит код процесса и наименование его типа) может быть настроена в конфигурации. Эта же строка отображается в буфере закрытых объектов, позволяя вернуться на недавно открытый процесс.

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

Existance Operations

The link […​] left of process type calls a popup menu.

card existance operations

That allows the following operations:

  • Clone - the process is copied with all its parameter values;

  • Merge - the process is deleted, all its messages and description are moved to a merging target process;

  • Delete - the process is just deleted.

Группы решения и исполнители

Каждый процесс может выполняться одним или несколькими подразделениями (группами). При этом группа выступает в процессе в той или иной роли. По-умолчанию в системе определена одна роль с кодом 0 - "Выполнение" процесса. Список ролей может быть дополнен в конфигурации. Примерами ролей могут быть: "Инициация", "Продажа", "Согласование" и т.п. У каждой роли должен быть свой уникальный код.

На снимке ниже одна группа выполняет процесс в роли "Выполнение", другая "Инициация".

card groups

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

Executors Swap

eswap operation performs swapping executors placed with two different groups and roles. On the screen below Kernel Executors and Karl Marx will be exchanged.

executor swap

Отображение привязок в карточке процесса задаётся переменной в конфигурации типа процесса. К процессу могут быть привязаны различные объекты. Например: контрагенты, договоры.

link

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

object process

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

Данный способ, однако, вызывает значительную дополнительную нагрузку на БД при выводе списка и не позволяет гибко настраивать отображаемые столбцы. Вместо стандартного списка может быть отображена очередь процессов с фильтром по данному объекту. В конфигурации очереди могут быть определены столбцы и сортировки с явным значением value.

link process queue

Данная функция включается в конфигурации:

<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, the process description is Kernel Process Link.

The Related Processes tab shows all the processes, related to the current one. Counters in the tab title (2) show total counts of parent / child relations for the current process.

Normally all of those related processes have to be shown in categories tabs (read after about them).

Open / Close filter on the top applied to all the shown below processes, seprated on configured Categories tabs. The filters' value is also used when adding (button 1) exising processes inside a tab.

The last choosen filters' value is persisted for the current user.
tab

After pressing the 1 button, the Link existing process editor is opened.

add existing

There are suggested to be linked already existing processes, matching to the selected category and not related there yet. Prior to horizintal black line are shown processes opened in buffer. Needed processes can be quickly filtered out by description of ID, checked and linked by pressing OK button.

Is is not allowed to make cyclic relations with type Link or Made. On attempt to do that you get the Cyclic dependency error.

When clicking in a process ID within categories table, a separated process card would be opened. Clicking on any other place in a process row except ID opens a left area of the process card direct in the table place.

open in

For creating and linking processes there is a button placed right from the filter (3). Pressing it calls an editor with a drop-down list of preconfigured values.

create and link

The strikethrough item in the list mark a blocked item, the blocking reason is shown when you try to use it.