您的位置:首页 > 其它

构建学生请假审批流程

2017-06-17 13:58 274 查看

构建学生请假审批流程

标签(空格分隔): activiti

1.绘制流程图:start->学生请假申请->班长审批->班主任审批->end,对这个流程图文件命名为:StudentLeaveProcess.bpmn,保存后自动生成同名的png文件。中间这三个节点的处理人分别为张三,李四,王五。

2.编写相关的部署代码:

package flow;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.repository.Deployment;

import org.junit.Test;

public class StudentLeaveProcess {

/**
* 获取默认流程引擎实例,会自动读取activiti.cfg.xml文本
*/
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();

/**
* 部署流程定义
*/
@Test
public void deploy(){
Deployment deployment=processEngine.getRepositoryService()//获取部署相关Service
.createDeployment() //创建部署对象
.addClasspathResource("diagrams/StudentLeaveProcess.bpmn") //加载资源文件
.addClasspathResource("diagrams/StudentLeaveProcess.png")
.name("学生请假流程")
.deploy(); //部署

System.out.println("流程部署ID:"+deployment.getId());
System.out.println("流程部署Name:"+deployment.getName());
}


}

上述代码执行后,对流程进行部署:

查询流程部署表:act_re_deployment,可看到名字为学生请假流程的新部署的流程。

查询流程定义表:act_re_procdef,也可以查询到名字为Student Leave Process的新流程定义。

查询资源文件表:act_ge_bytearray,可以看到名字为diagrams/StudentLeaveProcess.bpmn和diagrams/StudentLeaveProcess.png这两条数据,将图片以二进制的形式保存在数据库里。

3.接下来创建流程实例:

@Test

public void start() {

ProcessInstance pi=processEngine.getRuntimeService()//运行时Service

.startProcessInstanceByKey(“studentLeaveProcess”);//流程定义表的KEY字段

System.out.println(“流程实例ID:”+pi.getId());

System.out.println(“流程定义ID:”+pi.getProcessDefinitionId());

}

接口中的studentLeaveProcess来自于流程定义表中KEY字段。打印输出:
流程实例ID:27501
流程定义ID:studentLeaveProcess:1:25004

启动流程实例后,有下述几张表发生变化:
1.执行对象表:act_ru_execution,发现表中有一条数据usertask1,指的是当前节点处于第一个节点,流程中处于不同节点就会生成不同的执行对象,这个表就会多一条数据。
2.身份联系表:act_ru_identitylink,发现表中有一条数据,USER_ID为张三,这个人是流程图中第一个节点的处理人。
3.用户任务表:act_ru_task,表中有一条数据,里面包含usertask1和张三等字段。
4.活动节点历史表:act_hi_actinst,表中有两条数据,分别为Start节点和学生请假申请这两个节点的信息,其中start节点的结束时间已经赋值,而由于当前仍处于学生请假申请节点,所以结束时间还是空的。因此这个表会记录流程走过的所有节点的信息。
5.历史身份联系表:act_hi_identitylink,表中记录了第一个节点的张三的信息。
6.历史流程实例表: act_hi_procinst.
7.历史任务表:act_hi_taskinst


4.接下来查询张三这个用户的相关任务:

/**

* 查看任务

*/

@Test

public void findTask(){

List taskList=processEngine.getTaskService() //任务相关Service

.createTaskQuery() //创建任务查询

.taskAssignee(“张三”) //指定某个人

.list();

for(Task task:taskList){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务委派人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessDefinitionId());
}
}


由结果可以看出:

任务ID:27504

任务名称:学生请假申请

任务创建时间:Sat Jun 17 12:31:53 CST 2017

任务委派人:张三

流程实例ID:studentLeaveProcess:1:25004

5.接下来完成学生请假申请这个任务,让流程走到下个节点。

/**

* 完成任务

*

*/

@Test

public void completeTask(){

processEngine.getTaskService() //任务相关service

.complete(“27504”);

}

执行完以后,查看执行对象表,发现执行对象已经替换为usertask2;身份联系表中多了一条李四的相关信息;活动节点历史表中也多了一条班长审批的记录,原来学生请假审批节点信息的结束时间字段也被赋值了,新加的班长审批节点的结束时间为空;其他的历史表中也相应的增加了李四的相关信息。

6,接下来再查询张三的任务信息,findTask()函数执行后无输出,说明张三已经没有任务了,将参数换成李四继续查询发现,有结果如下:

任务ID:30002

任务名称:班长审批

任务创建时间:Sat Jun 17 13:08:53 CST 2017

任务委派人:李四

流程实例ID:studentLeaveProcess:1:25004

说明李四这个人有任务需要处理。

7.接着那种李四的任务ID:30002去执行completeTask函数来完成班长审批这个节点。执行完后当前节点为班主任审批节点,查看执行对象表,执行对象为usertask3;身份联系表多了王五这一条字段;活动节点历史表中也多了一条班主任审批的记录,原来的班长审批节点信息的结束时间字段被赋值,而新加的班主任审批节点的结束时间为空;其他历史表也相应的增加了王五的相关信息。

8.接下来查询王五的任务,结果为:

任务ID:32502

任务名称:班主任审批

任务创建时间:Sat Jun 17 13:18:32 CST 2017

任务委派人:王五

流程实例ID:studentLeaveProcess:1:25004

拿着这个任务ID,去执行完成任务函数来完成班主任审批这个节点。执行完后整个流程结束,查询执行对象表,发现为空,当前没有执行对象;身份联系表为空,用户任务表也为空,其他历史表中依然有数据。此外历史流程实例表中,学生请假这个流程的结束时间被赋值,也说明了当前流程已结束。查看历史任务表,发现班主任审批这个字段的结束时间已被赋值。

9.最后贴上一些常用的SQL语句,对工作流的常用表进行查询:

select * from act_re_procdef;

流程部署表

select * from act_re_deployment;

流程定义表

select * from act_re_procdef;

资源文件表

select * from act_ge_bytearray;

执行对象表

select * from act_ru_execution;

身份联系表

select * from act_ru_identitylink;

用户任务表

select * from act_ru_task;

活动节点历史表

select * from act_hi_actinst;

历史身份联系表

select * from act_hi_identitylink;

历史流程实例表

select * from act_hi_procinst;

历史任务表

select * from act_hi_taskinst;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  activity-工作流