Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Applies to:  
Status
colourGreen
titleCelonis 4.0
 
Status
colourGreen
titleCelonis 4.2
 
Status
colourGreen
titleCelonis 4.3
 
Status
colourGreen
titleCelonis 4.4
 
Status
colourGreen
titleCelonis 4.5
 

Description

Cases in Celonis can be configured to have subprocesses by adding additional information to the Activity table.

Master Process

For adding parallel processes to Celonis, a parent and a child column in the Activity table are used. If all values for parent and child are NULL, only the master process (non parallel process) is added to the data model.

Example


Panel
borderColorgrey
Section
In this example, all values for parent-ID and child-ID are NULL, therefore only the master process (non parallel process) is added to the data model.
The overall process looks like this:

In PQL, the edges of that graph can be calculated using SOURCE / TARGET:

Section
Panel
titleQuery
Column1
Code Block
languagetext
themeDJango
SOURCE ( "Activities"."ACTIVITY" )
Column2
Code Block
languagetext
themeDJango
TARGET ( "Activities"."ACTIVITY" )
Section
Column
width50%
Panel
titleInput
Activities
CASE_ID : INTACTIVITY : STRINGPARENT : INTCHILD : INTTIMESTAMP : DATE
1
'A'
null
null
Thu Mar 10 2016 0013:00:00.000
1
'B'
null
null
Thu Mar 10 2016 13:01:00:00.000
1
'C'
null
null
Thu Mar 10 2016 13:02:00:00.000
Column
width50%
Panel
titleOutput
Result
Column1 : STRINGColumn2 : STRING
'A''B'
'B''C'


Child-ID

A new subprocess is started by adding new child-IDs. The child-ID of a sub-process has to be unique among one case. Sub-processes with the same child-ID are modelled as a sequential subprocess. They are implicitly joined, as soon as activity of the master process (child-ID and parent-ID are both NULL) starts.

Example


Panel
borderColorgrey
Section
In this example, a new subprocess is started by adding new child-IDs. The master process splits up into two parallel processes after activity A, which are merged together again at activity E.
The overall process looks like this:

In PQL, the edges of that graph can be calculated using SOURCE / TARGET:

Section
Panel
titleQuery
Column1
Code Block
languagetext
themeDJango
SOURCE ( "Activities"."ACTIVITY" )
Column2
Code Block
languagetext
themeDJango
TARGET ( "Activities"."ACTIVITY" )
Section
Column
width50%
Panel
titleInput
Activities
CASE_ID : INTACTIVITY : STRINGPARENT : INTCHILD : INTTIMESTAMP : DATE
1
'A'
null
null
Thu Mar 10 2016 0013:00:00.000
1
'B'
null
1
Thu Mar 10 2016 13:01:00:00.000
1
'C'
null
2
Thu Mar 10 2016 13:02:00:00.000
1
'D'
null
1
Thu Mar 10 2016 13:03:00:00.000
1
'E'
null
null
Thu Mar 10 2016 13:04:00:00.000
Column
width50%
Panel
titleOutput
Result
Column1 : STRINGColumn2 : STRING
'A''B'
'A''C'
'B''D'
'C''E'
'D''E'


Parent-Child Relation

You can define parent/child relations between subprocesses. This allows you to model a subprocess which spawns further subprocesses. As soon as the parent subprocess reads another activity, it implicitly joins all spawned subprocesses. The child-ID of a spawned subprocess has to be higher than the child-ID of its parent subprocess.

Examples


Panel
borderColorgrey
Section
In this example, parent/child relations between subprocesses are defined. The subprocess with child ID-2 is split up again after activity C into two parallel subprocesses containing the activities D and E, respectively. Both have unique child-IDs, but are linked to their parent subprocess with child-ID 2 by specifying this ID in the parent column.
The overall process looks like this:

In PQL, the edges of that graph can be calculated using SOURCE / TARGET:

Section
Panel
titleQuery
Column1
Code Block
languagetext
themeDJango
SOURCE ( "Activities"."ACTIVITY" )
Column2
Code Block
languagetext
themeDJango
TARGET ( "Activities"."ACTIVITY" )
Section
Column
width50%
Panel
titleInput
Activities
CASE_ID : INTACTIVITY : STRINGPARENT : INTCHILD : INTTIMESTAMP : DATE
1
'A'
null
null
Thu Mar 10 2016 0013:00:00.000
1
'B'
null
1
Thu Mar 10 2016 13:01:00:00.000
1
'C'
null
2
Thu Mar 10 2016 13:02:00:00.000
1
'D'
2
3
Thu Mar 10 2016 13:03:00:00.000
1
'E'
2
4
Thu Mar 10 2016 13:04:00:00.000
1
'F'
null
2
Thu Mar 10 2016 13:05:00:00.000
1
'G'
null
null
Thu Mar 10 2016 13:06:00:00.000
Column
width50%
Panel
titleOutput
Result
Column1 : STRINGColumn2 : STRING
'A''B'
'A''C'
'B''G'
'C''D'
'C''E'
'D''F'
'E''F'
'F''G'



Panel
borderColorgrey
Section
In this example, the master process splits up into two subprocesses (child-IDs 1 and 5). The subprocess with child-ID 1 splits up again after activity B into two subprocesses with child-IDs 3 (activity D) and 2 (activities C and E).
The overall process looks like this:

In PQL, the edges of that graph can be calculated using SOURCE / TARGET:

Section
Panel
titleQuery
Column1
Code Block
languagetext
themeDJango
SOURCE ( "Activities"."ACTIVITY" )
Column2
Code Block
languagetext
themeDJango
TARGET ( "Activities"."ACTIVITY" )
Section
Column
width50%
Panel
titleInput
Activities
CASE_ID : INTACTIVITY : STRINGPARENT : INTCHILD : INTTIMESTAMP : DATE
1
'A'
null
null
Thu Mar 10 2016 0013:00:00.000
1
'B'
null
1
Thu Mar 10 2016 13:01:00:00.000
1
'C'
1
2
Thu Mar 10 2016 13:02:00:00.000
1
'D'
1
3
Thu Mar 10 2016 13:03:00:00.000
1
'E'
1
2
Thu Mar 10 2016 13:04:00:00.000
1
'F'
null
5
Thu Mar 10 2016 13:05:00:00.000
1
'G'
null
1
Thu Mar 10 2016 13:06:00:00.000
1
'K'
null
null
Thu Mar 10 2016 13:07:00:00.000
Column
width50%
Panel
titleOutput
Result
Column1 : STRINGColumn2 : STRING
'A''B'
'A''F'
'B''C'
'B''D'
'C''E'
'D''G'
'E''G'
'F''K'
'G''K'