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);//(順序不能換)
}