【若依】23、流程图绘制
经典工具:Flowable Eclipse Designer;但是,这是一个 Eclipse 插件。 IDEA:
- IDEA 默认就有一个流程图绘制工具(不推荐)。
- IDEA 流程绘制插件 flowable-bpmn-visualizer,勉强能用。
其他的绘制工具:
- flowable-ui 这是官方提供的一个 flowable 的工具,里边有很多功能,包括画流程图。
- bpmn.js 这个工具是 Camunda 提供的,可以嵌入到项目中,利用 bpmn.js 可以开发一个流程绘制工具。原生的 bpmn.js 画出来的流程图只能在 Camunda 中使用,但经过改造,就可以在 flowable 中使用了。
flowable-bpmn-visualizer
插件安装:
安装完,重启 IDEA 即可。 在 IDEA 中,当我们安装了这个插件之后,新建文件的时候,就有相应的选项:
选择这个就可以新建一个流程图了。
绘制关键节点:
注意:这里如果是传递变量需要用 ${} 表达式,如果是字符串,直接写即可; 例如,这个节点由一个名为 yueyazhui 的用户来处理,那么写法如下:
例如,这个节点由一个名为变量 user 的值的用户来处理,那么写法如下:
例如,这个节点由一个角色名为 managers 的用户来处理,那么写法如下:
注意:从互斥网关(排他性网关)出来的线条中,有一个 Condition expression,表示这个线条执行的条件。 当用户在审批的时候,本质上其实就是传递一个变量,变量值为 true 或者 false。
${approve}
表示这个变量的名字为 approve。批准发邮件的服务: 齿轮表示这是一个服务任务,也就是系统自动完成的,系统自动完成的方式有很多种,其中一种是提前将自己的业务逻辑在 Java 类中写好,然后这里配置一下类的完整路径即可。
从互斥网关出来后,approve 变量如果为 false,那么就进入到拒绝发送邮件的服务中。
flowable-ui
Flowable 官方推荐的一个流程引擎辅助工具。
1. 安装
有两种方式: 官方提供的 war 包 下载地址:https://github.com/flowable/flowable-engine/releases/download/flowable-6.7.2/flowable-6.7.2.zip;这个 zip 包中有一个 wars 文件夹,里边包含了 flowable-ui 的 war 包,直接启动这个 war 包即可; 注意:解压路径不要有中文。 默认的端口号是 8080。 启动命令:
1
java -jar flowable-ui.war --server.port=8060
页面浏览地址:http://localhost:8060/flowable-ui。
docker 安装
1
docker run -d -p 8060:8080 flowable/flowable-ui
2. 登录
3. 功能模块
flowable-ui 是完整的 flowable 体验 demo,而不仅仅只是一个流程图绘制工具。所以它不仅可以画流程图,还可以运行流程图,既然能够运行流程图,那么就需要身份管理。
- 任务应用程序:绘制好的流程图,可以直接发布到一个应用中,然后在这里进行部署,这个模块其实就是这些部署的应用程序。
- 建模器应用程序:画流程图。
- 管理员应用程序:管理应用,具有管理员权限的用户,可以通过这个功能模块去查询 BPMN、DMN、FORM 等信息。
- 身份管理应用程序:这个功能模块,为所有的 flowable-ui 应用程序提供一个单点登录功能,并且还可以为这些用户设置用户组、用户权限等。
4. 身份管理应用程序
创建用户
新建的用户是没有权限的;所以新建的用户登录成功后,看不到任何功能模块。 创建用户组,添加用户
将来在画流程图的时候,可以设置某一个 UserTask 由某一个用户组来处理,这个用户组中的所有用户,都可以处理这个 UserTask。 为用户或用户组添加相应的权限
- 访问 idm 应用:访问功能4.
- 访问 admin 应用:访问功能3。
- 访问 modeler 应用:访问功能2.
- 访问 workflow 应用:访问功能1.
- 访问 REST API:访问 REST API 接口的。
5. 管理员应用程序
6. 建模器应用程序
核心功能:画流程图。 绘制报销流程:
- 启动流程。
- 执行用户任务,这个用户任务交给流程的启动人去执行。这个用户任务中,填入报销资料,例如用户名、金额、用途。
- 系统自动判断报销金额是否大于 1000。
- 如果报销金额小于等于 1000,那么这个报销任务交给组长审批:
- 组长审批通过,则流程结束。
- 组长审批不通过,则流程回到第 2 步,用户重新去填写报销资料。
- 如果报销金额大于 1000,那么这个报销任务先交给经理审批:
表单问题
在流程中,传递流程参数有两种方式:
- 流程变量
- 表单
这两种方式都可以通过 $ 表达式去访问,例如${money <= 1000}
${ceo_approve_or_reject_radio == "批准"}
;区别在于,流程变量是零散的,而表单是整的。
任务处理人
- 流程发起人,由流程的启动人/发起人来处理这个任务。
- 单个用户,直接指定某一个具体的用户来处理这个任务,注意这里只能指定一个用户,并且这个用户将来在处理任务的时候,不需要认领,直接就可以处理。
- 候选用户:可以同时指定多个用户来处理这个任务,将来用户在处理的时候,需要先认领(Claim)任务,然后才能处理。
- 候选组:可以同时指定多个用户组来处理这个任务,这个处理的时候,也需要先认领,再处理。
基本概念
- 流程定义(ProcessDefinition):绘制的流程图、流程的 XML 文件。
- 流程(ProcessInstance):一个启动了的流程实例就是一个流程,流程可以是已经执行完毕的,也可以是正在执行中的。流程的定义相当于是一个类,而流程则相当于是一个对象。
- 任务(Task):一个 ProcessInstance 中,需要具体处理的节点。
7. 任务应用程序