Документация / BPMN

Пулы и дорожки

Пулы и дорожки показывают, кто выполняет работу.

Пул

Пул (pool) — большой прямоугольник с названием участника слева: компания, клиент, внешняя система. В XML пул — это participant внутри collaboration, связанный с процессом атрибутом processRef. У каждого пула свой процесс, а взаимодействуют пулы только потоками сообщений.

Пул может быть «чёрным ящиком» — без процесса внутри. Так изображают участника, о внутренней работе которого мы ничего не знаем или не хотим показывать (банк, государственная система).

Дорожка

Дорожка (lane) — полоса внутри пула: роль, должность или подразделение. Задачи в дорожке выполняет этот исполнитель. Потоки управления свободно пересекают дорожки — это один процесс. Дорожки можно вкладывать друг в друга («Отдел продаж» → «Менеджер», «Руководитель»).

<bpmn:process id="Process_Purchase" isExecutable="false">
  <bpmn:laneSet id="LaneSet_1">
    <bpmn:lane id="Lane_Employee" name="Сотрудник">
      <bpmn:flowNodeRef>Request</bpmn:flowNodeRef>
    </bpmn:lane>
    <bpmn:lane id="Lane_Manager" name="Руководитель">
      <bpmn:flowNodeRef>Approve</bpmn:flowNodeRef>
    </bpmn:lane>
  </bpmn:laneSet>
  <bpmn:userTask id="Request" name="Создать заявку" />
  <bpmn:userTask id="Approve" name="Согласовать заявку" />
</bpmn:process>

Пример коллаборации

Клиент (чёрный ящик) отправляет заказ, магазин обрабатывает его и отправляет подтверждение.

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
                  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
                  xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
                  xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
                  id="Definitions_Collab" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:collaboration id="Collaboration_Shop">
    <bpmn:participant id="Customer" name="Клиент" />
    <bpmn:participant id="Shop" name="Интернет-магазин" processRef="Process_Shop" />
    <bpmn:messageFlow id="Msg_Order" name="Заказ" sourceRef="Customer" targetRef="OrderReceived" />
    <bpmn:messageFlow id="Msg_Confirm" name="Подтверждение" sourceRef="Confirm" targetRef="Customer" />
  </bpmn:collaboration>
  <bpmn:message id="Message_Order" name="Заказ" />
  <bpmn:process id="Process_Shop" isExecutable="false">
    <bpmn:startEvent id="OrderReceived" name="Заказ получен">
      <bpmn:outgoing>F1</bpmn:outgoing>
      <bpmn:messageEventDefinition id="Def_Order" messageRef="Message_Order" />
    </bpmn:startEvent>
    <bpmn:task id="Process" name="Обработать заказ">
      <bpmn:incoming>F1</bpmn:incoming>
      <bpmn:outgoing>F2</bpmn:outgoing>
    </bpmn:task>
    <bpmn:sendTask id="Confirm" name="Отправить подтверждение">
      <bpmn:incoming>F2</bpmn:incoming>
      <bpmn:outgoing>F3</bpmn:outgoing>
    </bpmn:sendTask>
    <bpmn:endEvent id="Done" name="Заказ принят">
      <bpmn:incoming>F3</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="F1" sourceRef="OrderReceived" targetRef="Process" />
    <bpmn:sequenceFlow id="F2" sourceRef="Process" targetRef="Confirm" />
    <bpmn:sequenceFlow id="F3" sourceRef="Confirm" targetRef="Done" />
  </bpmn:process>
  <bpmndi:BPMNDiagram id="Diagram_Collab">
    <bpmndi:BPMNPlane id="Plane_Collab" bpmnElement="Collaboration_Shop">
      <bpmndi:BPMNShape id="Customer_di" bpmnElement="Customer" isHorizontal="true">
        <dc:Bounds x="130" y="60" width="600" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Shop_di" bpmnElement="Shop" isHorizontal="true">
        <dc:Bounds x="130" y="200" width="600" height="160" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="OrderReceived_di" bpmnElement="OrderReceived">
        <dc:Bounds x="202" y="262" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="184" y="305" width="72" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Process_di" bpmnElement="Process">
        <dc:Bounds x="290" y="240" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Confirm_di" bpmnElement="Confirm">
        <dc:Bounds x="450" y="240" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Done_di" bpmnElement="Done">
        <dc:Bounds x="612" y="262" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="596" y="305" width="68" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="F1_di" bpmnElement="F1">
        <di:waypoint x="238" y="280" /><di:waypoint x="290" y="280" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="F2_di" bpmnElement="F2">
        <di:waypoint x="390" y="280" /><di:waypoint x="450" y="280" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="F3_di" bpmnElement="F3">
        <di:waypoint x="550" y="280" /><di:waypoint x="612" y="280" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Msg_Order_di" bpmnElement="Msg_Order">
        <di:waypoint x="220" y="140" /><di:waypoint x="220" y="262" />
        <bpmndi:BPMNLabel><dc:Bounds x="226" y="190" width="32" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Msg_Confirm_di" bpmnElement="Msg_Confirm">
        <di:waypoint x="500" y="240" /><di:waypoint x="500" y="140" />
        <bpmndi:BPMNLabel><dc:Bounds x="506" y="190" width="84" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

Советы

  • Пул — это участник, а не отдел. Отделы одной компании обычно изображают дорожками одного пула.
  • Не соединяйте дорожки потоками сообщений: внутри пула работает один процесс, и передача работы — это поток управления.
  • Если в коллаборации несколько подробных пулов, у каждого должны быть свои начальное и конечные события.

Обновлено: 30 сентября 2026 г.