接着前面的文章继续讲,这一节我们将要介绍删除一个流程部署。
前面的文章都是围绕创建流程以及查看资源,获得资源或者处理任务来 。在实际的开发或者生产中,不可能都只是定义流程,部署流程,而不出现什么错误或者调整。当出现什么流程不满足某些特定要求时,难免会用到删除流程的相关操作。
和部署流程一样,删除一个流程部署也是要用到RepositoryService。
/**
* 删除一个流程部署
*/
@Override
public void deleteProcDeployment(){
//找出部署的流程
Deployment deployment = repositoryService.createDeploymentQuery().deploymentName("请假流程").singleResult();
//删除流程定义,流程部署,以及二进制的资源记录
repositoryService.deleteDeployment(deployment.getId());
}
由于上一节中的流程并没有执行完,所以直接删除这个流程部署,会抛出异常。
SQL: delete from ACT_RE_PROCDEF where DEPLOYMENT_ID_ = ?
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (activity
.act_ru_execution
, CONSTRAINT ACT_FK_EXE_PROCDEF
FOREIGN KEY (PROC_DEF_ID_
) REFERENCES act_re_procdef
(ID_
))
如果一个流程定义或者部署下面还有未执行完的流程实例,强制删除,会造成后续的流程执行过程找不到关联的部署信息。如果非要前置删除则会连同所有的未完成的流程步骤一起级联删除。
这里会用到RepositoryService的deleteDeployment方法的一个重载方法。deleteDeployment(String deploymentId, boolean cascade)级联删除。
不过这里我面还是先把上一节未跑完的流程跑完。顺便看下跑完流程数据库标有什么变化。方法还是和之前的一样。
完成所有用户任务后,会发现所有的act_ru_的表数据都是空的 。这也从侧面说明了ru表都是存放运行时的数据,这样运行时数据就不会太多,以保证运行时的效率。
同时act_hi_表所有的任务都有了endtime.
image.png
接下来我面继续执行上面的删除流程部署的操作。会发现执行成功,不再会抛出异常。同时所有的历史记录表里面的数据并不会删除,删除的只有流程部署所影响的3张表。
act_re_deployment:
act_re_procdef: image.png
act_ge_byteArray: image.png
本节结束。
网友评论