Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I can read how to use an ad-hoc subprocess #4729

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions docs/components/modeler/bpmn/ad-hoc/ad-hoc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
id: ad-hoc
title: "Ad-hoc"
description: "The ad-hoc marker is only available for embedded subprocesses, so called ad-hoc subprocesses."
---

The ad-hoc marker (**~** a tilde character) is only available
for [embedded subprocesses](../embedded-subprocesses/embedded-subprocesses.md), so called **ad-hoc subprocesses**.
Compared to regular subprocesses, it allows more flexibility for executing the inner elements.

![A demo process with an ad-hoc subprocess. Some elements inside the subprocess are active.](assets/ad-hoc-subprocess.png)

The inner elements of an ad-hoc subprocess are not connected to a start or end event. Each element can be executed
multiple times, in any order, or skipped.

If elements depend on each other, the elements can be connected by a sequence flow to build a structured sequence
within the ad-hoc subprocess.

When a process instance reaches an ad-hoc subprocess, it [activates the inner elements](#activate-an-element) and waits
for their completion. After the last element is completed, the process instance completes the ad-hoc subprocess and
takes the outgoing sequence flows.

### Constraints

An ad-hoc subprocess has the following constraints:

- Must have at least one activity
- Must not have start events or end events
- Any intermediate catch event must have an outgoing sequence flow

## Activate an element

An ad-hoc subprocess can define an expression `activeElementsCollection` that should return a
[list](../../feel/language-guide/feel-data-types.md#list) of strings. Each string in the list should match to an id of
an inner element of the ad-hoc subprocess. Usually, the expression accesses a process instance variable that was
created before and holds the list of element ids.

![A process with an ad-hoc subprocess that shows how a variable is used to active the inner elements.](assets/ad-hoc-subprocess-activation.png)

When a process instance reaches an ad-hoc subprocess, it evaluates the expression `activeElementsCollection` and
activates all elements whose element ids are in the list.

If the list is empty or the expression is not defined, no element is activated and the ad-hoc subprocess stays active.

If the expression doesn't evaluate to a list of strings, or the list contains other values than inner element ids, the
process instance creates an incident.

:::note
Currently, it is not possible to activate elements dynamically after the ad-hoc subprocess is activated, only on
entering the subprocess.
:::

## Variable mappings

An ad-hoc subprocess can define input and output
[variable mappings](../../../concepts/variables.md#inputoutput-variable-mappings).

Input variable mappings are applied on activating the ad-hoc subprocess and before evaluating the expression
`activeElementsCollection`. They can be used to create local variables for the ad-hoc subprocess.

Output variable mappings are applied on completing the ad-hoc subprocess. They can be used to propagate local variables
from the ad-hoc subprocess into the process instance. By default, no local variables are propagated.

## Additional resources

### XML representation

```xml
<bpmn:adHocSubProcess id="ad-hoc-subprocess" name="Ad-hoc subprocess">
<bpmn:extensionElements>
<zeebe:adHoc activeElementsCollection="=activeElements" />
</bpmn:extensionElements>
... more contained elements ...
</bpmn:adHocSubProcess>
```
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions docs/components/modeler/bpmn/assets/bpmn-symbols/ad-hoc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions docs/components/modeler/bpmn/bpmn-coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ import MultiInstanceParallelSvg from './assets/bpmn-symbols/multi-instance-paral
import MultiInstanceSequentialSvg from './assets/bpmn-symbols/multi-instance-sequential.svg'
import LoopSvg from './assets/bpmn-symbols/loop.svg'
import CompensationSvg from './assets/bpmn-symbols/compensation.svg'
import AdHocSvg from './assets/bpmn-symbols/ad-hoc.svg'

<div className="bpmn-symbol-container">
<a href="../multi-instance/">
Expand All @@ -136,6 +137,9 @@ import CompensationSvg from './assets/bpmn-symbols/compensation.svg'
<a href="../compensation-handler/">
<CompensationSvg className="implemented" />
</a>
<a href="../ad-hoc/">
<AdHocSvg className="implemented" />
</a>
</div>

## Data
Expand Down
1 change: 1 addition & 0 deletions docs/components/modeler/bpmn/markers.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ Currently supported markers:

- [Multi-instance](multi-instance/multi-instance.md)
- [Compensation](compensation-handler/compensation-handler.md)
- [Ad-hoc](ad-hoc/ad-hoc.md)
1 change: 1 addition & 0 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ module.exports = {
"components/modeler/bpmn/markers",
"components/modeler/bpmn/multi-instance/multi-instance",
"components/modeler/bpmn/compensation-handler/compensation-handler",
"components/modeler/bpmn/ad-hoc/ad-hoc",
],
},
],
Expand Down
Loading