activiti 中 deleteDeployment 和 deleteTask 方法删除流程任务的区别

61 阅读2分钟

deleteDeployment()方法

deleteDeployment 是 RepositoryService 仓库管理服务类的方法,deleteDeployment() 方法有一个主要参数为部署任务的id((String) deploymentId,任务部署时生成的id,存在于 act_re_deployment 表中)。

通过 RepositoryService 的 deleteDeployment(deploymentId) 方法删除任务,其实是将这个任务部署删除掉,但是如果该部署任务中已经创建了实例,并且实例中有部分任务已经执行完成,在这种情况下删除任务部署,将会抛出异常删除失败,因为这会导致该部署任务下的流程无法进行依赖。

可以使用 deleteDeployment(deploymentId,cascade) 方法进行联级删除,其中cascade是布尔值,true为联级删除,默认false。该方法可以删除任务的部署,并且与该部署相关的所有流程实例、实例下所有的任务、历史记录都删除掉。

deleteTask()方法

deleteTask 是 taskService 任务服务类的方法,deleteTask() 方法有一个主要参数为 taskId 。当流程部署后,可以激活一个实例流程,这时候流程表(act_ru_execution)中将会出现该流程实例的信息,包括该实例包含的各个节点信息,并且通过 parent_id 串联起来从而实现逐个节点相连,而任务表记录(act_ru_task)记录着各个流程实例当前执行到哪个节点。deleteTask(taskId) 方法删除任务其实就是删除 act_ru_task 表中的记录,从而跳过当前节点的审批。

如果想删除这个任务不想继续执行,可以使用 deleteTask(taskId,cascade) 进行联级删除,此外 deleteTask 方法还有另外一个可选参数为 (String) category,表示删除原因。

其他补充

原本打算使用流程实例id(processInstanceId)删除任务,但是发现并没有服务类有提供直接的方法进行删除,没办法只能通过 processInstanceId 找到任务部署的id,或者通过 processInstanceId 找到当前任务的 taskId,显然第二种是更加方便的。