
Subprocess
Swimlane constraint: a subprocess whose UI renders inside the parent process (through a Parent Process navigation area) must have exactly one swimlane. With multiple swimlanes, the runtime can’t render the subprocess in the parent and reports
Could not render subprocess due to multiple swimlanes or missing Parent Process Area - see the error glossary.- Async mode: The parent process will continue without waiting for the subprocess to finish.
Select if this task should be invoked asynchronously. Make tasks asynchronous if they cannot be executed instantaneously, for example, a task performed by an outside service.
- Sync mode: The parent process must wait for the subprocess to finish before advancing.

Calling a subprocess from a library
A Call Activity can start a process that belongs to a library, as long as the library is a dependency of your project. You configure it the same way as a subprocess from your own project:- Add the library to your project. See Adding library dependencies.
- In the Call Activity’s start subprocess action, open the process dropdown. Processes from your own project are listed under Local, and processes from each library are listed under the library’s name. Select the library process.
Retrying the parent token
Retrying the parent process token while it sits on a Call Activity node re-executes the node’s start subprocess action, starting a new subprocess instance. The original subprocess instance isn’t resumed or terminated: it remains in its current state alongside the new one. With parallel multi-instance enabled, retrying the parent token starts a new full set of subprocess instances.Starting multiple subprocesses
Parallel multi-instance
The Call Activity node can also be used for starting a set of subprocesses that will be started and run at the same time. This is useful when there is an array of values in the parent process parameters, and a subprocess needs to be started for each element in that array.
Configuration options
When configuring parallel multi-instance on a Call Activity node, you have access to the following configuration options:- Input Array: Declare the array used for subprocess input. Map the array of objects or the keys inside the array of objects to the destination object or its keys from the subprocess.
- Output Array: Declare the array used for subprocess output. Map from the subprocess object back to an array of objects in the parent process.
- Correlation attribute: The attribute that will be used to correlate subprocess results with parent process data.
Data mapping
In the Data Mapping section, when Parallel Multi-instance is enabled, you can configure:New data mapping
- Declare arrays: Define the arrays used for subprocess input and subprocess output
- Input mapping: In the mapping modal, map the array of objects or the keys inside the array of objects to the destination object or its keys from the subprocess
- Output mapping: Map from the subprocess object back to an array of objects in the parent process

Legacy mapping
Legacy mapping works using current mechanics in both configuration and runtime, with no changes to existing features.Correlation attribute behavior
When results from parallel subprocesses are returned, the correlation attribute determines how the subprocess payload is handled:- Update existing element: When the correlation attribute value from the subprocess payload matches one or more elements in the parent process array, those elements are updated with the subprocess payload
- Insert new element: When the correlation attribute value from the subprocess payload doesn’t match any records in the parent process array, the payload is inserted as a new element in the array
Output population and incomplete instances
The output array in the parent process populates incrementally: each subprocess reports back as it completes, and the parent appends its result right away - results don’t wait for the rest of the set. Results arrive in completion order, not input-array order; when a correlation attribute is configured, each result updates the element matching its correlation key instead of appending. Until the parent token advances, the accumulated values live in the parent’s process data but aren’t visible to subsequent nodes or the UI - you can confirm they arrived by inspecting the instance’s process data in monitoring. In Sync mode, the parent token advances only when every instance in the set completes. A subprocess counts as completed when it reaches an end node or is dismissed. An instance that ends any other way (ABORTED, TERMINATED, EXPIRED, FAILED) never reports back to the parent, so the parent token keeps waiting - there is no timeout on the wait - even though the results of the completed instances are already present in the parent’s process data. A partial run isn’t recoverable: to get results for all items, run the operation again. Two configurations end the wait automatically:- Expiry time on the parent process definition: the parent (and, by default, its active subprocesses) moves to EXPIRED at the scheduled moment. The run isn’t recovered, but it stops hanging. See What happens when a process expires.
- An interrupting boundary event (timer, message, or error) on the Call Activity node: the parent advances on the boundary branch, and the still-active subprocess instances are aborted. Already-finished instances keep their FINISHED status.
Dismissing unfinished subprocesses
When subprocesses are started in Sync mode:- If the token is advanced due to another action being performed in the process
- Then the subprocesses that haven’t finished are automatically dismissed
Business rule example
Below is an example of an MVEL business rule used to generate a list of shipping codes:
When designing such a subprocess that will be started in a loop, remember that the input value for the subprocess (one of the values from the array in the parent process) will be stored in the subprocess parameter values under the key named item. This key should be used inside the subprocess. If this subprocess produces any results, they should be stored under a key named result to be sent back to the parent process.

Subprocess business rule example
Here’s an MVEL business rule for a subprocess that processes shipping codes:Result (one of the subprocess instances)
The result shows the output of a process that has handled multiple shipping codes. The structure is:

