flowable流程图详细绘制教程

news2024/11/26 0:21:08

文章目录

  • 前言
  • 一、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.coloradmin.cn/o/2247558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行

文章目录&#xff1a; 【Linux 篇】Docker 的容器之海与镜像之岛&#xff1a;于 Linux 系统内探索容器化的奇妙航行前言安装docker-centos7 【Linux 篇】Docker 的容器之海与镜像之岛&#xff1a;于 Linux 系统内探索容器化的奇妙航行 &#x1f4ac;欢迎交流&#xff1a;在学习…

linux从0到1——shell编程9

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

go项目中比较好的实践方案

工作两年来&#xff0c;我并未遇到太大的挑战&#xff0c;也没有特别值得夸耀的项目。尽管如此&#xff0c;在日常的杂项工作中&#xff0c;我积累了不少心得&#xff0c;许多实践方法也在思考中逐渐得到优化。因此&#xff0c;我在这里记录下这些心得。 转发与封装 这个需求…

Maven的安装——给Idea配置Maven

一、什么是Maven? Maven是一个开源的项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目生命周期管理。 二、准备环境 maven安装之前&#xff0c;我们要先安装jdk&#xff0c;确保你已经安装了jdk环境。可以通过【win】【r】打开任务管理器&#xff0c;输入…

vscode 远程连接ssh 密钥方式

目录 1. powershell 生成key&#xff1a; 2. 在服务器上安装公钥 linux测试成功&#xff1a; 3).为了确保连接成功&#xff0c;输入如下指令以保证以下文件权限正确&#xff1a; 3 开启 ssh 密钥登录 vscode 远程连接配置 python连接测试ok 查看日志&#xff1a; 命令…

Charles抓包工具-笔记

摘要 概念&#xff1a; Charles是一款基于 HTTP 协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果来达到分析抓包的目的。 功能&#xff1a; Charles 是一个功能全面的抓包工具&#xff0c;适用于各种网络调试和优化场景。 它…

Echarts+VUE饼图的使用(基础使用、多个饼图功能、单组饼图对应颜色使用)

安装&#xff1a;npm install echarts --save 配置:main.js // 引入echarts import * as echarts from echarts Vue.prototype.$echarts echarts一、基础饼图&#xff08;直接拷贝就能出效果&#xff09; <div class"big-box" ref"demoEhart"><…

神经网络(系统性学习三):多层感知机(MLP)

相关文章&#xff1a; 神经网络中常用的激活函数 神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇 神经网络&#xff08;系统性学习二&#xff09;&#xff1a;单层神经网络&#xff08;感知机&#xff09; 多层感知机&#xff08;MLP&#xff09; 多层感…

C语言练习.if.else语句.strstr

今天在做题之前&#xff0c;先介绍一下&#xff0c;新学到的库函数strstr 想要使用它&#xff0c;要先给它一个头文件<string.h> char *strstr(const char*str1,const char*str2); 首先&#xff1a;1.strstr的返回值是char&#xff0c;字符类型的。 2.两个实参&#xff…

golang实现TCP服务器与客户端的断线自动重连功能

1.服务端 2.客户端 生成服务端口程序: 生成客户端程序: 测试断线重连: 初始连接成功

c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除

老规矩&#xff0c;点赞评论收藏关注&#xff01;&#xff01;&#xff01; 目录 线性表 其特点是&#xff1a; 算法实现&#xff1a; 运行结果展示 链表 插入元素&#xff1a; 删除元素&#xff1a; 算法实现 运行结果 线性表是由n个数据元素组成的有限序列&#xff…

textureLod lod的确定

1. 自动计算导数方法 float calculateLOD(sampler2D tex, vec2 uv) { // 计算纹理坐标的导数 vec2 dUVdx dFdx(uv); vec2 dUVdy dFdy(uv); // 计算纹理大小 vec2 textureSize textureSize(tex, 0); // 0表示基础mipmap级别 // 计算LOD float maxDeriv max(length(…

C++数据结构与算法

C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…

SSH 反向端口转发-R

近期和同学聊到了他遇到的一个问题&#xff1a; 本地机器A&#xff0c;远程开发机C&#xff0c;机器A需要通过ssh连接开发机C进行开发&#xff0c;ssh直连不通&#xff0c;SCP传输文件的话就比较费劲&#xff0c;需要通过跳板机B&#xff0c;经过跳板机这一步骤可用&#xff0…

实时质检系统—静音检测功能设置流程

设置流程 1. 设置静音检测时间 在实时质检系统中&#xff0c;有一静音检测功能&#xff1a;可以对主叫或被叫在接通后的规定时间内开启静音检测。例&#xff1a;被叫静音检测配置设置了10&#xff0c;那么质检电话在接通后的10秒内&#xff0c;开启静音检测&#xff0c;如果被…

生成式UI 动态化SDK的研发(二)--实现垂直布局、水平布局以及文字组件

文章目录 1. 概述2. 效果展示2.1 垂直布局容器(Column)2.2 水平布局容器(Row )2.3 本文示例动态化模板DSL 3. 生成式UI 动态化SDK的渲染流程4. Column和Row组件实现4.1 Column组件4.1.1 视图的渲染4.1.2 事件解析绑定 4.2 Row组件4.3 文字组件(Text) 5. 源码地址 1. 概述 在前…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则&#xff08;超全&#xff09; 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Vision Transformer(VIT模型)

【11.1 Vision Transformer(vit)网络详解-哔哩哔哩】 https://b23.tv/BgsYImJ 工作流程&#xff1a; ①将输入的图像进行patch的划分 ②Linear Projection of Flatted patches&#xff0c;将patch拉平并进行线性映射生成token ③生成CLS token&#xff08;用向量有效地表示整…

2024年11月最新 Alfred 5 Powerpack (MACOS)下载

在现代数字化办公中&#xff0c;我们常常被繁杂的任务所包围&#xff0c;而时间的高效利用成为一项核心需求。Alfred 5 Powerpack 是一款专为 macOS 用户打造的高效工作流工具&#xff0c;以其强大的定制化功能和流畅的用户体验&#xff0c;成为众多效率爱好者的首选。 点击链…

C#里怎么样检测文件的属性?

C#里怎么样检测文件的属性? 对于文件来说,在C#里有一种快速的方法来检查文件的属性。 比如文件是否已经压缩, 文件是否加密, 文件是否是目录等等。 属性有下面这么多: 例子演示如下: /** C# Program to View the Information of the File*/ using System; using Syste…