使用Activiti实现的工作流程管理
工作流的定义
- 工作流是将一组任务组织起来以完成某个有序的过程:定义了任务的触发顺序和触发条件,而且每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完.
- 工作流就是业务流程的计算机化或自动化。许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。
工具自带得数据表得含义与作用
1.在activati里自带得数据表如何做到跟自己得业务表相关联呢?
通过act_ru_exectution这个表中的business_key这个字段来进行关联 可以在代码中自定义business_key(UUID,雪花算法等)获取到一个唯一值,可以将其作为我们业务表中的业务id 以此来进行关联。
- 资源库流程规则表
- act_re_deployment 部署信息表
- act_re_model 流程设计模型部署表
- act_re_procdef 流程定义数据表
- 运行时数据库表(流程结束后回立即移除数据,为了保证表的尽量小得到运行足够快)
- act_ru_execution 运行时流程执行实例表
2.act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
3.act_ru_task 运行时任务节点表
4.act_ru_variable 运行时流程变量数据表
- 历史数据库表
有四种历史级别
1.none:不保存任何历史记录
2.activity:保存所有的流程实例,任务,活动信息
3.audit:也是activiti的默认级别,保存所有的流程实例,任务,活动,表单属性
4.full:最完整的历史记录,除了包含audit级别的信息还能保存详情,比如:流程变量。(跟踪详细用)
1.act_hi_actinst 历史节点表
2.act_hi_attachment 历史附件表
3.act_hi_comment 历史意见表
4.act_hi_identitylink 历史流程人员表
5.act_hi_detail 历史详情表,提供历史变量的查询
6.act_hi_procinst 历史流程实例表
7.act_hi_taskinst 历史任务实例表
8.act_hi_varinst 历史变量表
- 组织机构表
1.act_id_group 用户组信息表
2.act_id_info 用户扩展信息表
3.act_id_membership 用户与用户组对应信息表
4.act_id_user 用户信息表
- 这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
- 通用数据表
1.act_ge_bytearray 二进制数据表
2.act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,
核心API
-
系统架构图
核心类ProcessEngine
在Activiti中最核心的类,其他类由他得到
ProcessEngine processEngine=ProcessEngine.getDefaultProcessEngine();
-
获取RepositoryService
RepositoryService repositoryService=processEngine.getRepositoryService ();
作用:管理流程定义
Activiti的仓库服务类,指流程定义文档的两个文件:bpmn文件和流程图片,改servicer可以删除流程部署的定义。 -
获取RuntimeService
RuntimeService runtimeService=processEngine.getRuntimeService ();
作用:执行管理,包括启动,推进,删除流程实例等操作
Activiti的流程执行服务类,可以从这个服务类中获取关于流程执行的相关信息 -
获取TaskService
TaskService taskService=processEngine.getTaskService ();
作用:任务管理
Activiti的任务服务类,可以从中获取任务的相关信息,比如当前正在执行的个人代办或小组代办任务 -
HistoryService
Activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所以代办节点的运行情况。 -
ProcessDefinition
流程定义类,可以从中获取资源文件 -
ProcessInstance
代表流程定义执行的实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是她的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
对象之间的关系
ProcessInstance对象
流程的启动是通过runtimeService.startProcessInstance(),这时引擎会创建一个流程实例(ProcessInstance)
- 流程实例是根据一次或一条业务数据用流程驱动的入口,两者之间是一对一的关系,流程引擎会创建一条数据到ACT_RU_EXECUTION表,同时也会根据history的级别决定是否查询相同的历史数据到ACT_HI_PROCINST表。
- 流程启动后业务与流程就已经建立了关联关系,对于自定义表单或者外部表单来说启动的时候会传入bussinessKey作为业务和流程的关联属性。
Execution对象
Execution的含义就是一个流程实例具体要执行的对象。
一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
当流程按照规则只执行一次的时候,那么流程实例就是执行对象。
- 流程定义好比是java中的一个类
- 流程实例好比是java中的一个实例对象,一个流程定义可以有多个流程对象
Task对象
前面说了ProcessInstance和业务是一对一关联的,和业务数据最亲密;而Task则和用户最亲密的(UserTask),用户每天的待办事项就是一个个的Task对象。
Task可以是任何类型的Task实现,可以是用户任务,java任务等,在实际运行中只不过是面向的对象不同。
Task是在流程定义中看到的最大单位,每当一个Task完成的时候引擎会把当前的任务移动到历史中,然后插入下一个任务插入到表ACT_RU_TASK中
HistoryActivity对象
Activity包含了流程中所有的活动数据,例如开始事件、各种分支、以及刚刚提到的Task执行记录。
抽象的描述activiti工作流的行为
- 我们先将流程定义的流程图画好,其本质是xml文件,这样就可以存入所要的数据
- 读取业务流程图的本质就是解析xml文件的过程
- 然后activiti会将流程图中的每一个节点的数据读取并放入表中
- 每当任务的启动或执行,都会将第一个节点的信息插入到运行跟历史相关表中,每当流程往下走,都会有序的读取表中的第一个记录,处理完并删除,然后回读取下一个节点的信息插入表中,以此循环直到最后一个结束节点,整个流程也就结束。
一个流程的完整过程
- 将流程定义图画好
- 流程定义的部署 使用activiti提供的api向activiti中部署bpmn文件
- 启动一个流程实例 启动一个流程实例表示开始一次业务流程的运行
- 用户查询代办任务 因为业务流程交由activiti管理,所有通过activiti就可以查询当前流程执行到哪了,用户需要办理什么任务。
- 用户执行或完成自己的任务
对于完整流程的过程在一下篇文章《Activiti工作流的使用》中代码演示
下一篇: 工作流引擎的优势与益处
推荐阅读
-
Gitflow:基于 Git 的分支管理工作流程模型
-
深入了解 Java 中的 ThreadLocal 机制,了解其工作原理、优缺点分析、数据库连接管理的应用、使用注意事项
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
详述如何使用Activiti7通过编码实时生成工作流程
-
使用Vue和SpringBoot搭建超市商品管理系统的第四步:系统实际操作与实现
-
如何使用 Git 进行工作流程管理
-
Oracle使用expdp/impdp实现全库导入导出的整体流程
-
使用 SpringBoot 和 JWT 实现简单易用的用户注册、登录及身份验证流程
-
如何使用Spring Security实现JWT的身份验证与权限管理
-
使用SpringSecurity实现Jwt的身份验证与权限管理