Flowable-UI
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。来进行走一遍流程,这个走流程的过程我就不演示出来了自行去体验。
Flowable-UI的更多相关文章
- flowable ui 界面请假流程操作实例
如题,网上的教程多是代码居多,UI界面操作实例那更是一页难求,楼主分享下几天来的入坑经历,希望有需要了解,但是不知道去哪里了解的小伙伴,看完我的文章后能有所启发,文章有不足之处还请指正,若有相关问题请 ...
- flowable初体验踩坑及概述
遵守bpmn2.0协议(前提)(还在找比较好用的绘图工具) 可以使用idea插件进行绘图保存成xml进行改造编写 Flowable BPMN visualizer和JBoss jBPM , 暂时使用的 ...
- Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】
先简单说说RxJava的用途与价值 原文出处:Android RxJava 2 的用法 用途: 异步 (也就是开线程跳转) 价值: 面对复杂的逻辑,它依然 简洁 ,代码 易读 RxJava2 与 Rx ...
- Flowable BPMN 简单使用
1.Flowable是什么? Flowable是一个使用Java编写的轻量级业务流程引擎.Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义 ...
- Flowable学习入门
一.Flowable简介 1.Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎.Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标 ...
- springBoot集成flowable
前言 Flowable可以十分灵活地加入你的应用/服务/构架.可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎. 以JAR形式发布使Flowable可以轻易加入任何Java环境:Ja ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
- “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...
- ABP框架 - Swagger UI 集成
文档目录 本节内容: 简介 Asp.net Core 安装 安装Nuget包 配置 测试 Asp.net 5.x 安装 安装Nuget包 配置 测试 简介 来自它的网页:“...使用一个Swagger ...
随机推荐
- Solon 开发进阶,四、启动参数说明
Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 启动参数,在应用启动后会被静态化(为了内部更高效的利用).比如,想通过体外扩展加载配置, ...
- Axure 标记元件
快照:可以用来表示控件的截图功能 箭头:有了连线,基本很少用它 便签:相关于便利贴,写些说明.备注, 标记:标记好数字,对应数字的标记做解释说明
- ajax补充说明 多对多三种创建方式 django内置序列化组件 ORM批量操作数据 分页器 form组件入门
目录 ajax补充说明 request.is_ajax() ajax回调函数接收返回值 ajax回调函数 接受json数据 第一种方式:后端使用json模块 第二种方式:后端返回JsonRespons ...
- M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS)
A - Kyu in AtCoder 水题 B - Magic 2 题意很好理解,但写的时候注意一下边界 void solve() { int a, b, c, k; cin >> a & ...
- Java 中初始化 List 的五种方法
1.构造 List 后使用 List.add 初始化 1 List<String> stringList = new LinkedList<>(); 2 stringList. ...
- 5 Englishi 词根
词根 1 ced/cess = go 行走 precede pre=before ced =go unprecedentedly un pre ced +ed变成adj +ly 变 ...
- C# 几种常见数据结构(数组、链表、Hash表)
一.内存上连续存储,节约空间,可以索引访问,读取快,增删慢 Array: 在内存上连续分配的,而且元素类型是一样的,可以坐标访问;读取快--增删慢,长度不变 { //Array:在内存上连续分配的,而 ...
- 【Freertos】任务切换分析
任务切换实现 xPortPendSVHandler: mrs r0, psp // 获取进入异常时的进程栈 isb ldr r3, =pxCurrentTCB // 加载线程控制块地址到r3 ldr ...
- udp编程及udp常见问题处理
前言 UDP协议是User Datagram Protocol的缩写,它是无连接,不可靠的网络协议.一般使用它进行实时性数据的传输,主要是因为它快,但因为它是不可靠的一种传输协议,所以不可避免的会出现 ...
- [转帖]Linux系统NVME盘分区和挂载
https://www.jianshu.com/p/04327f1b97cb 查看系统里面识别到的硬盘和分区的信息 $ sudo fdisk -l Disk /dev/nvme1n1: 1.8 TiB ...