工作流的大致开发流程

article/2025/10/7 14:31:43

前段时间公司在做一个oa的项目,用到了flowable工作流,刚开始的时候还在纠结于是用activity还是flowable,后来查了相关资料发现flowable的作者之前就是开发activity的作者,只不过后来自己出去又搞了一套就叫做flowable,
所以不需要纠结用哪一套,实际在研究了一段时间后发现两者差别并不是很大,基本都可以满足常用的工作流的开发,我这边由于领导指定了要用flowable,所以整个项目的工作流基于flowable引擎。到目前为止研究的时间也并没有多长,其中也遇到很多迷茫的地方,希望能把自己的心得体会跟大家分享一下。本篇文章主要适用于第一次接触工作流的读者能够对工作流的开发过程有个大概的了解,本文不涉及太详细的介绍。
1.流程图设计
在进行工作流的开发时,第一个要做的事就是设计流程图,流程图的主要作用有两个,一个是用来启动一个流程,另一个就是在查看流程走向时需要用到。
流程图的设计一般需要用到专门的工具,以前的做法是在eclipse中安装一个Activiti BPMN2.0 designer插件,现在idea里面好像也支持安装这个插件,不过版本都比较老,现在一般的项目都集成flowable的web版本的流程设计,提供ui设计界面,比较方便,如下图所示:
在这里插入图片描述
设计完保存后的文件是一个bpmn文件,可以直接用来生成一个xml文件,这两个文件都可以看作是流程的定义文件,也都可以用来部署流程。
(1)任务执行人设置
流程设计图中一个很重要的步骤就是设置流程中每个任务的执行人,执行人的设计分为静态设置和动态设置。所谓静态设置即在设计流程图的时候就制定执行人,在任务激活后的分配(Assgin)一栏中直接填写执行人,执行人的内容可填写用户id也可填写用户名字;动态设置则是指在流程的运行过程中动态的给任务指定执行人,不过在指定的时机上要注意,一般不能晚于要指定的任务的上一个任务结束前,动态指定的方法一般是给执行人设定一个表达式,例如${executor},然后在代码中通过给execcutor设置值来指定。
执行人设置的方式又可以分为3种:第一种是指定单个用户,就是说这个任务只有一个可选执行人;第二种是多个候选人,就是说可能存在多个候选人来执行这一任务,候选人都可以在自己的待办任务看到这个任务,在执行任务时要进行签收,一旦其中一个候选人签收了任务,其他候选人就看不到该任务;第三种方式是候选组,只要属于该组的用户都可以看到该任务,不需要签收任务,可直接办理任务。
(2)业务表单
为什么需要业务表单?想象一个请假流程,你在提交请假流程的时候必须得填写请假时间,请假理由吧。。。。业务表单的作用就是用来存储这些数据的,在设计流程图中任务视图有一栏叫做formKey的,就是用来对应业务表单的。
2.流程的部署
流程的部署有多种方式,一般是通过加载流程的定义文件来部署的。
在讨论部署之前大致看一下流程引擎API的大致结构如下图所示:
在这里插入图片描述
图片参考至官网,https://www.flowable.org/docs/userguide/index.html#apiEngine
最上层ProcessEngineConfiguration以及flowable.cfg.xml用来配置流程的基本信息,包括数据库信息、事务管理等。
在实际的应用中我们一般在flowable.cfg.xml中配置了如下:





其中repositoryService一般用来获取流程定义的基本信息,查询引擎已知的部署和流程定义,一般是一些流程的静态信息。
runtimeService是我们会经常用到的对象,可以从这个服务类中获取很多关于流程执行相关的信息。
taskService是任务服务类,可以从这个类中获取任务的信息;查询分配给用户或组的任务;创建新的独立任务。这些是与流程实例无关的任务;操作分配任务的用户或以某种方式参与任务的用户。
historyService是历史服务类,可以用来查询已经完成的流程、任务相关信息。
managementService管理服务类,可用来进行Job任务管理,执行数据库相关操作,执行引擎命令。
还有一些服务类对象没有介绍了,大致可参考官网的详细介绍。说了这么多,也就是我们在工作流开发中启动流程、查询流程、设置流程等相关操作都会用到上面的对象,具体方法就不再这里详说了。
再来看看流程的部署方式:
部署流程资源有很多种方法,包括classpath、InputStream、字符串、zip格式压缩包,可参考https://blog.csdn.net/ctwy291314/article/details/81285408
流程部署成功后就可以进行测试了,看看流程的流转是否按照自己设计的模型运转。


http://chatgpt.dhexx.cn/article/w5Yey85n.shtml

相关文章

flowable工作流所有业务概念

1.什么是工作流审批 根据本人的理解,就是审批流程管理。 2.什么是flowable 1.官方解释 官方解释如下: Flowable 项目提供了一套核心的开源业务流程引擎,这些引擎紧凑且高效。它们为开发人员、系统管理员和业务用户提供工作流和业务流程管…

微服务与工作流

本文主要想谈一谈工作流在微服务系统中的使用以及工作流能够为微服务系统带来的好处。 通过查找资料可得,微服务的编排主要分为两种形式,一种是“choreography”,有人将其翻译成微服务的编排;另一种是“orchestration”,有人将其翻…

Camunda工作流引擎入门

文档集合 1、camunda文档:https://docs.camunda.org/get-started/quick-start/ 2、camunda资源下载:https://camunda.com/download/ 3、camunda示例github仓库:https://github.com/camunda/camunda-bpm-examples 4、camunda 代码仓库&…

工作流设计详解

工作流 概念: workflow流程性通知和审批控制,业务流程中、发送、提供附加信息或进行附加业务处理,两个或两个以上的人为共同目标,连续以并行或串行的方式完成某一业务。 工作流 设计: 按照业务规划流程图&#xff0…

什么是工作流?为什么程序员要用它?

每一个程序员,在接触到工作流的时候,都会有这么一个疑问——我用一般的方法可以实现,为什么还要用工作流? 我曾经也问过这个问题,不过现在稍微有点明白了。别着急要答案,看过下面的例子,或许你…

什么是工作流

什么是工作流? 工作流是从英文单词work flow中直译过来的。最直白的意思就是日常工作中相对固定的流程计算机化。 在此列举两个工作流简例: 客户到银行开户的工作流: 客户索取开户资料单——资料填写——营业员核对个人证件——营业员核对帐款…

什么是工作流?如何利用工作流引擎实现业务流程

工作流引擎是用来实现工作流的一种组件化工具,它是一整套解决方案,比如说一般工作流引擎包含这些功能:流程节点管理、流向管理等,是为了减小开发成本而推出的。因为在软件开发过程中,如果是从零开始实现工作流&#xf…

什么是工作流,flowable 与 Activiti对比

工作流 什么是工作流工作流是复杂版本的状态机Java工作流开源框架工作流对比Activiti设计器 Flowable兼容性 Camunda设计器兼容性:小结: 社区活跃度FlowableActivitiCamunda 总结 什么是工作流 工作流,是指“业务​过程的部分或整体在​计算…

工作流是什么

刚入职一家公司不久,昨天去和经理与客户对接需求的之前,经理问我接触过工作流没有之前。作为一个20年毕业的老人了,只能尴尬的说一句没有我下去会去了解下。这里我就暂且找一下别人总结的文章和大家一起学习下。 一、什么是工作流 工作流&a…

什么是工作流?

这里说的工作流是狭义的管理工作流程。 现代企业的日常活动中,70%以上都是有两个或两个以上的员工共同参与协作的的任务,比如生产流程、业务流程、各类行政申请流程、财务审批流程、人事处理流程、质量控制及客服流程等。一项工作,经过一个步…

union用法和enum用法

1 union用法 C语言中的union在语法上与struct相似。 union只分配最大成员的空间&#xff0c;所有成员共享这个空间 2 union的注意事项 union的使用受系统大小端的影响 编程&#xff1a;判断系统的大小端 #include <stdio.h>// 1&#xff1a;小端&#xff0c;0&…

C语言 C++中的union用法总结(包懂)

开始的话 已经好长时间没有更新了&#xff0c;对不起自己&#xff0c;更对不起我亲爱的读者&#xff0c;同时也对不起自己开办的这个博客平台。忙&#xff0c;太忙了&#xff0c;忙于找工作&#xff0c;找一份好工作&#xff0c;纠结于去大城市闯呢&#xff0c;还是回到本省的首…

php union用法,SQL Union用法是什么?

sql union用法是什么&#xff1f; sql union用法的总结&#xff1a; UNION 运算符将多个 SELECT 语句的结果组合成一个结果集。 (&#xff11;)使用 UNION 须满足以下条件&#xff1a; &#xff21;&#xff1a;所有查询中必须具有相同的结构(即查询中的的列数和列的顺序必须相…

mysql union语法,mysql中的union用法

UNION在mysql中被称为集合操作,操作类型分为两种:UNION DISTINCT 和 UNION ALL;注意:UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重,UNION ALL的功能为合并多个查询的结果不去重。 集合操作时,两边的输入必须拥有相同的列数,如果数据类型不…

mysql得union使用方法_mysql中Union All使用方法

在mysql数据库使用UNION 时&#xff0c;会把结果集中重复的记录删掉&#xff0c;也正因为做了去重操作&#xff0c;所以效率相对Union All来讲稍微低一点&#xff0c;使用UNION ALL &#xff0c;MySQL 会把所有的记录返回&#xff0c;效率高于UNION。本文向大家介绍UNION ALL的…

SQL 中union的使用

采用where的解法 select name,population,area from World where area>3000000 or population>25000000 ;使用union的解法 select name,population,area from World where area>3000000 union select name,population,area from World where population>2500000…

C语言共用体(C语言union用法)详解

转载重点&#xff1a;共用体的所有成员占用同一段内存&#xff0c;修改一个成员会影响其余所有成员。图形分析影响过程 通过前面的讲解&#xff0c;我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中…

C语言 union用法

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a; …

c语言union(c语言union用法)

C语言-程序运行结果是&#xff1f;main(){unionstu{lon 我的机器&#xff0b;vc6运行的结果是12 我的理解是首先取最长的b的长度&#xff0c;但是b的长度比我的机器字长(32位即4个字节)整数倍要短&#xff0c;则sizeof(stu)的长度是12 不知道你的机器是不是64位的 如果是则证…

quartz mysql 配置_quartz的数据库配置

Quartz.net官方开发指南 第九课&#xff1a; JobStore JobStore负责保持对所有scheduler “工作数据”追踪&#xff0c;这些工作数据包括&#xff1a;job(任务),trigger(触发器),calendar(日历)等。为你的Quartz scheduler选择合适的JobStore是非常重要的一步&#xff0c;幸运的…