【Activiti工作流】8.流程实例,任务,执行对象控制流程的执行

我们之前讲过了流程的定义,启动,查看和删除,以及升级版本,接下来当流程
正式启动成功之后,我们就要学习流程实例/任务的执行了。

1,流程实例/任务的执行
(1)启动流程实例
(这里前提是大家部署好了流程)
/**
 * 启动流程
 * 当流程到达一个节点时,会在act_ru_execution表中产生1条数据
 * 如果当节点是用户任务节点,这时会在act_ru_task表中产生1条数据
 * */
@Test
public void startProcess() throws Exception{
	//按照流程定义的id启动:Helloworld:1:4 (只启动此版本流程,最高版本是HelloWorld:2:704)
	//runtimeService.startProcessInstanceById(processDefinitionId);
	//使用流程定义的key启动流程,默认会启动最高版本的流程
	String processDefinitionkey="HelloWorld";//流程定义的key就是HelloWorld
	RuntimeService runtimeService=processEngine.getRuntimeService();
	//获取流程实例对象
	ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(processDefinitionkey);
	System.out.println("pid:"+processInstance.getId());
	System.out.println("activitiId::"+processInstance.getActivityId());
	System.out.println("pdid:"+processInstance.getProcessDefinitionId());
}
我们执行一下,结果:



此时数据库中act_ru_execution表中产生一条新的数据:

act_ru_execution表是正在执行的执行对象表。
其中ID_是执行对象ID,PROC_INST_ID是流程实例ID。


结论:如果是单例流程(没有分支和聚合),那么流程实例ID
和执行对象ID是相同的。


有正在执行的,就有之前的历史,之前流程执行的历史,
我们在act_hi_procinst表中查看历史数据:



可以看到,我们之前有一个走完的流程的信息在历史表中存储,
那是我们Version为1的HelloWorld流程,第二个就是我们现在刚刚
创建的流程,可以看到开始时间和开始节点信息,由于流程没有结束,
所以还没有存储流程结束时间和流程结束节点的信息。


结论:一个流程实例只有一个,但是执行对象可以存在多个。
(存在于不是单例流程,而包含分支和聚合的流程)



2.任务信息
例如张三开始申请请假,那么张三填写完请假申请,点击提交之后,
目前此时张三就有一个待办事项,就是张三向上一级提交请假信息。
此时我们数据库中act_ru_task表中就有该数据:



办过的流程事务是有历史信息的,历史表为act_hi_taskinst:



还有一张表act_hi_actinst,是存放所有活动节点的历史表,包括任务和节点信息:



3.查询个人当前任务
通过上面的讲解,我们可以明白之前我们查询个人待办事项的代码:
/**查询当前的个人任务(实际就是查询act_ru_task表)*/
@Test
public void findMyPersonalTask(){
	String assignee="张三";
	//获取事务Service
	TaskService taskService=processEngine.getTaskService();
	List<Task> taskList=taskService.createTaskQuery()//创建任务查询对象
			   .taskAssignee(assignee)//指定个人任务查询,指定办理人
			   .list();//获取该办理人下的事务列表
	
	if(taskList!=null&&taskList.size()>0){
		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.getProcessInstanceId());
			System.out.println("执行对象ID:"+task.getExecutionId());
			System.out.println("流程定义ID:"+task.getProcessDefinitionId());
			System.out.println("#############################################");
		}
	}
}
运行结果:



我们的流程启动之后,第一个要办理的业务就是提交申请业务,此时的办理人就是
张三,所以通过张三去查询待办事项的时候,查询到的就是提交申请的任务信息。


然后我们分别执行完成任务的代码:
/**完成我的任务*/
@Test
public void completeMyPersonalTask(){
	String taskId="804";//上一次我们查询的任务ID就是804
	TaskService taskService=processEngine.getTaskService();
	taskService.complete(taskId);//完成taskId对应的任务
	System.out.println("完成ID为"+taskId+"的任务");
	
}
执行完804的任务,就完成了张三的任务

此时流程走到了部门经理李四那里:

执行上面的findMyPersonalTask()方法,将assignee换为李四,此时查询到:

跟数据库中的信息一样。


此时我们的流程历史信息走了三步:

接下来执行李四的任务

任务此时到总经理王五那里:

执行上面的findMyPersonalTask()方法,将assignee换为王五,此时查询到:

跟数据库中的信息一样。


接下来执行王五的任务:

此时流程走完,任务表中已经没有了信息:



查看流程信息表,也有了结束的时间:



查看任务历史表,可以看到三个任务的办理历史信息:



我们的流程历史表中,也存入了所有流程信息:



总结:
流程实例,执行对象,任务:
act_ru_execution 正在执行的执行对象表
act_hi_procinst 流程实例的历史表
act_tu_task 正在执行的任务表(只有节点是UserTask的时候,该表粗存在数据)
act_hi_taskinst 任务历史表(只有节点是UserTask的时候,该表存在数据)

act_hiactinst 所有活动节点的历史表

转载请注明出处:http://blog.csdn.net/acmman/article/details/63687082

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Activiti工作流的课件整体、讲师: 刘洋 内容如下: 1:工作流的概念 1 2:工作流执行 1 3:Activiti介绍 1 3.1:工作流引擎 2 3.2:BPMN 2 3.3:数据库(先学后看) 2 3.4:activiti.cfg.xml(activiti的配置文件) 4 3.5:logging.properties(日志处理) 5 4:准备环境 6 4.1:activiti5 软件环境 6 4.2:相关资源下载 6 4.3:安装流程设计器(eclipse插件) 6 4.4:对流程设计器的使用说明 10 4.5:准备Activiti5开发环境 11 5:核心API 12 5.1:ProcessEngine 13 5.2:RepositoryService 13 5.3:RuntimeService 14 5.4:TaskService 14 5.5:HistoryService 14 5.6:ProcessDefinition 14 5.7:ProcessInstance 14 5.8:Execution 14 6:HelloWorld序(模拟流程执行) 16 6.1:流程图: 16 6.2:部署流程定义 16 6.3:启动流程实例 17 6.4:查看我的个人任务 17 6.5:完成我的个人任务 17 7:管理流程定义 18 7.1:设计流程定义文档 18 7.2:部署流程定义(classpath路径加载文件) 19 7.3:部署流程定义(zip格式文件) 20 7.4:查看流程定义 21 7.5:删除流程定义 22 7.6:获取流程定义文档的资源(查看流程图附件) 22 7.7:附加功能:查询最新版本的流程定义 23 7.8:附加功能:删除流程定义(删除key相同的所有不同版本的流程定义) 23 7.9:总结 24 8:流程实例任务执行 25 8.1:流程图 25 8.2:部署流程定义 26 8.3:启动流程实例 26 8.4:查询我的个人任务 26 8.5:办理任务 27 8.6:查询流程状态(判断流程正在执行,还是结束) 28 8.7:附加功能:查询历史任务(后面讲) 28 8.8:附加功能:查询历史流程实例(后面讲) 29 8.9:总结 29 9:流程变量 30 9.1:流程图 30 9.2:部署流程定义 31 9.3:启动流程实例 32 9.4:设置流程变量 32 9.5:获取流程变量 33 9.6:模拟流程变量的设置和获取的场景 34 9.7:查询历史的流程变量 35 9.8:流程变量的支持的类型 35 9.9:总结 35 10:流程执行历史记录 36 10.1:查询历史流程实例 36 10.2:查询历史活动 37 10.3:查询历史任务 37 10.4:查询历史流程变量 37 10.5:总结 38 11:连线 38 11.1:流程图 38 11.2:部署流程定义+启动流程实例 39 11.3:查询我的个人任务 40 11.4:完成任务 40 11.5:总结 40 12:排他网关(ExclusiveGateWay) 41 12.1:流程图 41 12.2:部署流程定义+启动流程实例 42 12.3:查询我的个人任务 42 12.4:完成我的个人任务 43 13:并行网关(parallelGateWay) 44 13.1:流程图 44 13.2:部署流程定义+启动流程实例 45 13.3:查询我的个人任务 45 13.4:完成我的个人任务 45 14:开始活动节点 46 14.1:流程图 46 14.2:部署流程定义+启动流程实例+查询流程实例+查询历史流程实例 47 14.3:总结 47 15:接收活动(receiveTask,即等待活动) 47 15.1:流程图 48 15.2:部署流程定义+启动流程实例 48 16:用户任务(userTask,即用户操作的任务) 50 16.1:个人任务 50 16.2:组任务 56 16.3:工作流定义的角色组(了解) 68

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值