构建学生请假审批流程
2017-06-17 13:58
274 查看
构建学生请假审批流程
标签(空格分隔): activiti1.绘制流程图: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;相关文章推荐
- 在FlowPortal.net中实现-请假流程审批通过后自动设定外出
- Activiti工作流样例教程(请假-审批流程并向用户展示工作流实时过程图)
- 七步快捷构建基于点聚AIP模板文件的单据审批流程说明
- (六)Activiti之实现学生请假流程
- 使用flowable 6.1.2 REST API 运行请假审批流程
- flowable 6.1.2 命令行完成请假审批流程的例子
- 构建新版本APP上传流程
- 构建富互联网应用程序监控工作流和流程(7)
- 状态机工作流.实列.报销审批流程(二)
- 在杭州远程维护半年深圳东莞某大客户的工作审批流程软件组件-异地维护软件系统感受总结
- 构建富互联网应用程序监控工作流和流程(4)
- Workflow:实现一个简单的审批流程
- WF4.0实战(一):文件审批流程
- WF4.0实战(七):请假流程(带驳回操作)
- 写代码累了放松娱乐一下,在大型生产型企业成功实施工作审批流程项目的经验分享
- Dockerfile与Docker构建流程解读
- 初学JBPM—简单的请假流程
- 审批流程设计方案-介绍(一)
- 审批流程设计方案-介绍(一)
- JBPM之流程定义基本概念(通过请假流程进行解释)