Activiti 删除部署与流程实例
Activiti 删除部署与流程实例介绍:
很多新手在刚接触的Activiti的时候,当想删除该流程的时候会感到头痛吧!当然包括我也一样,想删除,那么多表也不知道从哪里删除,瞎弄了好久还是无法删除完。Activiti 删除部署,就是删除上传的流程。删除流程实例,就是删除startProcessInstanceByKey()保存成功的任务。
Activiti 删除部署:
删除部署需要获取到部署Id(有多种方式):
Task task=taskService.createTaskQuery() // 创建任务查询
.taskId(taskId) // 根据任务id查询
.singleResult();
String processDefinitionId=task.getProcessDefinitionId(); // 获取流程定义id
/**
* createProcessDefinitionQuery() // 创建流程定义查询
* processDefinitionId(processDefinitionId) // 根据流程定义id查询
**/
ProcessDefinition processDefinition=repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
.singleResult();
String deploymentId = processDefinition.getDeploymentId(); //部署id
或者:
/**
* .createHistoricProcessInstanceQuery() //对应历史的流程实例表
* processInstanceBusinessKey(key) //key表示的是业务的BusinessKey
**/
HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()
.processInstanceBusinessKey(key)
.singleResult();
ProcessDefinition processDefinition= repositoryService.createProcessDefinitionQuery()
.processDefinitionId(hpi.getProcessDefinitionId())
.singleResult();
String deploymentId = processDefinition.getDeploymentId(); //部署id
删除部署信息:
repositoryService.deleteDeployment(部署id); //普通删除,如果当前部署的规则还存在正在制作的流程,则抛异常
repositoryService.deleteDeployment(部署id,boolean值); //级联删除,如果 boolean值为true时,会删除所有和当前部署的规则相关的信息,包括历史的信息。
Activiti 删除流程实例:
获取该流程的实例id:
/**
* .createHistoricProcessInstanceQuery() //对应历史的流程实例表
* processInstanceBusinessKey(key) //key表示的是业务的BusinessKey
**/
HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()
.processInstanceBusinessKey(key)
.singleResult();
String processInstanceId = hpi.getId(); //流程实例ID
判断该流程实例是否结束,未结束和结束两者删除表的信息是不一样的。
ProcessInstance pi = runtimeService.createProcessInstanceQuery()//
.processInstanceId(processInstanceId)// 使用流程实例ID查询
.singleResult();
if(pi==null){
//该流程实例已经完成了
historyService.deleteHistoricProcessInstance(processInstanceId);
}else{
//该流程实例未结束的
runtimeService.deleteProcessInstance(processInstanceId,"");
historyService.deleteHistoricProcessInstance(processInstanceId);//(顺序不能换)
}