java每日精进 7.28【流程设计6.0(泳池和泳道)】
BPMN 中的泳池与泳道简介
在 BPMN(业务流程建模与标记法)中,泳池(Pool) 和 泳道(Lane) 是用于组织和展示流程中不同参与者或角色的图形化工具。它们的主要作用是清晰地划分职责和功能,帮助理解复杂流程中每个步骤的负责人。
- 泳池(Pool):代表流程中的一个主要参与者或实体,例如一个部门、组织或角色。泳池通常作为一个图形容器,将不同参与者之间的活动分开。通常一个流程图中可以有一个或多个泳池。如果流程涉及多个独立实体(如公司内部和外部的交互),会使用多个泳池;如果只涉及单一组织内部的流程,通常只有一个泳池。
- 泳道(Lane):是泳池的子划分,用于进一步区分泳池内不同角色或职能的活动。泳道可以水平或垂直排列,通常按角色、部门或功能划分。流程可以在泳池内跨泳道流转,而泳道本身不影响流程逻辑,仅用于可视化区分。
在采购流程示例中,泳池和泳道的作用是直观展示“员工”、“领导”和“财务”三种角色在流程中的职责分配。它们不改变流程的执行逻辑,但通过图形化的方式让流程更清晰易懂。
示例:采购流程的 BPMN XML 文件
以下是一个基于采购流程的 BPMN 2.0 XML 文件示例,展示了如何使用泳池和泳道来建模“员工”、“领导”和“财务”三个角色的活动。假设采购流程包括以下步骤:
- 员工提交采购申请。
- 领导审批申请。
- 财务处理付款。
<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"targetNamespace="http://www.example.org/procurement"><process id="ProcurementProcess" name="采购流程" isExecutable="true"><!-- 泳池定义 --><collaboration id="Collaboration"><participant id="Pool_Procurement" name="采购流程" processRef="ProcurementProcess"/></collaboration><!-- 泳道定义 --><laneSet id="LaneSet_Procurement"><lane id="Lane_Employee" name="员工"><flowNodeRef>StartEvent</flowNodeRef><flowNodeRef>Task_SubmitRequest</flowNodeRef></lane><lane id="Lane_Leader" name="领导"><flowNodeRef>Task_ApproveRequest</flowNodeRef></lane><lane id="Lane_Finance" name="财务"><flowNodeRef>Task_ProcessPayment</flowNodeRef><flowNodeRef>EndEvent</flowNodeRef></lane></laneSet><!-- 流程节点定义 --><startEvent id="StartEvent" name="流程开始"/><userTask id="Task_SubmitRequest" name="提交采购申请"/><userTask id="Task_ApproveRequest" name="审批采购申请"/><userTask id="Task_ProcessPayment" name="处理付款"/><endEvent id="EndEvent" name="流程结束"/><!-- 流程流转 --><sequenceFlow id="Flow_1" sourceRef="StartEvent" targetRef="Task_SubmitRequest"/><sequenceFlow id="Flow_2" sourceRef="Task_SubmitRequest" targetRef="Task_ApproveRequest"/><sequenceFlow id="Flow_3" sourceRef="Task_ApproveRequest" targetRef="Task_ProcessPayment"/><sequenceFlow id="Flow_4" sourceRef="Task_ProcessPayment" targetRef="EndEvent"/></process><!-- 图形信息(简略,实际中会包含坐标等信息) --><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane bpmnElement="Collaboration"><bpmndi:BPMNShape id="Pool_Procurement_Di" bpmnElement="Pool_Procurement"/><bpmndi:BPMNShape id="Lane_Employee_Di" bpmnElement="Lane_Employee"/><bpmndi:BPMNShape id="Lane_Leader_Di" bpmnElement="Lane_Leader"/><bpmndi:BPMNShape id="Lane_Finance_Di" bpmnElement="Lane_Finance"/></bpmndi:BPMNPlane></bpmndi:BPMNDiagram></definitions>
XML 文件解释
- 泳池(Pool):
- 在 XML 中,泳池通过 <participant> 元素定义,id="Pool_Procurement" 表示这是一个名为“采购流程”的泳池,关联到具体的流程定义 processRef="ProcurementProcess"。
- 在本例中,只有一个泳池,表示整个流程发生在同一组织内部。如果需要表示多个组织(如公司与供应商之间的交互),可以定义多个 <participant>。
- 泳道(Lane):
- 泳道通过 <laneSet> 和 <lane> 元素定义。每个泳道对应一个角色:Lane_Employee(员工)、Lane_Leader(领导)、Lane_Finance(财务)。
- 每个 <lane> 使用 <flowNodeRef> 指定该泳道包含的流程节点。例如,Lane_Employee 包含“流程开始”和“提交采购申请”两个节点。
- 流程节点与流转:
- 流程节点包括开始事件(<startEvent>)、用户任务(<userTask>)和结束事件(<endEvent>),分别对应流程的各个步骤。
- <sequenceFlow> 定义节点之间的流转顺序,例如从“提交采购申请”到“审批采购申请”。
- 图形信息:
- <bpmndi:BPMNDiagram> 部分定义了流程图的图形化展示信息(如泳池和泳道的布局)。实际中会包含坐标和尺寸信息,这里为简洁起见省略。
泳池与泳道在采购流程中的实际用途
通过上述 XML 和采购流程示例,泳池和泳道的实际用途可以总结如下:
- 职责清晰化:
- 泳道将流程按角色(员工、领导、财务)划分,每个泳道内的活动明确由对应角色负责。例如,员工负责“提交采购申请”,领导负责“审批”,财务负责“处理付款”。这种划分让流程的责任归属一目了然。
- 可视化复杂流程:
- 在复杂的流程中,涉及多个角色或部门时,泳道通过图形化的方式将不同角色的任务分隔开,避免流程图显得杂乱。例如,在采购流程中,泳道直观展示了任务如何从员工流转到领导,再到财务。
- 跨部门协作:
- 如果采购流程涉及外部实体(如供应商),可以使用多个泳池来表示不同组织之间的交互。每个泳池内的泳道再细分角色。例如,一个泳池表示公司内部,包含员工、领导、财务泳道;另一个泳池表示供应商,包含其内部角色。
- 不影响流程逻辑:
- 泳池和泳道仅用于可视化组织,不影响流程的执行逻辑。无论是否使用泳道,流程的流转顺序(由 <sequenceFlow> 定义)保持不变。这使得泳池和泳道成为一种灵活的展示工具,适用于 Activiti/Flowable 等流程引擎。
实际应用场景
在 Activiti 或 Flowable 流程引擎中,泳池和泳道的应用场景包括:
- 流程设计:在流程建模工具(如 Activiti Designer 或 Flowable Designer)中,泳池和泳道帮助设计者直观地分配任务给不同角色。
- 流程监控:在流程运行时,泳道可以帮助管理者快速识别每个任务的负责人,便于跟踪和审计。
- 跨部门流程:对于涉及多个部门的复杂流程(如采购、报销、招聘),泳道可以清晰展示各部门的任务分配。
总结
泳池和泳道在 BPMN 中的核心作用是可视化职责划分。在采购流程中,泳池代表整个流程的容器,泳道则按角色(员工、领导、财务)组织任务,使得流程的责任分配和流转路径更加直观。这种设计不仅便于流程设计和理解,还能提高协作效率,尤其在 Activiti/Flowable 等流程引擎中应用广泛。