Activiti6.0流程、任务、执行的定义及区别

一、流程实例,任务,执行对象相关表结构

  • act_ru_execution 正在执行的执行对象表

  • act_hi_procinst 流程实例的历史表

  • act_ru_task 正在执行的任务表,(只有userTask任务节点,才会在此表中产生数据)

  • act_hi_taskinst 历史任务表,(只有userTask任务节点,才会在此表中产生数据)

  • act_hi_actinst 所有活动节点的历史表

二、请假流程实例进行说明

2.1、BPMN流程图

请假流程图

2.2 BPMN代码

<process id="leave" name="leave process" isExecutable="true">

<startEvent id="startevent1" name="Start"></startEvent>

<userTask id="usertask1" name="组长审批" activiti:assignee="组长"></userTask>

<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>

<userTask id="usertask2" name="主管审批" activiti:assignee="主管"></userTask>

<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

<endEvent id="endevent1" name="End"></endEvent>

<sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>

</process>

2.3 运行流程进行说明

1 启动流程

RuntimeService runtimeService = processEngine.getRuntimeService();

runtimeService.startProcessInstanceByKey("leave");

启动流程之后 act_ru_execution、act_hi_procinst表中会各增加一条记录

act_hi_procinst

act_ru_execution

从act_ru_execution中的ACT_ID_字段可以看出,当前执行节点在userTask1。


启动流程的同时,流程流向第一个用户任务节点,在act_ru_task,act_hi_taskinst各产生一条数据

act_ru_task

act_hi_taskinst

从act_hi_taskinst中END_TIME_字段可以看出,此时userTask1节点正在执行。


2 组长审批任务

String taskId ="2505";
taskService.complete(taskId);
当组长审批完userTask1任务之后,当前流程流转到领导审批节点:
  • act_ru_task表数据变化
    已经完成的userTask1任务节点数据被清除,新增一条userTask2节点数据

  • act_hi_taskinst表数据变化
    已经完成的userTask1节点数据依然存在,其中END_TIME_字段为此任务节点结束时间、并且新增一条userTask2任务记录,其END_TIME_字段为NULL,表示此任务节点还在运行

  • act_ru_execution表数据变化
    由于当前流程进行了运转,所以当前执行对象会更新当前流程执行了什么节点之上

3 领导审批任务

String taskId ="5002";
taskService.complete(taskId);

在此流程图中当领导进行审批之后,相当于走完了流程,也就意味着流程结束

  • act_ru_task表变化
    同userTask1节点执行,当此任务节点执行结束之后就会从此表中删除这条节点记录

  • act_hi_taskinst表数据变化
    更新此任务节点记录,更新END_TIME_字段值为任务节点结束时间

4 流程结束

  • act_ru_execution表数据变化
    由于领导审批结束后,流程执行结束,也就是执行对象执行完毕,该条执行对象对应数据会被清除。

  • act_hi_procinst表数据变化
    流程执行结束,更新流程实例结束时间

     

    act_hi_procinst.png

三、总结

  • ProcessInstance流程实例
    • 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有1个
    • 代表流程定义的执行实例。一个流程实例包括了所有的运行节点
    • 流程实例通常也可以叫做执行实例根节点

注意
(1)如果是单例流程,执行对象ID就是流程实例ID
(2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
(3)一个流程中,流程实例只有1个,执行对象可以存在多个。

  • Execution 执行对象
    • 启动流程实例的时候会首先创建流程实例,然后创建执行实例
    • 流程运转的过程中永远执行的是自己对应的执行实
    • 当所有的执行实例按照规则执行完毕之后,则实例随之结束
    • 流程按流程定义的规则执行一次的过程,就可以表示执行对象Execution
    • 一个流程中,执行对象可以存在多个,但是流程实例只能是一个

对应表
act_ru_execution: 正在执行的信息
act_hi_procinst:已经执行完的历史流程实例信息
act_hi_actinst:存放历史所有完成的活动

  • Task任务 --- 执行到某任务环节时生成的任务信息
    对应的表:
    act_ru_task:正在执行的任务信息
    act_hi_taskinst:已经执行完的历史任务信息
发布了121 篇原创文章 · 获赞 450 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/fuhanghang/article/details/103751157