Flowable-UI
安装
手把手教大家画了这样一个流程图,虽然说它不是特别好用,但是也不是不能用,也能用。好了,那么接下来的话,我们这个就先告一个段落,接下来我要跟大家说的第二个东西的话,就是另外一个流程绘制工具 Flowable-UI 这个话算是一个比较重要的一个东西,我觉得就是其实不管你以后开发用不用,但是这个东西你都得知道。这个,那么这个的话是什么呢?这个 Flowable 的官方推荐的一个什么流程引擎绘制工具,官方推荐的一个流程引擎辅助工具,可以这么来说叫做流程引擎辅助工具,就是它可以帮助我们更好的去开发这个流程引擎。
官方提供的是一个 war 包,这个虽然是一个 war 包,但是除了将之扔到 Tomcat 中去运行之外,也可以直接执行 java -jar xxx.war 这个命令去启动这个 war 包。
war 下载地址:https://github.com/flowable/flowable-engine/releases/download/flowable-6.7.2/flowable-6.7.2.zip (下载的比较慢有魔法还好)这个 zip 包下载之后,里边有一个 wars 文件夹,里边包含了 flowable-ui 的 war 包。然后,就像启动 Spring Boot 一样,直接启动这个 war 包即可:
启动命令:
java -jar flowable-ui.war
启动之后,默认的端口号是 8080。
启动之后,浏览器输入 http://localhost:8080/flowable-ui/idm/#/login 如果看到如下页面,表示启动成功:
另外,我们也可以使用 docker 来安装,命令如下:
docker run -p 8086:8080 -d flowable/flowable-ui
登录
默认的登录用户名是 admin,默认的登录密码是 test。
看到如下页面,表示登录成功。
功能模块
flowable-ui 是完整的 flowable 体验 DEMO,而不仅仅只是一个流程图的绘制工具。所以它里边不仅可以画流程图,还可以运行流程图,既然能够运行流程图,那么就需要身份管理。
- 任务应用程序:我们绘制好的流程图,可以直接将之发布到一个应用中,然后在这里进行部署,这个模块其实就是这些部署的应用程序。
- 建模器应用程序:这个专门用来画流程图的。
- 管理员应用程序:这个主要用来管理应用,一些具有管理员权限的用户,可以通过这个功能模块去查询 BPMN、DMN、FORM 等等信息。
- 身份管理应用程序:这个功能模块,为所有的 flowable-ui 应用程序提供一个单点登录功能,并且还可以为这些用户设置用户组、用户权限等。
身份管理应用程序
创建用户流程:
填入用户的基本信息,点击保存按钮,就可以完成用户的创建了。
新建的用户不属于任何用户组,所以这个新建的用户是没有权限的,我们现在就可以使用这个新建的用户登录,但是登录成功后,看不到任何功能模块。
用户创建成功之后,可以点击上面的用户组功能,创建用户组:
将来我们在画流程图的时候,可以设置某一个 UserTask 由某一个用户组来处理,这个用户组中的所有用户,将来都可以处理这个 UserTask。
组创建成功之后,可以为这个组添加用户:
最后,我们可以在权限控制中,为用户或者用户组添加相应的权限。
- 访问 idm 应用:访问功能身份管理应用程序。
- 访问 admin 应用:访问功能管理员应用程序。
- 访问 modeler 应用:访问功能建模器应用程序。
- 访问 workflow 应用:访问功能任务应用程序。
- 访问 REST API:访问 REST API 接口的。
管理员应用程序
建模器应用程序
核心功能,主要就是画流程图。
绘制一个报销流程图,大致流程:
- 启动一个流程。
- 执行一个用户任务,这个用户任务交给流程的启动人去执行。这个用户任务中,填入报销材料,例如用户名、金额、用途。
- 系统自动判断一下/或者人工判断报销金额是否大于 1000。
- 如果报销金额小于等于 1000,那么这个报销任务交给 组长审批:
a. 组长审批通过,则流程结束。
b. 组长审批不通过,则流程回到第 2 步,用户重新去填写报销资料。 - 如果报销金额大于 1000,那么这个报销任务先交给经理审批:
a. 经理审批通过,则交给 CEO 审批:
i. CEO 审批通过,则流程结束。
ii. CEO 审批不通过,则流程回到步骤 2 中。
b. 经理审批不通过,则流程回到步骤 2 中。
绘制流程
首先创建一个流程:
!> 注意,模型的 key 在当前应用中必须是唯一的,将来我们通过 Java 代码去操作这个模型的时候,就是通过模型 key 去识别这个模型。
绘制出来的流程图:
在上面的流程图绘制中,有几个东西我要说明一下:
- 如何添加用户任务:
- 用户任务与其它任务之间如何连线(就是拒绝流程的线条如何绘制):
- 线条添加弯曲点
!> 注意,在一个流程图中,开始节点必须有且只有一个,结束节点可以有多个。
!> 画完流程图之后官方提供了一个验证模型功能,可以验证一下我们画的流程图是否符合规范。
表单问题
在流程中,传递流程参数有两种方式:
- 流程变量
- 表单
这两种方式都可以传递参数,区别在于,流程变量是零散的,而表单是整体的。
介绍了流程中传递参数的方式之后,我们继续将我们上方的流程中进行完善下,我们点击校验流程图是否完整很显然是提示我们流程图不完整,因为我们的流程图中没有设置表单,所以我们需要设置表单。
首先是填写报销信息的表单,我们可以在用户任务中设置表单,也可以在用户任务的右侧设置表单,这里我们选择在右侧设置表单。
到了这里我们的表单就设置好了,我们可以点击右上角的保存按钮,保存我们的流程图。
网关条件设置:
我们先看组长审批这一条线的流程,目前所有的节点是哪些人我还没有一一的分配的,我先将节点对应的表单等信息完善,然后再去分配节点所对应的人。组长审批,组长需要操作的就是同意与拒绝。
新建表单,表单的key一定要牢牢的记住,后面会用到,我这里叫做 group_leader_approval
。
我们这里使用结果,之前使用的是设计,设计也可以办到,但是结果更加的方便,我们这里使用结果,然后我们将结果设置为同意与拒绝。
拒绝的话,我们需要设置一个原因,这个原因是必填的,所以我们需要设置一个必填的表单,这个表单的key叫做 group_leader_approval_reason
。在 Flowable 中,想要获取表单的结果信息,需要使用一个固定的写法 form_key_outcome,这个 form_key_outcome 就是我们在上面设置的结果的 key,这里就是 group_leader_approval
。
同意同理可证,我们这里就不再赘述了。
大于 1000 的情况,我们需要设置两个节点,一个是经理审批,一个是 CEO 审批,我们先来设置经理审批。
新建表单,表单的key一定要牢牢的记住,后面会用到,我这里叫做 manager_approval
。
采用结果:
同意与拒绝两条线自己设置即可。
CEO 审批,我这里要介绍一个新的知识点就是用表单中的引用来完成同意与拒绝的操作。
新建表单, 表单 Key 名为 CEO_approval:
表单新建完毕之后我们用单选按钮与下拉框都可以,我这里采用单选按钮的形式去演示这个知识点。
给单选按钮取一个 id,我这里命名为 CEO_approval_radio_button。
这里不用记着表单的 Key 了,我们直接使用表单的引用,表单的引用就是我们在上面设置的表单的 id,这里就是 CEO_approval_radio_button
。所以我们设置流条件就是和之前设置金额大于等于或者小于等于设置方式是一样的。
最终再点击验证流程图是否完整,我们可以看到流程图已经完整了。
对于通过表单传递的参数,我们也可以按照流程变量的方式去访问单个的表单参数,例如在上面的流程图中,我们有 ${money <= 1000}
,这里的 money 实际上是表单中的参数,但是我们可以直接通过 $
表达式去访问。还有比如 ${managers_approve_or_reject_radio_button == "拒绝"}
,也是直接访问表单中的变量。
任务处理人
我们这样子去划分
- zhangsan:是一个普通员工,他可以发起报销流程。
- lisi:是一个组长,他可以审批报销金额小于等于 1000 的报销流程。
- wangwu:是一个经理,他可以审批报销金额大于 1000 的报销流程。
- zhaoliu:是一个 CEO,他可以审批报销金额大于 1000 的报销流程。
虽然我这里只是创建了这些用户,有些概念的东西我还是要这里说明:
- 候选组:这个用户组中的所有用户都可以处理这个任务,但是只有一个用户可以处理这个任务(可以同时指定多个用户组来处理这个 UserTask,这个处理的时候,也需要先认领,再处理)。
- 候选用户:这个用户可以处理这个任务,但是如果这个用户不处理这个任务,那么这个任务就会被挂起,直到这个用户处理这个任务(可以同时指定多个用户来处理这个 UserTask,将来用户在处理的时候,需要先认领(Claim)任务,然后才能处理)。
- 分配给单个用户:这个任务只能由这个用户来处理,如果这个用户不处理这个任务,那么这个任务就会被挂起,直到这个用户处理这个任务(直接指定某一个具体的用户来处理这个流程,注意这里只能指定一个用户,并且这个用户将来在处理任务的时候,不需要认领,直接就可以处理)。
- 分配给流程的发起人:这个任务只能由流程的发起人来处理,如果这个用户不处理这个任务,那么这个任务就会被挂起,直到这个用户处理这个任务(流程发起人,由流程的启动人/发起人来处理这个流程)。
?> 密码分别为:123
根据划分结果将对应的用户在身份管理应用程序中一一创建好。
然后在返回到建模器应用程序中,我们可以在用户任务中设置用户, 首先是填写报销信息的用户任务,我们将这个用户任务分配给 zhangsan。然后我想了想,还是按照流程的发起人来进行填报,也就是说,这个流程是谁发起的那么这个填报就有他来写ok说明白了,开始设置。
然后是组长审批,我们将这个用户任务分配给 lisi。
然后是经理审批,我们将这个用户任务分配给 wangwu。
最后是 CEO 审批,我们将这个用户任务分配给 zhaoliu。
基本概念
- 流程定义(ProcessDefinition):我们绘制的流程图、流程的 XML 文件,就是我们的流程定义。
- 流程(ProcessInstance):一个启动了流程实例就是一个流程,流程可以是已经执行完毕的,也可以是正在执行中的。流程的定义相当于是一个类,而流程则相当于是一个对象。
- 任务(Task):一个 ProcessInstance 中,需要具体处理的节点就是一个任务。
任务应用程序
在 flowable-ui 中,绘制好的流程图,可以直接部署称为一个 App。
在上方,我们已经为每一个节点设置了用户,那么我们就可以直接部署成为一个 App。来进行走一遍流程,这个走流程的过程我就不演示出来了自行去体验。