flowable实战(⼗)flowable启动流程到完成所有任务之间的数据库变化来写⼀下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化
先给出流程图,很简单的流程,就是两个UserTask:
代码如下:
DeploymentBuilder ateDeployment();
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 ateProcessDefinitionQuery().Id()).singleResult(); ProcessInstance pi=runtimeService.Id());
以上代码是搜索此次部署对应的流程定义信息,也就是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 ateTaskQuery().Id()).taskDefinitionKey(“task1”).singleResult(); taskService.Id(), “var1”, “var1”);
Id());
以上代码是查询流程本次执⾏实例下名为task1的任务,然后给任务设置全局变量,如果调⽤的是taskService.setVariableLocal⽅法,则任务执⾏完毕后,相关变量数据就会删除,然后再完成任务。
⾸先向act_ru_variable表中插⼊变量信息,包含本次流程执⾏实例的两个id外键,但不包括任务的id,因为setVariable⽅法设置的是全局变量,也就是整个流程都会有效的变量:
执⾏完task1后,act_ru_task表中task1的记录被删除,新插⼊task2的记录:
同时向act_hi_var_inst和act_hi_taskinst插⼊历史记录
createprocessaTask ateTaskQuery().Id()).taskDefinitionKey(“task2”).singleResult(); Id());
以上代码是查询本流程执⾏实例下的task2并完成task2。
此时整个流程执⾏完毕,act_ru_task,act_ru_execution和act_ru_variable表全被清空
其实全程有⼀个表⼀直在记录所有动作,就是act_hi_actinst表:
List<HistoricVariableInstance> ateHistoricVariableInstanceQuery().Id()).list(); for(HistoricVariableInstance var:vars){
System.out.VariableName());
System.out.Value());
}
以上这段代码是查询act_hi_varinst表中变量历史记录的。因为流程执⾏完毕act_ru_variable表被清空。
讲解完毕
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论