flowable流程图详细绘制教程

server/2024/11/25 8:39:02/

文章目录

  • 前言
  • 一、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中也有类似插件,也可以用,不过这个更美观;


http://www.ppmy.cn/server/144751.html

相关文章

Nginx正向代理處理HTTPS請求詳解

正向代理是一種代理伺服器&#xff0c;位於客戶端和目標伺服器之間。客戶端將請求發送給代理伺服器&#xff0c;然後由代理伺服器代為轉發請求並將回應返回給客戶端。而Nginx是一款高性能的HTTP 和反向代理伺服器&#xff0c;因其高併發處理能力和豐富的模組化設計而廣受歡迎。…

【Linux 篇】Docker 启动和停止的精准掌舵:操控指南

文章目录 【Linux 篇】Docker 启动和停止的精准掌舵&#xff1a;操控指南前言docker基本命令1. 帮助手册 2. 指令介绍 常用命令1. 查看镜像2. 搜索镜像3. 拉取镜像4. 删除镜像5. 从Docker Hub拉取 容器的相关命令1. 查看容器2. 创建与启动容器3. 查看镜像4. 启动容器5. 查看容…

MassTransit-概念-01概述

概述 在学习 MassTransit 时&#xff0c;理解消息传递的概念和术语是一个好主意。为了确保在查看类或接口时走在正确的道路上&#xff0c;请在处理 MassTransit 时回顾这些概念。 基础知识 消息 (Messages)消费者 (Consumers)生产者 (Producers)异常 (Exceptions)测试 (Test…

【C++】list容器及其模拟实现

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 2. list的模拟实现 2.1 模拟实现list 2.1.1list节点 2.1.2li…

什么是 C++ 中的类型别名和 using 声明?如何使用类型别名和 using 声明?

一、类型别名 类型别名是一个现有类型的另一个名称。它可以让代码更加清晰易读&#xff0c;特别是在处理复杂类型时。在 C 中&#xff0c;可以使用typedef关键字或using关键字来定义类型别名。 1. 使用typedef定义类型别名 typedef 类型 别名 typedef int MyInt; MyInt a …

壹肆柒·2025台球展:春季台球行业的璀璨盛会

在台球产业蓬勃发展的浪潮中&#xff0c;2025 中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒・台球展&#xff09;正以其独特的魅力和巨大的影响力吸引着全球目光。 其开展时间定在 2025 年 03 月 12 - 14 日&#xff0c;于郑州・中原国际博览中心盛大…

【计算机网络】多路转接之select

系统提供select()来实现多路转接 IO 等 拷贝 -> select()只负责等待&#xff0c;可以一次等待多个fd select()本身没有数据拷贝的能力&#xff0c;拷贝要read()/write()来完成 一、select的使用 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exc…

vue 的生命周期函数

Vue 生命周期函数&#xff08;生命周期钩子&#xff09;是 Vue 实例从创建到销毁过程中&#xff0c;不同阶段所触发的特定函数。理解这些生命周期函数对于开发 Vue 应用至关重要&#xff0c;因为它们让你在不同的生命周期阶段执行代码&#xff0c;比如数据初始化、DOM 渲染完成…