activiti完成任务源码分析

任务的完成有三个方法,在此选其一进行分析。
在这里插入图片描述
首先是通过activiti引擎自带的任务处理服务taskService调用complete方法,直接看其具体实现,如下:
在这里插入图片描述
使用的命令模式直接执行CompleteTaskCmd中的execute方法
在这里插入图片描述
标注1是传入的变量,比如动态传入的处理人,多实例节点的集合元素等,标注2是具体的任务处理操作,继续跟踪,如下图:
在这里插入图片描述
标注1为开启事件,标注2为向流程人员表act_ru_identitylink中插入数据,如下:
在这里插入图片描述
标注3为调度任务完成事件,标注4为删除掉运行时任务表act_ru_task中的数据,标注5为向下个待办的跳转,继续追踪。
在这里插入图片描述
标注1获取当前节点的ActivityImpl对象,标注2根据节点behavior继续向下流转,标注3调度事件,继续跟踪标注2流转部分,如下:
在这里插入图片描述
继续向下流转
在这里插入图片描述
标注1为判断是不是补偿器【当勾选用户任务里面的是否补偿后,此节点称之为补偿器,只有当边流程中有界补偿事件或者中间补偿事件才生效】,标注2为单实例的流转,标注3为多实例的流转,这里继续跟踪单实例的情况。

在这里插入图片描述
继续往下走
在这里插入图片描述
首先判断当前节点是不是中间捕获事件,如果不是先调度取消定时任务事件,然后继续向下流转
在这里插入图片描述
标注1为获取默认流,标注2为获取当前节点的所有流出,标注3为计算线上的条件,将为真的放入集合
在这里插入图片描述
标注1流出线只有一条时执行take方法,标注2流出线有多条时执行takeAll方法,标注3为没有流出线时,标注3的具体内容见下图:

在这里插入图片描述
标注1当默认流不为空时,流转到默认流,否则有两种情况,当节点为补偿器的时候执行标注2部分,不然说明整个流程已经结束,没有流出执行标注3,下面跟踪当有一条线的时候take的具体实现
在这里插入图片描述
在这里插入图片描述
执行原子操作,这部分是引擎流转通用部分,可参见:activiti发起流程实例源码分析

到此完成整个任务的处理与流转到下个节点的操作,有啥疑问可留言一起讨论哈。


版权声明:本文为zpfzly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。