Pools and Lanes
In BPMN, a swimming pool is a graphical element used to represent a participant in a collaboration. It may contain few lanes.
Pools
A swimming pool may have lanes, which represent different actors within the process. Each lane contains the activities (task or subprocesses).
Usually, lanes are used in high-level analytical models helping to visualize zones of responsibility for each actor. Overall, swimming pools and lanes in BPMN help are aimed to improve communication and collaboration between different stakeholders involved in a business process.
Avoid using lanes in executable models. |
Adding a Pool
Initial process template doesn’t have a pool. You can add it later using a tool palette. The newly added pool automatically covers all elements on the diagram.
Once added, the pool cannot be removed from the diagram. Deletion of the pool deletes ALL elements inside it.
When the pool is created, a simple process diagram becomes a collaboration diagram. As well, the behavior of the BPMN Inspector be changed.
First, now when you select nothing, properties of the collaboration would be shown:
When you select the pool element, properties of the participant and the process will be shown:
Don’t miss participant id/name with the process id/name. Participant (pool) is just the graphical object, whereas the process is to be executed.
So, when you need to start the process manually or via API, look for process id.
In the web application, the term key is used instead of id, particularly in the process definitions list. |
In the XML file, the collaboration definition section appears when you add a pool.
<collaboration id="Collaboration_16sinaz"> (1)
<participant id="Participant_1txu04k" processRef="pool-demo" /> (2)
</collaboration>
<process id="pool-demo" name="Pool demo" isExecutable="true"> (3)
<startEvent id="Event_0yeospn">
<outgoing>Flow_1snk2tn</outgoing>
</startEvent>
<sequenceFlow id="Flow_1snk2tn" sourceRef="Event_0yeospn" targetRef="Activity_187mecy" />
<userTask id="Activity_187mecy">
<incoming>Flow_1snk2tn</incoming>
</userTask>
</process>
1 | — Collaboration definition section |
2 | — Participant (pool) included in collaboration |
3 | — Process definition (as it was before adding the pool) |
Attribute |
Multiple Pools
Collaboration may include many processes as shown in the picture below:
When you deploy a collaboration model, each process will be deployed separately with its own id, and it will be visible in the process definitions list. So you will be able to start any process from the collaboration.
Use this technique when you create several processes communicating with each other. Or when you have the main process and call activities. |
Lanes
In BPMN, Lanes are used to organize and categorize activities within a Pool.
You can divide a pool by lanes using the context tool menu on the right of selected object; as well, you can add lanes above or below:
To delete lane, use the deletion tool. It removes only the lane itself, but not elements placed on it.
Select a single lane element to see its properties:
Here you can set lane id and name, that will be shown on the diagram. Besides, you can assign a performer like for a user task. Then, all user tasks placed in this lane will be assigned to the same performer if you leave the task assignee section empty.
Subprocesses are not supported. |
Lanes are represented in the XML file by the <laneSet> element and corresponding <lane> elements. Each lane contains properties and list of activities placed on it.
<process id="pool-and-lanes" name="Pool and lanes" isExecutable="true">
<laneSet id="LaneSet_1lxq2l3">
<lane id="Lane_1" name="User 1">
<extensionElements>
<jmix:assignmentDetails assigneeSource="expression" assigneeValue="user1" assignee="user1" candidateUsersSource="users" candidateGroupsSource="userGroups" />
<jmix:conditionDetails conditionSource="userTaskOutcome" />
</extensionElements>
<flowNodeRef>Activity_0n34ol9</flowNodeRef>
<flowNodeRef>Activity_0758bjc</flowNodeRef>
<flowNodeRef>Event_1mkoyrv</flowNodeRef>
</lane>
<lane id="Lane_2" name="User 2">
...
</lane>
</laneSet>