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.

adding pool

Once added, the pool cannot be removed from the diagram. Deletion of the pool deletes ALL elements inside it.

Properties

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:

collaboration properties

When you select the pool element, properties of the participant and the process will be shown:

process properties

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.

XML Representation

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 isExecutable is ignored by process engine.

Multiple Pools

Collaboration may include many processes as shown in the picture below:

collaboration two processes

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.

process definitions wiindow

Use this technique when you create several processes communicating with each other. Or when you have the main process and call activities.

Empty Pool

An empty pool represents a participant in a process that does not have any defined activities or processes within it.

Visual Representation

An empty pool will appear as a rectangle without any internal elements such as tasks, events, or gateways.

(To be defined)

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:

adding lanes

To delete lane, use the deletion tool. It removes only the lane itself, but not elements placed on it.

lane properties
Properties

Select a single lane element to see its properties:

lanes
single lane 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.

XML Representation

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>