Warning
Sequentiality is never guaranteed in execution when tasks, processes, conditional nodes or message events are not on a process line.
Nodes and execution queue
This appendix describes in what sequence tasks, processes, conditional nodes and message events are executed by the process engine. The sequence is never guaranteed. There are however some rules that are used to determine if and when tasks, processes, conditional nodes and message events are executed. This appendix describes the ordering that applies on such node, as shown in table below. When a process is evaluated a queue is created. The queue is updated every time the process is evaluated. The queue contains all the nodes that have to be executed. If multiple nodes are put on the queue at once this is not done in a specific order. This is important to notice.
Type | Node | Required | Overall conditional | Conditional | Creation in database | Put on queue | Moved from queue | Execution |
---|---|---|---|---|---|---|---|---|
Process | Process | Yes | Yes, when a process is in another process (parent node) | No | Precondition is TRUE (a process line is also a precondition) | Line reaches process | Overall condition is false, parent node is completed | Process is first on queue |
Process | Adhoc process | Conditional | Yes, when a process is in another process (parent node) | Yes | When precondition and overall condition are true | Condition is true | Overall condition is false, parent node is completed | Process is first on queue |
Task | Task | Depends on if and what kind of join node is used | Yes (parent node) | No | Precondition is TRUE | N/A | N/A | When executed with AQ_ExecuteTask |
Task | Automated task | Yes | Yes (parent node) | No | When precondition and overall condition are true | After creation | Overall condition is false, parent node is completed | task is first on queue |
Task | Adhoc task | Conditional | Yes (parent node) | Yes | When precondition and overall condition are true | N/A | N/A | When executed with AQ_ExecuteTask |
Condition | Conditional | Yes | Yes (parent node) | No | Precondition is TRUE | Precondition is TRUE (ie. arrow reaches the node) or process profile changes | Overall condition is false | conditional is first on queue |
Condition | Adhoc conditional | No | Yes (parent node) | No | When overall condition is true | After creation or when process profile changes | Overall condition is false, parent node is completed | conditional is first on queue |
Event | Message event | Yes | Yes (parent node) | No | Precondition is TRUE | Incoming message event | ||
Event | Adhoc message event | No | Yes (parent node) | No | When overall condition is true | Incoming message event | ||
Timer | Timer | Yes | Yes (parent node) | No | Precondition is TRUE | Incoming timer event | ||
Timer | Adhoc timer | No | Yes (parent node) | No | When overall condition is true | Incoming timer event |
Examples
Some facts about process Process:
- Task TaskA fills Person.Name
- Conditional Process_Condional_1 has condition "Person.Name !=?"
The tables show two possible execution plans. The first plan shows how the process is evaluated now. The second plan shows how it could be executed in future, as the sequence can not be guaranteed.
First execution plan:
Step | Queue before step | Execution | Queue after step |
---|---|---|---|
1 | Process is evaluated: TaskA is put on queue | TaskA | |
2 | TaskA | TaskA is executed | |
3 | Process is evaluated: TaskB is put on queue Process_Conditional_1 is put on queue | Process_Conditional_1 TaskB | |
4 | Process_Conditional_1 TaskB | Process is evaluated: Process_Conditional_1 is removed from queue TaskC is put on queue | TaskB TaskC |
5 | TaskB TaskC | TaskB is executed | TaskC |
6 | TaskC | Process is evaluated: End node is reached | TaskC |
7 | TaskC | TaskC is executed | |
8 | Process is evaluated: End node is reached End node is executed |
Second execution plan:
Step | Queue before step | Execution | Queue after step |
---|---|---|---|
1 | Process is evaluated: TaskA is put on queue | TaskA | |
2 | TaskA | TaskA is executed | |
3 | Process is evaluated: TaskB is put on queue Process_Conditional_1 is put on queue | TaskB Process_Conditional_1 | |
4 | TaskB Process_Conditional_1 | TaskB is executed | Process_Conditional_1 |
5 | Process_Conditional_1 | Process is evaluated: End node is reached End node is executed Process_Conditional_1 is removed from queue |
When you're using TSL in the displayname of a task, the TSL is rendered when adding the task to the evaluation queue. When the data used in your TSL expression changes after adding the task to the evaluation queue by executing another task, the displayname is not updated.