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

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

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

相关文章

C/C++链接数据库(MySQL)(超级详细)

目录 1.进入MySQL后&#xff0c;用mysql数据库 1.1查看一看user表 ​编辑1.2从user拿出来User和Host 1.3创建一个用户表&#xff0c;只允许本地&#xff08;想要远端链接就把localhost改成%&#xff09; 1.4再查一下用户就有了&#xff08;connector&#xff09; 1.5测试…

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

msvcr100.dll丢失的解决方法,六种解决msvcr100.dll丢失的方法

在使用Windows操作系统的过程中&#xff0c;用户可能会遇到各种各样的问题&#xff0c;其中之一就是“msvcr100.dll丢失”的错误提示。这个问题通常出现在尝试运行某些软件或游戏时&#xff0c;由于缺少这个重要的动态链接库文件&#xff0c;导致程序无法正常启动。本文将详细介…

排序(Java数据结构)

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。(所有的排序都是默认从小到大排序) 稳定性&#xff1a;假定在待排序的记录序列中&#xff…

VH6501国产替代同星TH7011干扰仪?

文章目录 同星TH7011干扰仪VH6501有使用过TH7011的么,可以在评论区讨论一下~ 同星TH7011干扰仪 干货分享 | 一文详解同星CAN总线干扰仪的使用方法 VH6501

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

目录遍历漏洞-CVE-2021-41773

目录 简介 原理 例子 Apache路径穿越漏洞 环境搭建 漏洞原理 漏洞利用 简介 目录遍历漏洞&#xff08;也称为路径遍历漏洞&#xff09;是一种由于Web服务器或Web应用程序对用户输入的文件名称的安全性验证不足而导致的安全漏洞。 原理 目录遍历漏洞允许攻击者在未授权…

.NET9 - 新功能体验(三)

书接上回&#xff0c;我们继续来聊聊.NET9和C#13带来的新变化。 01、Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和 AggregateBy后&#xff0c;可以在不经过GroupBy 分配中间分组的情况下快速完成复杂的聚合操作&#xff0c;同时方法命名也非常直观&#xff0…

Android蓝牙架构,源文件目录/编译方式学习

Android 版本 发布时间 代号&#xff08;Codename&#xff09; Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…

YOLO-World解读:零基础学习开放世界模型

文章目录 一、摘要二、引言相关工作方法预训练公式模型架构可重新参数化的视觉-语言路径聚合网络&#xff08;RepVL-PAN&#xff09; 3.4 预训练方案 实验YOLO-World: 利用多样化数据集进行开放词汇对象检测的预训练方法YOLO-World: LVIS数据集上的零样本性能评估YOLO-World: 预…

信创改造 - TongRDS 安装方式之控制台安装【Window】

安装前准备 安装 jdk1.8 即可&#xff0c;并配上 环境变量 安装 1&#xff09;解压缩 2&#xff09;启动 进入安装路径的console\bin目录&#xff0c;在cmd命令行窗口运行console.bat 输入序号 1 如果想查看运行状态&#xff0c;可以重新执行 console.bat&#xff0c;然后输…

志愿者小程序源码社区网格志愿者服务小程序php

志愿者服务小程序源码开发方案&#xff1a;开发语言后端php&#xff0c;tp框架&#xff0c;前端是uniapp。 一 志愿者端-小程序&#xff1a; 申请成为志愿者&#xff0c;志愿者组织端进行审核。成为志愿者后&#xff0c;可以报名参加志愿者活动。 志愿者地图&#xff1a;可以…

Node.js的下载与安装(支持各种新旧版本)

目录 1、node官网 2、node软件下载 3、软件安装&#xff08;完整版&#xff09; 1、node官网 Node.js — Download Node.jshttps://nodejs.org/en/download/package-manager 2、node软件下载 按照下图进行选择node版本&#xff08;真心推荐16/18&#xff0c;而是尽量是LTS…

对于相对速度的重新理解 - 2

回到先前说的&#xff0c;先令真空光速为标准光速&#xff0c; 光子的绝对速度 范围&#xff0c; 物质粒子的 范围&#xff0c; 这样的话&#xff0c;我们就可以根据 和 &#xff0c;把速度分成3个段&#xff0c; 这样就可以出现速度和它的负值&#xff0c;也就是速度的矢量具…

大模型系列11-ray

大模型系列11-ray PlasmaPlasmaStore启动监听处理请求 ProcessMessagePlasmaCreateRequest请求PlasmaCreateRetryRequest请求PlasmaGetRequest请求PlasmaReleaseRequestPlasmaDeleteRequestPlasmaSealRequest ObjectLifecycleManagerGetObjectSealObject ObjectStoreRunnerPlas…

Java---反射机制

JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c; 都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 在编译后产生…

Java 线程状态详解

1 引言 在 Java 多线程编程中&#xff0c;线程的状态是一个非常重要的概念。了解线程的状态及其转换过程&#xff0c;有助于我们更好地理解和控制线程的行为。本文将详细介绍 Java 线程的 6 种状态&#xff0c;并通过示例代码和图解来帮助读者更好地理解这些状态及其转换过程。…

AirScreen 安卓平板作为MacOS副屏

前言&#xff1a; 对笔记本续航有刚需&#xff0c;不得不选MacBook。 手机用的是mate40Pro&#xff0c;平板用的是matepad pro 12.6 干货&#xff1a; 参考网友的分享&#xff1a; https://www.bilibili.com/video/BV12A4y1d7zX/?spm_id_from333.337.search-card.all.click 【…

深度强化学习(RL)介绍

深度强化学习&#xff08;RL&#xff09;介绍 写到了一半&#xff0c;图待后补 一、强化学习概述 &#xff08;一&#xff09;与监督学习对比及定义 强化学习不同于监督学习&#xff0c;在一些任务中数据标注困难&#xff0c;但机器可通过环境反馈知道结果好坏。强化学习是机…

使用 Elasticsearch 构建食谱搜索(二)

这篇文章是之前的文章 “使用 Elasticsearch 构建食谱搜索&#xff08;一&#xff09;” 的续篇。在这篇文章中&#xff0c;我将详述如何使用本地 Elasticsearch 部署来完成对示例代码的运行。该项目演示了如何使用 Elastic 的 ELSER 实现语义搜索并将其结果与传统的词汇搜索进…