《Activiti/Flowable 深入BPM工作流》-流程實例怎麼實現掛起?

 

 

《Activiti/Flowable  深入BPM工作流》-流程實例怎麼實現掛起?

  

 

一. 問題

   1. 什麼情況要進行流程的掛起?

   2. 具體怎麼將流程掛起?

 

 

二. 詳情

    1. 什麼情況要進行流程的掛起?

解答: 例如公司制度改變過程中的流程, 總經理更換過程中的流程

有100個人的流程, 70個人已經完成,30個人流程正好在總經理更換中,就需要掛起.

 

   2. 具體怎麼將流程掛起?

解答: 先判斷流程是否暫停: 通過 processDifinition.isSuspended();

         如果激活就掛起,否則不操作.

 

具體的代碼實現如下:

 

操作流程定義爲掛起狀態,該流程定義下邊所有的流程實例全部暫停:

流程定義爲掛起狀態該流程定義將不允許啓動新的流程實例,同時該流程定義下所有的流程實例將

全部掛起暫停執行。

 

1. 全部掛起

/**
     * 掛起流程定義
     */
    public void suspendOrActivateProcessDefinition() {
        // 流程定義 id
        String processDefinitionId = "";

        // 獲得 RepositoryService
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        ProcessEngine processEngine = configuration.buildProcessEngine();

        RepositoryService repositoryService = processEngine.getRepositoryService();

        // 獲得流程定義
        ProcessDefinition processDefinition = repositoryService
                .createProcessDefinitionQuery()
                .processDefinitionId(processDefinitionId).singleResult();

        // 判斷是否暫停
        boolean suspend = processDefinition.isSuspended();
        if (suspend) {
            // 如果暫停則激活,這裏將流程定義下的所有流程實例全部激活.
            repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
            System.out.println("流程定義:" + processDefinitionId + "已激活");
        } else {
            // 如果激活則掛起,這裏將流程定義的所有流程實例全部掛起
            repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
            System.out.println("流程定義: " + processDefinitionId + "掛起");
        }
    }

 

2. 單個掛起

操作流程實例對象,針對單個流程執行掛起操作,某個流程實例掛起則此流程不再繼續執行,完成

該流程實例的當前任務將報異常

 

/**
     * 單個流程實例掛起
     */

    @Test
    public void suspendOrActivateProcessDefinitionOne() {
        // 流程定義id
        String processDefinitionId = "";

        // 獲取runtimeService
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // 根據流程實例id查詢流程
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processDefinitionId(processDefinitionId).singleResult();

        // 是否暫停
        boolean suspend = processInstance.isSuspended();
        if (suspend) {
            // 如果暫停,則激活
            runtimeService.activateProcessInstanceById(processDefinitionId);
            System.out.println("流程實例: " + processDefinitionId + "激活");
        } else {
            // 如果激活則掛起
            runtimeService.suspendProcessInstanceById(processDefinitionId);
            System.out.println("流程實例:" + processDefinitionId + "掛起");
        }
    }

 

 

小結:

       要實現流程的掛起,我們首先需要的是判斷流程是否存在,再暫停,通過 processDifinition.isSuspended(); 如果前面都存在,再進

行流程的掛起操作.

如果激活就掛起,否則不操作; 其中掛起也分爲單個掛起和批量掛起,這個就需要具體情況具體來分析了.

    

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章