Activiti 5.18启动流程到完成所有任务之间的数据库变化
2016-09-20 22:42
429 查看
来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化
先给出流程图,很简单的流程,就是两个UserTask:
代码如下:
DeploymentBuilder builder=repositoryService.createDeployment();
Deployment deployment=builder.addClasspathResource("bpmn/simple_process.bpmn").deploy();
以上代码是部署这个流程,部署完毕后,act_re_deployment表中会有一条部署记录,记录这次部署的基本信息,然后是act_ge_bytearray表中有两条记录,记录的是本次上传的bpmn文件和对应的图片文件,每条记录都有act_re_deployment表的外键关联,然后是act_re_procdef表中有一条记录,记录的是该bpmn文件包含的基本信息,包含act_re_deployment表外键。
注意看这个5001就是act_re_deployment表外键
ProcessDefinition pd=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
ProcessInstance pi=runtimeService.startProcessInstanceById(pd.getId());
以上代码是搜索此次部署对应的流程定义信息,也就是act_re_procdef表的信息查询。然后启动这个流程。
首先向act_ru_execution表中插入一条记录,记录的是这个流程定义的执行实例,其中id和proc_inst_id相同都是流程执行实例id,也就是本次执行这个流程定义的id,包含流程定义的id外键(simpleProcess:1:5004)。
然后向act_ru_task插入一条记录,记录的是第一个任务的信息,也就是开始执行第一个任务。包括act_ru_execution表中的execution_id外键和proc_inst_id外键,也就是本次执行实例id。
然后向act_hi_procinst表和act_hi_taskinst表中各插入一条记录,记录的是本次执行实例和任务的历史记录:
Task task1=taskService.createTaskQuery().processInstanceId(pi.getId()).taskDefinitionKey("task1").singleResult();
taskService.setVariable(task1.getId(), "var1", "var1");
taskService.complete(task1.getId());
以上代码是查询流程本次执行实例下名为task1的任务,然后给任务设置全局变量,如果调用的是taskService.setVariableLocal方法,则任务执行完毕后,相关变量数据就会删除,然后再完成任务。
首先向act_ru_variable表中插入变量信息,包含本次流程执行实例的两个id外键,但不包括任务的id,因为setVariable方法设置的是全局变量,也就是整个流程都会有效的变量:
执行完task1后,act_ru_task表中task1的记录被删除,新插入task2的记录:
同时act_ru_execution表中的记录并没有删除,而是将正在执行的任务变成task2
同时向act_hi_var_inst和act_hi_taskinst插入历史记录
Task task2=taskService.createTaskQuery().processInstanceId(pi.getId()).taskDefinitionKey("task2").singleResult();
taskService.complete(task2.getId());
以上代码是查询本流程执行实例下的task2并完成task2。
此时整个流程执行完毕,act_ru_task,act_ru_execution和act_ru_variable表全被清空
其实全程有一个表一直在记录所有动作,就是act_hi_actinst表:
List<HistoricVariableInstance> vars=historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();
for(HistoricVariableInstance var:vars){
System.out.println(var.getVariableName());
System.out.println(var.getValue());
}
以上这段代码是查询act_hi_varinst表中变量历史记录的。因为流程执行完毕act_ru_variable表被清空。
讲解完毕!
先给出流程图,很简单的流程,就是两个UserTask:
代码如下:
DeploymentBuilder builder=repositoryService.createDeployment();
Deployment deployment=builder.addClasspathResource("bpmn/simple_process.bpmn").deploy();
以上代码是部署这个流程,部署完毕后,act_re_deployment表中会有一条部署记录,记录这次部署的基本信息,然后是act_ge_bytearray表中有两条记录,记录的是本次上传的bpmn文件和对应的图片文件,每条记录都有act_re_deployment表的外键关联,然后是act_re_procdef表中有一条记录,记录的是该bpmn文件包含的基本信息,包含act_re_deployment表外键。
注意看这个5001就是act_re_deployment表外键
ProcessDefinition pd=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
ProcessInstance pi=runtimeService.startProcessInstanceById(pd.getId());
以上代码是搜索此次部署对应的流程定义信息,也就是act_re_procdef表的信息查询。然后启动这个流程。
首先向act_ru_execution表中插入一条记录,记录的是这个流程定义的执行实例,其中id和proc_inst_id相同都是流程执行实例id,也就是本次执行这个流程定义的id,包含流程定义的id外键(simpleProcess:1:5004)。
然后向act_ru_task插入一条记录,记录的是第一个任务的信息,也就是开始执行第一个任务。包括act_ru_execution表中的execution_id外键和proc_inst_id外键,也就是本次执行实例id。
然后向act_hi_procinst表和act_hi_taskinst表中各插入一条记录,记录的是本次执行实例和任务的历史记录:
Task task1=taskService.createTaskQuery().processInstanceId(pi.getId()).taskDefinitionKey("task1").singleResult();
taskService.setVariable(task1.getId(), "var1", "var1");
taskService.complete(task1.getId());
以上代码是查询流程本次执行实例下名为task1的任务,然后给任务设置全局变量,如果调用的是taskService.setVariableLocal方法,则任务执行完毕后,相关变量数据就会删除,然后再完成任务。
首先向act_ru_variable表中插入变量信息,包含本次流程执行实例的两个id外键,但不包括任务的id,因为setVariable方法设置的是全局变量,也就是整个流程都会有效的变量:
执行完task1后,act_ru_task表中task1的记录被删除,新插入task2的记录:
同时act_ru_execution表中的记录并没有删除,而是将正在执行的任务变成task2
同时向act_hi_var_inst和act_hi_taskinst插入历史记录
Task task2=taskService.createTaskQuery().processInstanceId(pi.getId()).taskDefinitionKey("task2").singleResult();
taskService.complete(task2.getId());
以上代码是查询本流程执行实例下的task2并完成task2。
此时整个流程执行完毕,act_ru_task,act_ru_execution和act_ru_variable表全被清空
其实全程有一个表一直在记录所有动作,就是act_hi_actinst表:
List<HistoricVariableInstance> vars=historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();
for(HistoricVariableInstance var:vars){
System.out.println(var.getVariableName());
System.out.println(var.getValue());
}
以上这段代码是查询act_hi_varinst表中变量历史记录的。因为流程执行完毕act_ru_variable表被清空。
讲解完毕!
相关文章推荐
- Activiti 5.18启动流程到完成所有任务之间的数据库变化(转)
- Shark编程实例:启动一个流程,获得所有任务的列表,完成一个任务
- activiti自定义流程之Spring整合activiti-modeler实例(八):完成个人任务
- activiti流程设计 完成任务 查询个人任务 创建23张表
- activiti自定义流程之整合(七):完成我的申请任务
- (十)Activitivi5之启动流程/完成任务的时候设置流程变量
- activiti自定义流程之Spring整合activiti-modeler实例(八):完成个人任务
- Java Activiti(2)--基础深入流程添加、删除、完成任务等
- Activiti5流程基本代码,以及相应数据库的变化
- JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- activiti任务监听可以获取启动流程时的参数
- activiti 工作流会签 / 多人审批时一人通过也可 / 在当前节点获取下一节点的信息 / 流程部署之后发布之前获取所有节点的信息 / 流程启动开始之前传送之后节点办理人 / 同一结点设置多个监听
- activiti学习--05流程实例:部署流程定义+部署流程定义+查询当前人的个人任务+完成我的任务
- 文章标题JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- Liferay7 BPM门户开发之47: 集成Activiti待办已办任务清单和流程启动
- activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务
- Activiti系列:带有serviceTask的或者定时启动任务的流程部署失败的原因分析
- 【入门篇】Activiti完成指定流程定义下任务
- Dalvik VM启动流程之间单分析
- 主线程等待线程池所有任务完成