flowable流程图详细绘制教程

文章目录

  • 前言
  • 一、flowable是什么?
    • 回答下之前的问题
  • 二、flowable-modeler使用
    • 1. 使用步骤
    • 2.开始绘制
      • 弄一个请假的流程
  • 三 加载该流程
  • 总结


前言

flowable有些晦涩难懂的东西:

我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在工作中的不断接触,总结下目前的学习成果; 我最初接触的时候,遇到过如下问题,不知道你是否也有同样的疑问;

  1. 工作流适合什么样的场景?
  2. 工作流中一些术语
  3. 工作流这个工作如何开始,从哪里开始?
  4. 模型如何绘制? 已有的模型如何修改?
  5. 工作流的模型绘制后,如何在项目中使用?
  6. 工作流如何和业务数据集成?
  7. 工作流中的表单是做什么的?

我用的idea 查看流程图需要安装插件Flowable BPMN visualizer

一、flowable是什么?

可以参考我之前写的一篇文章: springboot集成flowable工作流
下载此文章项目 项目地址

回答下之前的问题

  1. 如果你接触过设计模式中的责任了模式,那么就更加理解这个东西了,它就是规定了一个事情的流转过程,流转条件,流转变量,流转分支等等这些具体细节,他最终是用xml来表示的
  2. 工作流中的术语和含义
## 1. 流程定义 (Process Definition)
- **定义**:流程定义是工作流的蓝图,描述了业务流程的各个步骤及其之间的关系。
- **示例**:一个请假申请流程的定义可能包括“提交申请”、“主管审批”、“人事审批”等步骤。

## 2. 流程实例 (Process Instance)
- **定义**:流程实例是流程定义的具体执行实例,表示一次具体的业务流程执行过程。
- **示例**:每次员工提交请假申请时,都会创建一个新的流程实例。

## 3. 任务 (Task)
- **定义**:任务是流程中的一个具体操作或活动,通常需要人工或系统执行。
- **示例**:在请假申请流程中,“提交申请”和“主管审批”都是任务。

## 4. 用户任务 (User Task)
- **定义**:用户任务是需要人工干预的任务,通常分配给特定的用户或用户组。
- **示例**:“主管审批”是一个用户任务,需要主管手动批准或拒绝申请。

## 5. 系统任务 (Service Task)
- **定义**:系统任务是由系统自动执行的任务,通常调用外部服务或执行某些计算逻辑。
- **示例**:发送电子邮件通知是一个系统任务,可以调用邮件服务API。

## 6. 事件 (Event)
- **定义**:事件是在流程中发生的特定情况,可以触发某些操作或改变流程的执行路径。
- **示例**:开始事件(Start Event)表示流程的开始,结束事件(End Event)表示流程的结束。

## 7. 条件表达式 (Condition Expression)
- **定义**:条件表达式用于控制流程的分支,根据某些条件决定流程的下一步。
- **示例**:在审批流程中,可以根据审批结果(“通过”或“不通过”)选择不同的路径。

## 8. 序列流 (Sequence Flow)
- **定义**:序列流连接流程中的不同任务和事件,表示任务之间的执行顺序。
- **示例**:从“提交申请”到“主管审批”的连线就是一个序列流。

## 9. 并行网关 (Parallel Gateway)
- **定义**:并行网关用于同时启动多个任务或路径,或等待多个任务完成后继续执行。
- **示例**:在项目启动流程中,可以同时进行“市场调研”和“技术评估”。

## 10. 排他网关 (Exclusive Gateway)
- **定义**:排他网关用于根据条件选择一个路径执行,其他路径被忽略。
- **示例**:在审批流程中,根据审批结果选择“通过”或“不通过”的路径。

## 11. 包含网关 (Inclusive Gateway)
- **定义**:包含网关用于根据条件选择多个路径执行,符合条件的路径都会被执行。
- **示例**:在项目启动流程中,根据项目类型选择需要进行的多个评估任务。

## 12. 多实例任务 (Multi-Instance Task)
- **定义**:多实例任务允许同一个任务多次执行,可以是并行的或顺序的。
- **示例**:在审批流程中,多个审批人需要依次或同时审批同一个申请。

## 13. 信号 (Signal)
- **定义**:信号是一种全局事件,可以在流程中的任意位置触发,用于中断或启动某些任务。
- **示例**:在项目管理流程中,可以使用信号来通知所有相关方项目已启动。

## 14. 消息 (Message)
- **定义**:消息是一种异步通信机制,用于在不同的流程实例或系统之间传递信息。
- **示例**:在订单处理流程中,可以使用消息来通知库存管理系统减少库存。

## 15. 变量 (Variable)
- **定义**:变量用于存储和传递流程中的数据,可以在任务之间共享。
- **示例**:在请假申请流程中,可以使用变量存储申请人的姓名、请假天数等信息。

## 16. 任务候选人 (Task Candidate)
- **定义**:任务候选人是指有权领取并完成某个用户任务的用户或用户组。
- **示例**:在审批流程中,可以将“主管审批”任务的候选人设置为所有主管。

## 17. 任务分配 (Task Assignment)
- **定义**:任务分配是指将任务指派给特定的用户或用户组。
- **示例**:在审批流程中,可以将“主管审批”任务指派给具体的主管。

## 18. 任务监听器 (Task Listener)
- **定义**:任务监听器是在任务生命周期的特定阶段执行的回调函数,用于执行自定义逻辑。
- **示例**:在任务创建时发送通知邮件,在任务完成时更新数据库记录。
- create 在任务触发的时候创建 userTask
- delete 任务被删除时触发。通常用于在任务删除时清理资源、记录日志等 userTask
- complete 事件在任务完成时触发。通常用于在任务完成时更新数据库记录、发送通知 userTask
- assignment 事件在任务被分配时触发。通常用于在任务分配时发送通知、记录日志 userTask

## 19. 流程监听器 (Process Listener)
- **定义**:流程监听器是在流程生命周期的特定阶段执行的回调函数,用于执行自定义逻辑。
- **示例**:在流程启动时记录日志,在流程结束时发送总结报告。

## 20. 事件监听器 (Event Listener)
- **定义**:事件监听器是在特定事件发生时执行的回调函数,用于执行自定义逻辑。
- **示例**:在流程实例创建时发送通知,在任务超时时发送提醒。
- start 当一个流程开始的时候 startEvent
- end 当一个流程结束的时候 endEvent
- take  当一个流程在节点之间流转的时候 sequenceFlow
  1. 一个工作流的开始,一定是从开始绘制bpmn20.xml这个文件开始,或者你已经有了一个这样的文件,然后需要部署,部署后启动这个工作流即可;
  2. 我们一般可以通过两种方式绘制工作流:
    • 通过在idea/eclipse中的插件绘制
    • 通过flowable提供的 flowable-modeler 绘制
  3. 绘制后需要部署使用,一般部署也有两种方式:
    • 通过动态部署,在代码层面通过 repositoryService.createDeployment().addClasspathResource(bpmn20.xml文件路径)
    • 通过静态部署,springboot项目,将bpmn20.xml文件放在 /resources/processes/ 文件下,启动的时候会自动部署
  4. 工作流的每一步审批,都会用到一个变量等信息,也会有唯一的任务id,我们可以根据业务id,作为与业务数据的关联关系,这些变量也可以作为业务数据在后续逻辑判断中的参数条件;
  5. 表单可以作为一个任务节点的展现形式,例如是一个报销的流程,那么我需要让提交报销的人,填写一些报销信息: 金额,出差地点,日期等信息。这些信息可以作为业务数据,与当前工作流绑定,作为后续业务处理的依据。
    • 内置表单,就是在flowable-modeler 绘制的时候,可以选择新建表单,这里都是内置表单
    • 非内置表单, 可以是一个项目的访问vue文件路径,这样可以达到业务与流程的深度集成

二、flowable-modeler使用

1. 使用步骤

flowable-modeler

  1. 导入flowable.sql数据,启动程序
  2. 访问需要先登录 http://127.0.0.1:8080/expense/idm/index.html
    account: admin
    pwd : test
    
  3. 再访问: http://127.0.0.1:8080/expense 创建设计器

2.开始绘制

弄一个请假的流程

大概逻辑, 发起请假,组长审批,然后根据天数判断审批人,大于三天部门总结审批,小于三天部门经理审批,通过后请假结束

  • 所有任务都必须有开始和结束

打开设计器>>> 流程 >>> 创建流程
开始结束

  • 开始丰富流程中的流转过程

选中开始>>> 点击任务
新建任务

选中连线>>> 设置名称
提交

  • 丰富任务节点信息

选中该任务节点>>> 设置节点信息
选中节点
编号,不设置默认生成uuid,这里可以设置下,由于这个节点是上级审批,所以设置 zzsp
名称,最好设置下,可以一眼看出当前节点的信息, 所以设置 组长审批
分配: 这个意思是,当流程到达这个节点的时候,谁可以处理这个任务,选择固定值>>> 1. 分配 2. 候选用户 3. 候选组
分配
这里选择分配>>> ${zz} 这里可以是固定值 例如 admin1,这里选择一个类似mybatis取值的感觉,取审批时候的传递的用户变量 zz作为该节点的任务接收人

  • 开启分支判断
    分支

选中组长审批任务节点,选择 高级分支

设置高级分支名称

设置名称为: 判断天数

  • 部门总监分支
    总监分支

选中高级分支>>>选择用户任务

  • 丰富该任务节点
    总监节点

设置节点名称为: 部门总监
设置节点分配人,与上一个组长节点一样,设置一直流程变量 ${zj}

  • 丰富该分支流信息
    分支流信息

选中分支流,设置名称: 大于3天,设置流条件 ${day>3}
此为当前分支流的信息,以及进入该分支流的条件,当flowable中的变量day的值>3的时候,会进入该分支流

  • 选择高级分支,继续创建用户任务
    部门经理

设置节点名称,设置分支流的名称以及条件 ${day<=3}
设置节点分配人,与上一个组长节点一样,设置一直流程变量 ${jl}
与上一个部门总监的设置同理

  • 设置流程结束

选中部门总监,选择结束节点,选中部门经理节点,连接到刚刚的结束节点
结束节点
设置结束节点名称为: 请假结束
选中部门经理到请假结束的流转,然后单机增加节点,可以调整该线段
调整图

  • 驳回设置

选中部门经理节点,选择连线到组长审批,选中部门经理节点,选择连线到组长审批
设置新增的两个流转名换为 驳回
最终效果

三 加载该流程

  • 保存流程,导出为xml文件
    保存
    重点key为 qingjia, 这个很重要,是流程图流程的唯一标识
  • 导出

点击
单击
导出
导出

  • 放入项目中
    放入

放在resources/processes/
右键请假.bpmn20.xml ,选择View BPMN

  • 启动项目,此流程会被自动加载到项目中
  • 使用方式与之前的文章类似,这里不做演示 ,可以根据qingjia这个key 启动这个流程,然后逐步审批

总结

其实这个插件 Flowable BPMN visualizer 安装后,如果你项目中没有集成flowable的idm等模块,也是可以用这个插件绘制的,不过一般来说这个没有flowable自带的插件绘制起来方便;
插件绘制

邮件之后,其实和flowable自带的flowable-modler功能几乎一致

可以直接用这个绘制,还有eclipse中也有类似插件,也可以用,不过这个更美观;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了一…

[Python3学习笔记-基础语法] Python3 基础语法

本篇文章详细介绍Python3的基础语法&#xff0c;主要包括编码、标识符、Python保留字、注释、行缩进、多行语句、Number类型、字符串、空行、print打印等。 这些是Python最基础的东西&#xff0c;掌握好了才能更好的学习后续的内容。 有兴趣共同结伴学习Python的朋友&#xff0…

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到&#xff0c;光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础&#xff0c;但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围&#xff0c;同时也关注于提供更加丰富的色彩。因此&#xff…

数据库MYSQL——表的设计

文章目录 前言三大范式&#xff1a;几种实体间的关系&#xff1a;一对一关系&#xff1a;一对多关系&#xff1a;多对多关系&#xff1a; 前言 之前的博客中我们讲解的是关于数据库的增删改查与约束的基本操作&#xff0c; 是在已经创建数据库&#xff0c;表之上的操作。 在实…

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中&#xff0c;自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言&#xff0c;自动化测试尤为重要&#xff0c;它能有效捕捉代码中的潜在缺陷&#xff0c;提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test&#xff08;GTe…

备忘笔记-工具:JetBrains友好工具安装配置

1、配置/脚本文件下载 1、校验地址&#xff1a;https://3.jetbra.in/ 打开选择可用链接&#xff0c;点击跳转可用页面。 2、下载文件 左上角点击下载jetbra.zip文件 下载对应全家桶软件版本号&#xff0c;版本号在对应卡票右上角可见。 2、安装包下载 官网地址&#xff1a…

Flask 基于wsgi源码启动流程

1. 点击 __call__ 进入到源码 2. 找到 __call__ 方法 return 执行的是 wsgi方法 3. 点击 wsgi 方法 进到 wsgi return 执行的是 response 方法 4. 点击response 方法 进到 full_dispatch_request 5. full_dispatch_request 执行finalize_request 方法 6. finalize_request …

Linux 下进程基本概念与状态

文章目录 一、进程的定义二、 描述进程-PCBtask_ struct内容分类 三、 进程状态 一、进程的定义 狭义定义&#xff1a;进程是正在运行的程序的实例&#xff08;an instance of a computer program that is being executed&#xff09;。广义定义&#xff1a;进程是一个具有一定…

IDEA使用tips(LTS✍)

一、查找项目中某个外部库依赖类的pom来源 1、显示图 2、导出Maven 项目依赖的可视化输出文件 3、点击要查找的目标类&#xff0c;项目中定位后复制依赖名称 4、在导出的依赖的可视化文件中搜索查找 5、综上得到&#xff0c;Around类来自于pom中的spring-boot-starter-aop:jar…

【shell编程】函数、正则表达式、文本处理工具

函数 系统函数 常见内置命令 echo打印输出 #!/bin/bash # 输出普通文本 echo "Hello, World!"# 输出变量值 name"Alice" echo "Hello, $name"# 输出带有换行符的文本 echo -n "Hello, " # -n 选项不输出换行 echo "World!&quo…

如何选择服务器

如何选择服务器 选择服务器时应考虑以下几个关键因素&#xff1a; 性能需求。根据网站的预期流量和负载情况&#xff0c;选择合适的处理器、内存和存储容量。考虑网站是否需要处理大量动态内容或高分辨率媒体文件。 可扩展性。选择一个可以轻松扩展的服务器架构&#xff0c;以便…

LeetCode 904.水果成篮

LeetCode 904.水果成篮 思路&#x1f9d0;&#xff1a; 求水果的最大数目&#xff0c;也就是求最大长度&#xff0c;我们是单调的向前求解&#xff0c;则能够想到使用滑动窗口进行解答&#xff0c;可以用hash表统计每个种类的个数&#xff0c;kinds变量统计当前种类&#xff0c…

初始Python篇(7)—— 正则表达式

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 正则表达式的概念 正则表达式的组成 元字符 限定符 其他字符 正则表达式的使用 正则表达式的常见操作方法 match方法的…

小程序免备案:快速部署与优化的全攻略

小程序免备案为开发者提供了便捷高效的解决方案&#xff0c;省去繁琐的备案流程&#xff0c;同时通过优化网络性能和数据传输&#xff0c;保障用户体验。本文从部署策略、应用场景到技术实现&#xff0c;全面解析小程序免备案的核心优势。 小程序免备案&#xff1a;快速部署与优…

L14.【LeetCode笔记】返回倒数第k个节点

目录 1.题目 2.分析 思路 代码 提交结果 1.题目 面试题 02.02. 返回倒数第 k 个节点 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 …

深入解析 EasyExcel 组件原理与应用

✨深入解析 EasyExcel 组件原理与应用✨ 官方&#xff1a;EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 在日常的 Java 开发工作中&#xff0c;处理 Excel 文件的导入导出是极为常见的需求。 今天&#xff0c;咱们就一起来深入了解一款非常实用的操作 Exce…

基于Java Springboot高校教室资源管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;…

k8s1.31版本最新版本集群使用容器镜像仓库Harbor

虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…

C语言数据结构学习:循环队列

C语言 数据结构学习 汇总入口&#xff1a; C语言数据结构学习&#xff1a;[汇总] 1. 循环队列 队列的博客&#xff1a;C语言数据结构学习&#xff1a;队列 循环队列会预先定义最大队列空间&#xff0c;然后定义一个数组&#xff0c;通过队列头和队列尾指针分别指向开头和结尾&…

Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)

目录 响应式数据 ref reactive 事件绑定指令 v-on v-on 鼠标监听事件 v-on 键盘监听事件 v-on 简写形式 属性动态化指令 v-bind iuput标签动态属性绑定 img标签动态属性绑定 b标签动态属性绑定 v-bind 简写形式 条件渲染指令 v-if 遍历指令 v-for 遍历对象的值 遍历…