2015-06-26 10:15 34242人阅读 评论(6) 收藏 举报mysql
分类:sql
java学习(46) 数据库
上一篇文章中咱们将Activiti流程定义管理的知识进行了介绍,这篇文章咱们继续Activiti流程实例和任务管理的学习。学习
流程实例(ProcessInstance)和上一篇文章中流程定义(ProcessDefinition)的关系,与类和实例对象的关系有点像,ProcessDefinition是整个流程步骤的说明而ProcessInstance就是指流程定义从开始到结束的那个最大的执行路线。 spa
提到ProcessInstance同时又会出现另外一个名词,那就是执行对象(Execution),Execution是按照ProcessDefinition的规则执行的当前的路线,.net
若是ProcessDefinition只有一个执行路线的话,那么Execution和ProcessInstance就是彻底同样了若是ProcessDefinition中有多个执行路线的话,Execution和ProcessInstance多是同一个也可能不是同一个。因此得出结论:一个流程中ProcessInstance有且只能有一个,而Execution能够存在多个。对象
任务(Task)应该比较好理解,就是当流程执行到某步骤或某环节时生产的任务信息。blog
在上篇文章中咱们将如何画流程图、如何部署流程定义已经介绍,流程定义和流程实例的关系刚才已经介绍了,全部如今咱们就该开始启动流程实例了:
启动流程实例
[java] view plain copy
运行结果:
流程实例ID:501
流程定义ID:HelloWorld:2:404
说明:
1)在数据库的act_ru_execution正在执行的执行对象表中插入一条记录
2)在数据库的act_hi_procinst程实例的历史表中插入一条记录
3)在数据库的act_hi_actinst活动节点的历史表中插入一条记录
4)咱们图中节点都是任务节点,因此同时也会在act_ru_task流程实例的历史表添加一条记录
5)在数据库的act_hi_taskinst任务历史表中也插入一条记录。
查询历史流程实例
流程实例启动之后,咱们也能够对某个流程实例一共一共执行了多少次流程进行查询,由于咱们本例中如今刚进行了一个流程,因此目前只能查出一个流程:
[java] view plain copy
运行结果:
501 HelloWorld:2:404 Fri Jun 26 09:34:51 CST 2015 null
查询当前的我的任务
在上面讲流程启动后,由于该节点是任务节点因此在任务表中插入了任务的记录,如今咱们就经过办理人将任务进行下查询:
[java] view plain copy
运行结果:
任务ID:504
任务名称:提交申请
任务的建立时间:Fri Jun 2609:34:51 CST 2015
任务的办理人:张三
流程实例ID:501
执行对象ID:501
流程定义ID:HelloWorld:2:404
##################################################
说明:
1)由于是任务查询,因此从processEngine中应该获得TaskService
2)使用TaskService获取到任务查询对象TaskQuery
3)为查询对象添加查询过滤条件,使用taskAssignee指定任务的办理者(即查询指定用户的代办任务),同时能够添加分页排序等过滤条件
4)调用list方法执行查询,返回办理者为指定用户的任务列表
5)任务ID、名称、办理人、建立时间能够从act_ru_task表中查到。
6)在如今这种状况下,ProcessInstance至关于Execution
7) 一个Task节点和Execution节点是1对1的状况,在task对象中使用Execution_来表示他们之间的关系
8)任务ID在数据库表act_ru_task中对应“ID_”列
完成任务
查询完任务后,咱们接下来将这个任务id为504的任务进行完成:
[java] view plain copy
运行结果:
完成任务:任务ID:504
说明:
1)是完成任务,因此从ProcessEngine获得的是TaskService。
2)当执行完这段代码,再以员工的身份去执行查询的时候,会发现这个时候已经没有数据了,由于正在执行的任务中没有数据。
3)对于执行完的任务,activiti将从act_ru_task表中删除该任务,下一个任务会被插入进来。
4)以”部门经理”的身份进行查询,能够查到结果。由于流程执行到部门经理审批这个节点了。
5)再执行办理任务代码,执行完之后以”部门经理”身份进行查询,没有结果。
6)重复第3和4步直到流程执行完。
查询历史任务
员工张三的任务已经完成,如今任务到部门经理李四了,若是咱们如今仍然查询张三的任务的话,天然是查询不到了,只有查询李四才能够查到,不过咱们能够经过流程实例id查询历史任务,查询历史任务能够将已经办理过的任务和如今正在执行的任务都查询出来:
[java] view plain copy
运行结果:
504 提交申请 501 Fri Jun 26 09:34:51 CST2015 Fri Jun 26 09:50:50 CST 2015 959867
################################
602 审批【部门经理】 501 Fri Jun 26 09:50:51 CST2015 null null
################################
查询流程是否结束
咱们还能够经过流程实例id查询某个流程如今的状态,是仍然在执行过程当中呢,仍是流程执行已经结束:
[java] view plain copy
运行结果:
流程没有结束
咱们这篇文章主要是流程实例、执行对象、任务以及他们之间的关系进行了学习,同时咱们还将启动和查询流程实例、判断流程实例是否执行结束、查看和办理任务以及查询历史任务都进行了介绍。
顶
11
踩
7