深入 Flowable 流程设计:用 Modeler 可视化构建流程

在上一篇文章中,我们通过 XML 文件定义了一个简单的请假流程。但在实际项目中,直接手写 XML 显然不现实 —— 复杂流程可能包含几十个节点和网关,靠代码维护简直是灾难。这时候,Flowable Modeler 这款可视化流程设计工具就派上用场了。

今天就带大家从零开始,用 Flowable Modeler 设计出能直接运行的业务流程,包括分支审批、并行任务、动态表单这些实战中必备的功能。

一、Flowable Modeler 是什么?

Flowable Modeler 是 Flowable 官方提供的 Web 版流程设计工具,它就像 "流程界的 PowerPoint"—— 通过拖拽节点、连线的方式就能画出符合 BPMN 2.0 规范的流程图,设计完成后可以直接导出为 XML 部署到系统中,完美解决了手写流程定义的痛点。

它的核心优势在于:

  • 可视化操作,非技术人员也能参与流程设计
  • 自动生成标准 BPMN 2.0 XML,避免手动编写的语法错误
  • 支持流程校验,提前发现设计缺陷
  • 可直接与 Flowable 引擎集成,设计完就能测试运行

二、搭建 Flowable Modeler 环境

2.1 快速启动(推荐新手)

最简单的方式是使用 Flowable 提供的 Docker 镜像,一行命令即可启动:

docker run -d -p 8080:8080 flowable/flowable-ui

等待镜像下载完成后,访问http://localhost:8080/flowable-ui,默认用户名密码都是admin,登录后就能看到 Modeler 的主界面。

2.2 手动部署(适合需要定制的场景)

如果需要本地化部署或定制配置,可以下载 Flowable UI 的 WAR 包:

  1. Flowable 官网下载flowable-ui.war
  2. 将 WAR 包放入 Tomcat 的 webapps 目录
  3. 启动 Tomcat,访问http://localhost:8080/flowable-ui
  4. 首次登录后建议修改密码(在右上角个人中心设置)

三、Modeler 界面快速入门

登录后点击左侧菜单的 "模型"→"流程模型",进入流程设计工作台,主要区域分为三部分:

  1. 左侧工具栏:包含各种 BPMN 节点(事件、活动、网关等),可以直接拖拽到画布
  2. 中间画布:流程设计的主区域,用于放置节点和连线
  3. 右侧属性面板:选中节点或连线后,可配置其属性(如名称、负责人、条件等)

必知的核心节点类型

节点类型

图标

作用

开始事件

⭐️

流程的起点,每个流程有且仅有一个

结束事件

⚪️

流程的终点,一个流程可以有多个

用户任务

👤

需要人处理的任务(如审批、填写表单)

服务任务

🔧

自动执行的任务(如调用接口、执行代码)

排他网关

按条件分支(类似 if-else)

并行网关

并行执行多个分支(同时进行)

包含网关

➕❓

结合排他和并行的特性,按条件并行

事件网关

⚡️

基于事件触发分支(如超时、消息)

四、实战:设计带分支的请假流程

我们来设计一个更贴近实际的请假流程:

  • 员工提交请假申请
  • 3 天以内由部门经理审批
  • 3 天以上需部门经理审批后再经 HR 审批
  • 审批通过 / 驳回后流程结束

步骤 1:创建新流程模型

点击 "创建流程模型" 按钮,填写:

  • 名称:员工请假流程
  • 键:leave-process(这个键会作为流程定义的唯一标识)
  • 描述:支持 3 天以内 / 以上的分级审批流程

点击 "创建" 进入设计界面。

步骤 2:添加基础节点

  1. 从左侧拖拽 "开始事件" 到画布
  2. 拖拽 "用户任务" 到画布,在右侧属性面板设置:名称:员工提交申请分配方式:发起人(Assignee 为${initiator})
  3. 再添加一个 "用户任务",设置为 "部门经理审批",Assignee 设为${manager}
  4. 最后添加 "结束事件"

步骤 3:添加分支逻辑(排他网关)

  1. 拖拽 "排他网关" 到 "部门经理审批" 之后
  2. 从 "部门经理审批" 画连线到排他网关
  3. 从排他网关画两条连线到两个新的 "用户任务":
  • 第一条连线:
    • 名称:3 天以上
    • 条件表达式:${days > 3}(注意用 EL 表达式)
    • 目标节点:新建 "HR 审批" 任务(Assignee 设为hr)
  • 第二条连线:
    • 名称:3 天以内
    • 条件表达式:${days <= 3}
    • 目标节点:直接连到结束事件

步骤 4:完善流程走向

  1. 从 "HR 审批" 画连线到结束事件
  2. 检查所有节点是否都有正确的入线和出线(没有出线的节点会导致流程卡住)
  3. 点击顶部的 "保存" 按钮,再点击 "验证" 检查是否有设计错误

步骤 5:导出流程定义 XML

设计完成后,点击右上角 "操作"→"导出为 BPMN 2.0 XML",就能得到可部署的流程定义文件。这个 XML 和我们上一篇手写的本质相同,但格式更标准,包含了所有节点属性和连线条件。

五、给流程添加表单:收集与展示数据

流程光有节点还不够,还需要收集数据(如请假天数、原因)。Modeler 支持两种表单:

5.1 内置表单设计器

  1. 选中 "员工提交申请" 任务,在右侧属性面板找到 "表单"→"引用表单"
  2. 点击 "创建新表单",进入表单设计界面
  3. 拖拽 "文本框" 组件,设置:标签:请假人绑定字段:applicant(后续会作为流程变量)默认值:${currentUser}(动态获取当前登录用户)
  4. 再添加 "数字框"(标签:请假天数,绑定字段:days)和 "文本域"(标签:请假原因,绑定字段:reason)
  5. 保存表单后,返回流程设计界面,此时该任务会显示 "已关联表单"

5.2 关联外部表单(适合复杂场景)

如果表单包含复杂校验或业务逻辑,可以关联外部 URL:

  1. 在任务属性的 "表单" 设置中选择 "外部表单"
  2. 填写表单 URL:/leave/form?taskId=${taskId}(通过 taskId 传递任务 ID)
  3. 这样流程运行到该任务时,会自动跳转到外部表单页面

六、设计并行流程:多任务同时处理

假设我们需要一个 "新员工入职流程",要求 IT 部门配置电脑和行政部门办理工牌同时进行,这种场景就需要并行网关:

  1. 从开始事件→"填写入职信息" 用户任务
  2. 添加 "并行网关",从填写任务连到该网关
  3. 从并行网关画出两条线:第一条到 "IT 配置设备" 任务  第二条到 "行政办理工牌" 任务
  4. 再添加一个并行网关,作为两个任务的汇聚点
  5. 最后连到结束事件

并行网关的特点是:

  • 进入并行网关后,所有出线会同时激活(两个任务同时创建)
  • 必须等所有入线的任务都完成,才会通过汇聚网关继续流程
  • 不需要设置条件,纯粹按并行逻辑执行

七、流程设计实战技巧

技巧 1:使用流程变量传递数据

所有表单字段和手动设置的变量都会作为流程变量存在,可在任意节点使用:

  • 在任务负责人中使用:${manager}(动态指定审批人)
  • 在网关条件中使用:${days > 3 && type == 'annual'}(多条件判断)
  • 在服务任务中使用:调用接口时传递${applicant}参数

技巧 2:添加事件监听

在节点属性的 "事件" 标签中,可以配置:

  • 任务创建时触发:发送通知给负责人
  • 任务完成时触发:更新业务系统状态
  • 流程结束时触发:归档流程数据

例如给 "部门经理审批" 任务添加创建事件,自动发送邮件提醒:

// 事件监听器代码示例(需实现ExecutionListener接口)
public class TaskCreateListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        String assignee = delegateTask.getAssignee();
        String applicant = (String) delegateTask.getVariable("applicant");
        emailService.send(assignee, "新审批任务", applicant + "申请请假,请处理");
    }
}

技巧 3:版本管理与流程迁移

流程设计不可能一蹴而就,Modeler 支持版本控制:

  • 每次修改保存后,点击 "新建版本" 创建新版本
  • 旧版本流程实例可以继续运行,新实例自动使用最新版本
  • 如需将旧实例迁移到新版本,可在 Flowable Admin 中操作

八、将设计好的流程部署到引擎

  1. 在 Modeler 中点击 "操作"→"部署",填写部署名称
  2. 部署成功后,流程定义会被存入数据库
  3. 此时可以通过我们上一篇写的 RuntimeService 启动流程实例:
// 启动带变量的流程实例
Map<String, Object> variables = new HashMap<>();
variables.put("initiator", "zhangsan");
variables.put("manager", "lisi");
variables.put("days", 5); // 超过3天会触发HR审批
runtimeService.startProcessInstanceByKey("leave-process", variables);

九、常见设计错误与避坑指南

  1. 连线条件格式错误:EL 表达式必须用${}包裹,如${days>3}不能写成days>3
  2. 排他网关缺少默认分支:所有条件都不满足时会报错,建议留一个无条件的默认分支
  3. 并行网关未成对使用:每个并行网关必须有对应的汇聚网关,否则流程会异常结束
  4. 任务未设置负责人:用户任务必须指定 assignee 或 candidateUsers,否则会变成 "无人认领" 的孤儿任务
  5. 表单字段与变量名不匹配:表单绑定的字段名必须和后续流程中使用的变量名一致(如表单用了leaveDays,网关条件就不能用days)

十、小结与下一篇预告

今天我们掌握了:

  • 用 Flowable Modeler 可视化设计流程的完整流程
  • 核心节点(网关、任务、事件)的使用场景
  • 分支流程、并行流程的设计方法
  • 表单与流程变量的关联方式

这些技能足以应对 80% 的业务场景。但实际开发中,我们还需要处理更复杂的需求:比如审批人需要动态从数据库查询、流程中途需要修改节点、超时未处理自动提醒等。

下一篇文章,我们将深入 Flowable 的 API,学习如何用代码控制流程运行,包括动态分配任务负责人、监听流程事件、处理异常流程等实战技巧。

如果在设计过程中遇到奇怪的报错,可以在评论区留言,我会优先解答大家的问题~

附:本文设计的请假流程 BPMN 文件已上传至 GitHub,需要的同学可以私信我获取链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

练习时长两年半的程序员小胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值