作者:汤圆

个人博客:javalover.cc

前言

Flowable是一个使用Java编写的轻量级业务流程引擎,它属于Activiti的一个分支。

Flowable UI 其实就是 Flowable 的 WEB 应用,用来设计流程、处理流程等等。

本节主要介绍如何创建一个简单的流程

本文需对 Flowable 和 BPMN2.0 相关概念有一个大致的了解,参考Getting Started · Flowable Open Source Documentation

目录

  1. 下载并启动 Flowable UI 应用
  2. 创建一个流程模型
  3. 发布并启动流程
  4. 踩坑记录(后续计划)

正文

可以直接看图片,看完对流程的创建也会有一个大致的印象

1. 下载并启动 Flowable UI 应用

这里我们直接从官网下载;如下图所示

image-20211102142517406

温馨提示:网页访问可能会比较慢,需耐心等待

下载解压,进入wars目录,在当前目录打开命令行,通过命令行来启动 Flowable UI 应用;

文件管理器的地址栏输入 cmd 即可在当前目录打开命令行;输入 powershell也可以

启动的命令为:java -jar .\flowable-ui.war

启动后,一般是没啥问题的,成功后会显示下图(后面还有很多打印日志,没帖出来)

image-20211102143021944

默认数据库H2,默认端口8080

2. 创建一个流程模型(重要)

访问界面

上面启动成功后,我们就可以访问 http://localhost:8080/flowable-ui ,如下所示,第一次会自动跳转到登录界面:

image-20211102145605893

输入默认的账号/密码:admin/test

登录后,看到仪表盘如下所示:

image-20211102145729129

下面简单介绍下这4个模块:

  1. 任务应用程序:这个模块主要进行流程相关的操作,比如发起、审核等,发布后的应用程序会显示在这里

  2. 建模器应用程序:这个模块是核心,主要用来创建流程、发布流程等等

  3. 管理员应用程序:这个模块就是管理发布的应用程序,可以上传/删除应用程序等等

  4. 身份管理应用程序:这个模块就是用户管理模块,包括用户的创建、权限分配等等

接下来,让我们来创建一个流程模型;

创建流程

点击建模器应用程序,显示如下所示:

image-20211102150432342

点击创建流程,并按照如下所示,进行填写:

image-20211102151845189

这里需要注意两点:

  1. 模型key是唯一的,不能跟其他的模型key重复
  2. 如果用鼠标在输入框从右往左拉,那么这个编辑框就会消失(体验不好,别的倒没啥)

创建成功后,会进入下面的界面:

image-20211102152334437

这里简单介绍下界面的布局:

  • 左边是元素面板,包含了设计流程模型的各种元素,比如启动事件、用户任务等
  • 上面是工具面板,包括保存、校验、放大、缩小等
  • 下面是属性信息,用来设置元素的各种属性
  • 中间就是画布,将左边的元素拖拽过来,就可以设计流程了

接下来我们开始设计一个简单的流程,就是

  • 一个用户发起请假的请求(请求表单)
  • 然后系统进行判断:(脚本判断)
    • 如果<10天,就自动通过(排他网关);
    • 如果>=10天,就需要另一个用户确认,最后再通过
创建用户任务

我们先将左边的 活动-》用户任务 拖拽到画布中,如下图所示:

image-20211102153207671

创建表单

然后我们需要编写一个请求表单,存放用户的请求信息

先选中画布中的用户任务,然后点击下面属性中的表单引用,如下所示:

image-20211102153357834

会弹出下面的表单列表界面,此时表单列表为空

IRpQSVCmb7nPGcU

我们点击新表单,来创建一个表单,并填充表单的名称和key(这里的key同理,也是唯一)

image-20211102153730715

创建成功后,会显示下面的表单编辑界面,类似流程编辑;左边是表单元素,可拖拽到画布中

image-20211102153847962

这里我们拖拽 一个文本、两个日期、一个多行文本,如下所示:

image-20211102154006759然后编辑标签,我们先编辑第一个文本标签,点击标签右侧的铅笔图标进入编辑界面,如下所示

image-20211102154124231

这里的id是根据标签的名称自动生成的(自动生成的id都是小写)

如果想自定义id,可选中覆盖id,然后手动输入

两个日期标签,我们也来编辑下,如下所示,一个DateBegin,一个DateEnd

image-20211102154314945

编辑完成后,我们点击左上角的保存图标,即可保存表单,如下所示,会让你确认表单信息,这里我们点击保存和关闭编辑器

image-20211102154434115

保存后,会自动跳转到刚才的流程定义界面;

创建脚本任务

接下来,我们定义一个脚本任务,用来计算请假的天数

image-20211102154602374

脚本格式:groovy,脚本:点击后会打开一个对话框,填入下面的脚本代码:

org.joda.time.Days days = 
org.joda.time.Days.daysBetween(datebegin, dateend);
execution.setVariable("amountOfVacationDays", days.getDays());

这个脚本的类文件已经包含在war项目中,所以直接引用即可(这里我们只要大概看懂语句的意思就行)

image-20211102154656669

创建决策任务

将左边的决策任务拖拽到画布中,如下所示

image-20211102155319760

接下来我们选中决策任务,找到属性决策表引用,然后点击,如下所示:

image-20211102155558345

点击后,会显示决策表列表,此时为空,我们新建一个,点击新建按钮

image-20211102155646360

然后填入对应的决策表信息,如下所示:(key和前面介绍的请求表单同理,也是唯一)

image-20211102155756443

点击创建决策表,会来到决策表的编辑界面,左边是输入条件,右边是输出条件

image-20211102155924977

这里我们用之前的逻辑来设计,就是以10天为界限,10天以内自动通过,10天以外需经其他用户同意;

先编辑左边的输入条件,如下所示,其中变量名称就是我们之前groovy脚本设置的那个请假天数变量,类型为number

image-20211102160313359

再编辑右边的输出结果,如下所示,这里的变量就是我们自己定义的,后面排他网关会用到

image-20211102160450939

接下来,我们编辑对应的规则,如下所示,意思就是请假天数<10,就不需要经过别人同意;>=10才需要

image-20211102160644266

然后保存,返回到流程定义的界面

创建排他网关

下面我们再拖拽一个排他网关,用来筛选请求任务,这里筛选的条件就是刚才决策任务的输出变量 managerApprovalNeeded

image-20211102161418938

再创建一个用户任务

这里的用户任务用来审批前面用户的请假流程,如下所示:

image-20211102161530599

创建结束事件

创建一个结束事件,如下所示

image-20211102161657303

连线

这里就是最后的步骤了,用序列流 把所有的任务和事件都串起来,

这里的序列流就是箭头连线,如下所示:

先选中用户任务元素,然后将序列流拖拽到下一个元素,即可完成连线

image-20211102161933828

然后我们把其他的也连起来,连完后如下所示:

image-20211102162120388

连完之后,还需要设置排他网关的序列流,如下所示:其中的条件表达式为${managerApprovalNeeded}

image-20211102162501047

image-20211102162533038

另一个序列流则设置为${!managerApprovalNeeded}

image-20211102163022932

分配用户

最后我们需要把上面的两个用户任务指派给指定的用户,这里为了方便我们直接指派给发起人,即admin管理员,如下所示

image-20211102163139439

image-20211102163251579

后面那个用户任务也是同样的设置,这里就不贴图了;

接着我们再把每个节点都起个名字,如下所示,看起来直观点

image-20211102163506313

最后我们保存流程,点击左上角的保存按钮,会弹窗如下所示,点击保存即可

image-20211102163609049

3. 发布并启动一个流程

下一篇Flowable-UI最新版6.7.0入门篇之启动流程 - 掘金 (juejin.cn)

4. 遇到的坑

Flowable-UI最新版6.7.0入门篇之踩坑记录 - 掘金 (juejin.cn)

总结

本节主要介绍了一个简单流程的创建,其中的元素包括用户任务(发起人、审批人)、请求表单、脚本任务(groovy)、决策任务(配合网关);

这里只是涉及到了皮毛,Flowable UI还有很多其他元素,大家有空可以去参考官网