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

      

 

posted @ 2018-01-29 14:43  静喧  阅读(10197)  评论(0编辑  收藏  举报