Flowable 会签设置指南

Flowable 是一个轻量级的 BPMN 流程引擎,可以方便地创建和管理业务流程。在复杂的业务流程中,会签(即多个人共同参与、并需共同决定的流程步骤)是一个常见需求。本篇文章将带你了解如何在 Flowable 中设置会签功能,并包含完整的 Java 代码示例。

会签的基本概念

会签通常要求多个参与者共同审批一个请求。只有在所有参与者都同意后,流程才会继续。会签可以通过 AND 条件或者 OR 条件来实现。在 AND 会签中,所有参与者必须同意;在 OR 会签中,只需至少一个参与者同意。

Flowable 中的会签设置

在 Flowable 中,通过在流程定义中添加会签任务节点(User Task)来实现会签功能。以下是设置会签的基本步骤:

  1. 建模流程:使用 BPMN 模型器定义你的流程,包括会签任务。
  2. 配置任务:为会签分配参与者。
  3. 执行流程:通过 Java 代码启动并管理流程实例。

BPMN 流程示例

我们可以使用类似下面的 BPMN 代码来设置会签任务:

<process id="sampleProcess" isExecutable="true">
    <startEvent id="startEvent" />
    <userTask id="approveTask" name="会签审批" flowable:assignee="${assignee}" />
    <endEvent id="endEvent" />
    <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="approveTask" />
    <sequenceFlow id="flow2" sourceRef="approveTask" targetRef="endEvent" />
</process>

Java 代码示例

以下是一个示例,介绍如何在 Java 中使用 Flowable API 来创建和启动流程实例。

1. 添加依赖

首先,确保在您的 Maven 项目中添加了 Flowable 相关依赖:

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter-process</artifactId>
    <version>6.8.0</version>
</dependency>

2. 流程启动代码

下面是一个 Java 代码示例,用于启动会签流程。

import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.ProcessEngine;

public class StartProcess {

    public static void main(String[] args) {
        ProcessEngine processEngine = ProcessEngineConfiguration
                .createStandaloneProcessEngineConfiguration()
                .buildProcessEngine();

        RuntimeService runtimeService = processEngine.getRuntimeService();
        
        // 设置参与者
        String assignee = "user1,user2"; // 假设有两个参与者

        // 启动流程实例
        runtimeService.startProcessInstanceByKey("sampleProcess", 
                Collections.singletonMap("assignee", assignee));
    }
}

3. 处理会签

在会签过程中,需要定义一个处理器,用于处理会签逻辑。

public class SignTaskHandler implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        String assignee = (String) execution.getVariable("assignee");
        // 处理会签逻辑
        System.out.println("当前参与者:" + assignee);
        // 假设进行审批逻辑,并更新流程变量
        execution.setVariable("approvalResult", true); // 举例为同意
    }
}

流程执行流程

以下是会签流程的基本执行顺序,可以使用 Mermaid 语法表示:

sequenceDiagram
    participant User1
    participant User2
    participant System

    User1->>System: 提交审批请求
    System->>User1: 发送会签任务
    User2->>System: 开始会签审批
    System->>User2: 发送会签任务
    User1->>System: 提交同意
    User2->>System: 提交同意
    System->>User1: 流程结束

数据模型关系图

接下来,我们可以用 Mermaid 语法表示数据模型的关系:

erDiagram
    PROCESS {
        String id PK
        String name
    }

    TASK {
        String id PK
        String name
        String processId FK
        String assignee
    }

    PROCESS ||--o{ TASK : contains

结语

本文介绍了如何在 Flowable 中设置会签功能,包括 BPMN 流程建模、Java 代码实现、流程执行和数据模型的关系。通过灵活配置和强大的 API,Flowable 能够满足复杂业务场景的需求,实现高效的流程管理。

希望通过本文能够帮助你更深入地理解和使用 Flowable。如果你有进一步的需求或问题,欢迎加入 Flowable 社区进行讨论!