2017/10/31

This time I'd like to present support for Sub Cases. It actually provides very powerful concept as it gives option to compose advanced cases that consists of other cases. That way a large and complex case can be split into multiple layers of abstraction (and even multiple case projects). Similar as process can be split into multiple sub processes.

Let's take a look at what case is - or to be more precise, a case definition. Case definition is set of activities that might happen while the case instance is active. It is completely dynamic and thus what's in the definition is not the only activities that might be invoked in case instance. Dynamic activities can also be included on runtime (on already active case instance).

Case instance, is a single instance of case definition and thus should encapsulate given business context. All case instance data is stored in case file which is then accessible to all process instances that might participate in the given case instance. Each case instance is completely isolated from other and same applies for case file. Only owning case instance can access case file.

So with that short recap of case terminology let's take a look at sub cases. Sub case is another case definition that is invoked from within another case instance (or even regular process instance). It has all the capabilities of regular case instance:

has dedicated case file

isolated from any other case instance

its own set of case roles

its own case prefix

etc

Sub case activity is available in the process designer, in category Cases as shown in the below screenshot

Sub case supports following set of input parameters that allow to properly configure it and start it:

CaseDefinitionId - mandatory case definition id that should be started

DeploymentId - optional deployment id (container id in context of kie server) that indicates where the case definition (that should be started) belongs to

Independent - optional indicator that tells the engine if the case instance is independent and thus main case instance will not wait for its completion - defaults to false

Data_XXX - optional data mapping from this case instance/process to sub case, where XXX is the name of the data in sub case this mapping should target. Can be given as many times as needed

UserRole_XXX - optional user to case role mapping. this case instance role names can be referenced here - meaning an owner of main case can be mapped to an owner of the sub case that way whoever was assigned to main case will be automatically assigned to sub case, where XXX is role name and value is the user role assignment

GroupRole_XXX - optional group to case role mapping. this case instance role names can be referenced here - meaning a participants of main case can be mapped to participants of the sub case that way whatever group was assigned to main case will be automatically assigned to sub case, where XXX is role name and value is the group role assignment

DataAccess_XXX - optional data access restrictions where XXX is the name of data item and the value is access restrictions.

Regardless of the settings of the Independent flag, there will always be output variable available named:

CaseId - this is the case instance id of the sub cases after it was started.

In addition to that, current snapshot of case file data will also be given. And thus can be mapped to main case data. They will be named exactly the same as in sub case instance's case file. As presented in above screen shot, sub case file item named name is mapped upon completion to main case instance case file item named name.

You can take a look at following screencast to see it in action

Sub case support also applies to regular processes. That allows users to start a case from within a process instance. This can be seen in the next screen cast

2017/10/27

In the upcoming 7.5 release, users will finally see more information about the available REST endpoints of KIE Server. The runtime documentation has been completely rewritten and is now based on Swagger. It replaces previous docs and thus is available at exact same location

You might need to adjust the host, port and context path depending on your system setup.

So what's new in this documentation?

finally it actually documents the endpoints and not only list them

presents only enabled KIE server extensions' endpoints

is built as KIE Server extension so it can be disabled, e.g. production deployments

provides direct possibility to try given endpoint out

shows all possible parameters and they expected values

gives curl like examples if needed to try it out from command line

Personally I think that the most important features are:

possibility to directly try it out

shows only endpoints that are active at given server

Second feature is very useful as it does not make unnecessary noise when some of the extensions are disabled. For instance when KIE Server is used as decision service (BRM and DMN extensions only) then there is no need to show endpoints from BPM (which is the most verbose one - in terms of number of endpoints).

Take a look at this short screencast that illustrates it in action - showing how you can actually use the Swagger docs to run processes and user tasks.

An advantage is that now there is a rule in place that makes it mandatory to describe that way every and each REST endpoint being added to KIE Server.

Custom extensions can do that too, just make sure your custom endpoint class has swagger annotation on the type level and once added to KIE Server (and restarted) they will show up in the docs.

2017/10/17

It's been a while since the last article about case management so I thought it's the time to refresh that topic a bit. And the best way to do it is with the face lift of sample case application - IT Orders App.

So what's new in case management since last time?

case file authorisation

case comments authorisation

case close with comment

index for case file items for searching

So let's start with the most significant improvements - case file and case comments authorisation. Prior to this, all data and comments were visible to all participants of the case instance. So as long as user has access to case instance (is assigned to any of the roles) she will have access to all the data in the case file. Similar will have access to all comments.

This actually prevents of using rather common mechanism within data driven applications - access control and visibility. Let's take into account situation where there are sensitive data that only certain roles in the case instance should be able to view or maybe there are needs to post private comments. Without the authorisation within the case instance users would not be able to deal with such use cases.

jBPM 7.5 will bring solution to this by allowing users to define restrictions for both comments and data within case file.

Case comments authorisation

Case comment can be restricted to roles within the case instance when the comment is:

created

updated

Whenever comment is updated or removed authorisation checks are performed to make sure that the action is done by a privileged user.

When comments are retrieved they are filtered by authorisation to ensure comments eligible for given user will be returned.

Case file authorisation

Case file data is protected individually, each item in the case file can have its own access restrictions. Similar to comments, whenever data is put into the case file or removed from it, authorisation checks are performed. When case instance or its data is retrieved it is filtered by authorisation to ensure only eligible data will be present in the data set.

Case file data access restrictions can be set in following ways:

within case definition by setting custom meta data called customCaseDataAccess that supports multiple case file items with one or more roles for them. It expects following format:

item:role1,role2;another:role2,role3

when creating a case instance (start a case) access restrictions can be given as part of the case file, next to data and role assignments

when putting data into a case file access restrictions can be provided

Close case with comment

Case instance can be completed when there are no more activities to be performed and the business goal was achieved or it can be closed prematurely. In the second case, it's quite often needed to make a comment why the case instance is being closed. This feature has now been provided as part of jBPM 7.5 so that can help to keep track of various scenarios that led to case instance being closed.

Indexing of case file items

Case file data is really powerful when case instance is running, rules can be built on top of them, they can be added or removed at any point in time. But when it comes to searching by that data, going through each case instance to find out if it matches given criteria or not does not sound like a good idea.

To provide more efficient support for such operation, case file data is indexed (similar to how process instance variables are). They are stored in data base table and constantly being updated so it represents the latest state of the case file.

This allows then to easily and efficiently:

find case instances that contain given data (by name and value)

filter case file by data name or type

build up UI based on the index rather than loading all the data - keep in mind that case file might contain any type of information like large documents etc

Some of these features are included in the face lift of the IT Order Case App that you can watch below.

As usual, comments are more than welcome... ideas for improvements and real case studies for case mgmt even more :)

2017/10/11

Recently there were number of questions on mailing list about authoring perspective missing in recent versions of jBPM and/or drools... that lead me to take few minutes to make this write up and attached screen case to show that ... it was not removed :)

It was actually redesigned for easier access and to improve user experience when using the workbench. Though for people who get used to the "old" way could be a bit lost at first. So here it goes:

What you can see in this screen cast is:

where to go to see the projects

how to create new project

how to import new project

how to import project from external git server

how to find the settings and various configuration options of the project

how to build and deploy

where to find deployed projects into execution servers

where to find process definitions

where to start new process instance

Nothing fancy but might get you started much easier after moving from previous version.

Comments are more than welcome in terms of improvements and feedback about usability.