About

The process allows to manage different business of organization, it has the following properties:

  • type;

  • description;

  • creation and finish time;

  • priority ;

Depending on the type, process has various: * statuses; * parameters; * execution groups and executors.

Unlike task in other systems, our process can play role of project, parent- and sub-task, building complex hierarchies of working activity.

Setup

Status

Status represents the current state of process' lifecycle. Alongside with title a status has numeric position for ordering it in the whole list. The magnifying glass button in the right column of the table allows you to see which process types use the status.

statuses

Type

Process type is the main process property, defining all others. Types are organized in a tree-like structure, each type there can have multiple subtypes. Using Cut and Paste buttons processes may be moved over their hierarchy.

types
Avoid creating a large number of process types that inherit from a common ancestor and differ only by name. The type serves as the primary classification criterion for process queues; having too many such types significantly reduces filtering efficiency. Instead, use a list parameter to distinguish between such processes.

In the type editor defined title and either inherited or independent properties.

type editor

The properties contains all the process type characteristics, beginning with Allowed, Creation and Closure statuses. After those defined ordered type parameters and configuration, described later.

type prop

In the Transition Matrix limited possible status changes, by default any transition is allowed.

type prop matrix

Groups

In Groups tab specified execution groups added when a process was created and the ones could be set later. On the screen below process created with Administrators group and there can be added Plugin Group Plan later. If no groups are defined, each of them can be used for processes with this type.

type prop groups

The Allowed groups, if defined, also influence by whom a process of the type can be created. A process type has been shown in the type selection tree, only for users whose current groups overlap with those allowed for the process.

Configuration

Main configurations can be included in a process type configuration as libraries.

The process type configuration keys supported by the kernel are as follows.

# hide the full description editing link in the process editor
hideDescriptionChange=1
# 0 - hide, 1 (default) - show the Messages tab
#show.tab.messages=1
# show messages of child linked processes in the process as well
#show.messages.link.process=processMade, processDepend
# 0 - hide, 1 (default) - show the Related Processes tab
#show.tab.links=1
# require a mandatory comment when changing status
requireChangeCommentStatusIds=<STATUS_IDS>
# comma-separated execution group IDs that can be selected when creating a process
onCreateSelectGroup=<GROUP_IDS>
# text template used when appending text to the process description via the "add" link
descriptionAddPattern=(${description}\n)[(${time}) (${user})]\t(${text})
# custom time format for the appended text
descriptionAddPattern.timePattern=dd.MM HH:mm

# JSP template for displaying the process card instead of the standard /WEB-INF/jspf/user/process/process/process.jsp
#processCardJsp=/WEB-INF/jspf/user/process/process/custom/process_jur/zayavka.jsp
# HTML style for the left and right blocks of the process card; by default they are split evenly
#style.processCardLeftBlock=min-width: 500px;
#style.processCardRightBlock=width: 100%

Where:

  • <STATUS_IDS> - comma-separated status IDs;

  • <GROUP_IDS> - comma-separated group IDs.

Title
You can see (process Kernel Process Generated Title) the feature operation in Demo System.

By default for every process type title has generated like #<PROCESS_ID> <PROCESS_DESCRIPTION>, but that may be changed by placing in the type configuration:

title.expression=<JEXL>

Where <JEXL> contains JEXL expression with Standard Process Context.

Example with title generation out of process ID, type title and parameter with ID = 3 value.

title.expression=p.getId() + " " + p.getTypeTitle() + " " + pp.val(3)

Another one, with title including process link customer’s title.

title.expression="Subscription " + p.getId() + " " + u.maskNull(pl.linkTitle("customer"))
Description
You can see (process Kernel Process Generated Description) the feature operation in Demo System.

Similar to process title may be generated process description by placing in the type configuration:

description.expression=<JEXL>

Where <JEXL> contains JEXL expression with Standard Process Context.

Example with title generation out of process ID, type title and parameter with ID = 3 value.

description.expression=p.getId() + " " + p.getTypeTitle() + " " + pp.val(3)
Params Behavior
# require parameter values to be filled before changing status; one or more records of the form
requireFillParamIdsBeforeStatusSet.<STATUS_TO_ID>=<PARAM_IDS>
# hide parameters in a given status; one or more records of the form
hideParamIdsInStatus.<STATUS_ID>=<PARAM_IDS>
# parameters whose editor is hidden for this process type (filled programmatically)
readonlyParamIds=<PARAM_IDS>

Where:

  • <STATUS_TO_ID> - the target status ID for the process transition;

  • <PARAM_IDS> - comma-separated process parameter IDs;

  • <STATUS_ID> - the current process status ID.

To configure parameter visibility based on a flexible conditional check, one or more rules can be defined:

# show the parameter only if the JEXL expression evaluates to true
showParam.<PARAM_ID>.checkExpression=<JEXL_EXPR>

Where:

Card Left Area
You can see (process Kernel Process Card) the feature operation in Demo System.

To configure the display of the left area of the process card, one or more definitions of the following form are added to the type configuration:

processCard.{@inc:cnt}.mode=<MODES>
processCard.{@cnt}.components=<COMPONENTS>

Where:

  • <MODES> - a comma-separated list of process card display modes, allowed values:

    • card - view the card opened in a buffer,

    • linked - view the card of a process linked to another process, opened in the right area of the first process;

  • <COMPONENTS> - a comma-separated list of components for the left block; allowed standard blocks are: header, description, executors, links, params; or custom JSP files prefixed with 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.

configured
Executors Limit

One or more rules, evaluated in order:

executorRestriction.{@inc:cnt}.groupId=<GROUP_ID>
executorRestriction.{@cnt}.maxCount=<MAX_COUNT>

Where:

  • <GROUP_ID> – the user group ID;

  • <MAX_COUNT> – the maximum number of executors from this group for the process.

Creation
You can see (process Kernel Process Create In) the feature operation in Demo System.

To restricting areas where the process type can be created, add:

create.in.areas=<AREAS>

Where <AREAS> is comma-separated list of areas, where process can be created:

  • message - message processing;

  • queue - process queues;

  • customer - Processes tab for a customer.

Plugin areas:

Or you can use * for any area. Empty key value denies process creation for all areas, but doesn’t influence on Create and Link configurations.

Additional configuration:

# copy parameters
#create.in.copyParams=semicolon separated pairs <PARAM_FROM_ID>:<PARAM_TO_ID>

# make the process type in the tree by default
#create.in.<AREA>.selected=1

Example of allowance process creation as customer-linked, with copying customer parameters 1 and 5 to process params 3 and 6 respectively.

create.in.areas=customer
create.in.copyParams=1:3;5:6
Beside of the configuration, process type groups are also taken on account for creation process types allowed for the current user.

Process relations 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 after 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.{@inc:cnt}=<TITLE>
# optional
process.link.category.{@cnt}.link=<LINK>
process.link.category.{@cnt}.link.type=<RELATION_TYPE>
process.link.category.{@cnt}.process.types=<PROCESS_TYPES>
process.link.category.{@cnt}.add=<ADD>
process.link.category.{@cnt}.add.process.statuses=<ADD_PROCESS_STATUSES>

Where:

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

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

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

  • <PROCESS_TYPES> - comma-separated process type IDs of linked processes;

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

  • <ADD_PROCESS_STATUSES> - 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.{@inc:cnt}.title=<TITLE>
processCreateLink.{@cnt}.processTypeId=<TYPE_ID>
processCreateLink.{@cnt}.linkType=<LINK_TYPE>
# optional
processCreateLink.{@cnt}.checkExpression=<EXPRESSION>
processCreateLink.{@cnt}.checkErrorMessage=<EXPRESSION_ERROR>
# copy process parameters
processCreateLink.{@cnt}.copyParams=<COPY_RULES>
# copy process links
processCreateLink.{@cnt}.copyLinks=<COPY_LINKS>

Where:

  • <TITLE> - title for the combo;

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

  • <TYPE_ID> - created process type ID;

  • <EXPRESSION> - JEXL expression, when returns false - the combo-box item is displayed strikethrough;

  • <EXPRESSION_ERROR> - error message shown on attempt to use a disabled item;

  • <COPY_RULES> - 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, or * to copy all parameters existing both in initial process and in the newly created;

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

Related processes are recommended when other existing entities do not allow all information to be accounted for.

Process

A long-lived entity that includes configurable parameters, description, executors, groups, statuses; everything changes constantly.

Message

Any information exchange within a process. There are few parameters: type, direction, and the address of the opposite party. Incoming and outgoing calls, letters, forum posts, HelpDesk messages, and later meetings, as in a classic calendar. This is the history of information exchange; messages do not change after sending.

Task

A deferred action for a process. For example, remind a manager to make a call, or duplicate a recurring process.

Related Process

A new process created, linked to the current one. Its executors are completely different and not tied to the main process. The statuses are different too.

Child processes should be created sparingly, otherwise they can become confusing.

You need them if your business process is divided into tasks assigned to different executors, which are then executed in parallel and therefore have different states.

Usage

Process card shows in UI process properties and parameters. In the top left area there is a configurable process title, click to it causes reload of the card. Clicking to the cross right of the title closes the card. When a process wasn’t closed, but you moved away it to a different UI place, the process title will stay in buffer that allows you quickly going back to it.

process

The left area contains configurable blocks with process properties and links for editing them, as well as process parameters and links.

The right area displays messages, related processes, and various tabs provided by plugins.

Existence Operations

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

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

Execution Groups and Executors

Each process can be performed by one or several groups. Any group participates in the process in a particular role, the list of which is configurable. Examples of roles: "Initiation", "Sales", "Approval", and so on. In the screenshot below, one group performs the process in the "Execution" role, while another is in the "Follow" role. One or more executors can be assigned to each execution group for the process.

groups
The default role with ID=0 is not explicitly written here.

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
The display of links in the process can be configured in the process type configuration.

Various objects can be linked to a process. The core system allows linking customers; the BGBilling plugin allows linking contracts.

link

An object to be linked to a process should be available in the UI buffer or can be found in-place in the several ways.

link add

A customer can be linked with several roles. By default, only the "Customer" role is available in the system; this can be changed in the configuration.

Processes related to linked objects are displayed on the Processes tab.

object process

By default, the table displays several required process fields, but it can be replaced with a specially configured process queue. The + button above the table allows you to create linked processes of configured types.

You can see (queue Kernel Process Link) the feature operation in Demo System.

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