Updated on 2019-09-16 to include screenshot of processes in Workspace.
For a
somewhat more complex process, and especially when applying the Microprocess Architecture, you may have more than one process and probably
several integration applications that make up the implementation of one single
business process. This implies that when executing a business process there
will be 2 or more instances of the process, and integration applications. Now
how can a business user or Applications Administrator correlate all these
instances to monitor the flow of the business process?
The
on-premise Oracle BPM Suite (and SOA Suite) has the concept of
"flowId" which is an id that is generated by the BPM engine at the
start of the first instance and then "passed on" from one instance to
the other. Using Enterprise Manager, by means of the flowId one can easily
follow how one process or integration calls the other, and by putting it in the
process or integration instance title, also in the Workspace. The Oracle
Integration Cloud (OIC) does not have the concept of flowId, as least not yet.
Now what to do? Here comes the Process Group to the rescue.
The Process
Group Pattern is relatively simple. It includes a unique
"processGroupId" that, like the flowId, is generated at the start of
a process flow and then passed on from one process or integration to the other.
A robust way to get a processGroupId is by using the GUID you can get from OIC
(or the BPM Suite).
However,
unlike the flowId, the processGroupId is unique over all engine instances you
may have. When using a GUID, it is even unique over the world. Uniqueness over
engine instances becomes important when at any point in time you have two or
more of those and when some of the components of the process application are
deployed on a different instance than the one starting it. Also unlike the
flowId, the processGroupId is persisted in a custom database and can be kept persisted
beyond the life cycle of the business process (which after purging will have
disappeared from the engine's database). Finally, you can return the processGroupId as a
response to the start operation of the process, allowing the starting
application storing a cross-reference to the Process Group instance.
To support
that instances can be queried by processGroupId in the Workspace, you can set
the title of the instance as a first activity in every individual process application.
For OIC integrations you can make it one of the tracking variables. The below shows how in OIC this would look for process instances:
Next to the processGroupId, you can also persist more meta data information about the business process, ending up with a business object looking like the following:
The
combination processGroupType and businessId should be unique, at least for
running instances. By storing this combination together with the processGroupId
you have a mechanism to prevent duplicate instances of the same business
process to be started.
For an even
more complex business proceess consisting of a main and a few functional
subprocesses, you can introduce an extra layer by adding a Process Group Instance
business object. This might come handy for example when you have a stand-alone,
reusable business process (like a Signing process) that is called by the main
process.
More
formally:
Context:
The
implementation of a business process is made up of several components (process
or integration applications) and there is no out-of-the-box way to relate the
instances of these components to each other in a (custom) Workspace. One might
also want to have a recording persisted of meta data of the business process
after its instance(s) have been purged from the engine's database. Or one might
need a means to prevent duplicate instances of the same business process to be
started.
Solution:
A Process Group is the collection of instances of components that make up the flow of one single business process. It includes a unique
processGroupId that is generated at the very beginning of the business process,
which is persisted in a custom database, together with a combination of a
businessId and processGroupType. There can only be one combination of businessId
and processGroupType for any running Process Group instance at any time. The
processGroupId can be returned by the start operation to support
cross-reference from the starting application.
For more complex process applications an extra Process Group Instance layer can be added as a child of the Process Group, to support business process applications made up of two or more functional process applications. A Process Group Instance is the collection of one or more instances of tightly coupled components that together make up one single process application, which in principle is reusable.
For more complex process applications an extra Process Group Instance layer can be added as a child of the Process Group, to support business process applications made up of two or more functional process applications. A Process Group Instance is the collection of one or more instances of tightly coupled components that together make up one single process application, which in principle is reusable.
Implication:
A custom
database is required for storing the Process Group and Process Group Instance. A
function is required that returns a processGroupId that is guaranteed unique
over process engine instances when (at some point in the future) components of
the business process need to be deployed on two or more engines.