Activiti工作流-实战篇(用Activiti框架快速开发我们的工作流)
一、前言
我实习的第一份工作接触到的就是工作流,那时正好带我的师兄他负责审批流的架构和开发,然后我就在大神的胯下茁壮成长。当时确实对我来说非常有挑战性,还好师兄的架构做的不错,底层的框架用的就是Activiti。不过说实话,学到了很多东西,顺便分享一下我们当时是怎么巧妙的用Activiti框架快速实现我们的工作流。
二、最后的成品
1.PC端
pc端干的事情,主要是流程的定义和流程的发起,还有我的工作台
流程定义:
我的工作台:
app上,可以让用户快速处理工作
发送消息通知:
如果你们开发中遇到一些问题,我们可以共同探讨探讨!
三、开发前的准备
流程定义:流程该怎么走,可以理解为模板
流程实例:发起一个请假申请,这请假申请就是一个流程实力
任务:一个请假流程中有需要很多人审批,每个审批就是一个任务。
流程定义:描述审批流程走向
运行时数据:(何为运行时:一个流程发起后,还没结束,该流程就是处于运行时;一个轮到你处理的任务,该任务就是运行时,处理完后,就不是运行时了)
流程:一个未结束的审批流。审批流结束的时候数据会被删除。
任务:当前审批流到达的执行点。执行点执行完成后,数据会被删除,并且到下一个执行点。
流程变量:一个流程,或者一个任务中的变量。可以自定义变量来记录审批的状态。
历史数据:
流程:流程开始就会记录历史数据,并且记录开始时间,结束时间要等流程结束才会记录。
任务:执行中任务不会在历史库中落库,当任务执行完成后,会在历史库落库。
任务评论:执行任务时可以添加评论信息,直接进历史表。
流程变量:对应运行时的流程变量,结束后会进来。
附件:审批的附件表。可以存对象,存文件,存url等。
注意的地方
1.巧用表中的字段
delete_reason 直接存放流程实例的状态:通过,未通过,撤销
这里可能要手动去改变表中的字段。
2.学会用Native Query
activiti提供了Native Query(使用基于MyBatis的sql语句方式查询)方式自定义查询:
List<Task> tasks = taskSersive.createNativeTaskQuery()
.sql("Select * from" + managementService.getTableName(Task.class)
+"where NAME_ = #{taskNmae} ")
.parameter("taskNmae","人事审批").list();
- 1
- 2
- 3
- 4
3.activiti里面有很多Join查询,我们最好单表查询
这里也需要我们把多表查询的接口,用Native Query查询
4.activiti的链式编程
5.activiti监听器的使用
6.activiti和spring整合使用