工作流 —activiti7流程實例


1. 什么是流程實例

  參與者(可以是用戶也可以是程序)按照流程定義內容發起一個流程,這就是一個流程實例,是態的。

2.  流程定義和流程實例的圖解

  

 

 

3.使用壓縮包 部署流程

  編寫測試代碼 

 //以壓縮包方式進行部署流程
    @Test
    public void deploymentByZip(){
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取一個RepositoryService對象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //定義一個輸入流,加載Zip文件
        InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("bpmnfile/holiday.zip");
        //定義一個ZIPInputStream對象
        ZipInputStream zipInputStream=new ZipInputStream(inputStream);
        //流程部署
        Deployment deploy = repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .name("請求審批流程")
                .key("holidayKey")
                .deploy();
        System.out.println("流程名稱:"+deploy.getName());
    }

  查看數據庫

 

 

 

4. 查看流程定義

  編寫測試代碼

 //流程定義的查看
    @Test
    public void getProDef(){
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取一個RepositoryService對象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //得到流程定義查看對象
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
        //指定查看的流程   processDefinitionKey()指定流程定義的key值   orderByProcessDefinitionVersion根據流程定義版本號排序
        List<ProcessDefinition> holiday = processDefinitionQuery.processDefinitionKey("holiday").orderByProcessDefinitionVersion().desc().list();
        for (ProcessDefinition proDef:holiday) {
            System.out.println("流程定義ID:"+proDef.getId());
            System.out.println("流程定義的名稱:"+proDef.getName());
            System.out.println("流程定義的Key:"+proDef.getKey());
            System.out.println("流程定義的版本號:"+proDef.getVersion());
        }
    }

  控制台結果

 

 

 5. 刪除流程

  編寫測試代碼

   //刪除流程
    @Test
    public  void deletDeployment(){
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取一個RepositoryService對象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //刪除流程
        repositoryService.deleteDeployment("5002",true);
    }

6. 從數據中讀取資源文件到本地

  編寫測試代碼 

 //從數據中讀取資源文件到本地
    @Test
    public void getResource() throws IOException {
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取一個RepositoryService對象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //獲取到流程查詢對象
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
        //獲取到流程資源
        processDefinitionQuery.processDefinitionKey("holiday");
        //獲取單一結果
        ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
        //流程部署的ID
        String deploymentId = processDefinition.getDeploymentId();
        //獲取到bpmnResource
        InputStream bpmnStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
        //獲取到png
        InputStream pngStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
        //構建輸出流
        OutputStream bpmnOut = new FileOutputStream("F:\\" + processDefinition.getResourceName());
        OutputStream pngOut = new FileOutputStream("F:\\" + processDefinition.getDiagramResourceName());
        //將數據輸出到磁盤當中
        IOUtils.copy(bpmnStream,bpmnOut);
        IOUtils.copy(pngStream,pngOut);
        //關流
        pngOut.close();
        bpmnOut.close();
        pngStream.close();
        bpmnStream.close();
    }

  查看文件

 

7.  業務系統和流程系統進行關聯

  編寫測試代碼

 //業務系統和流程系統進行關聯
    @Test
    public void startInstance(){
        /**
         * 創建張三請假的實例流程
         */
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //生成流程
        ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday","2");

        /**
         * 張三提交請假審批
         */
        //獲取一個TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //獲取張三的任務
        Task task = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").singleResult();
        //任務審批
        taskService.complete(task.getId());
    }

  查看數據庫

8. 流程激活和掛起

  編寫測試代碼

 /**
     * 所有流程定義的掛起
     */
    @Test
    public void allSuspend(){
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取repositoryService對象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //獲取流程定義
        ProcessDefinition holiday = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult();
        //獲取到當前流程定義是否為暫停狀態   suspended方法為true代表為暫停   false就是運行的
        boolean suspended = holiday.isSuspended();
        if(suspended){
            repositoryService.activateProcessDefinitionById(holiday.getId(),true,null);
            System.out.println("該流程定義激活");
        }else{
            repositoryService.suspendProcessDefinitionById(holiday.getId(),true,null);
            System.out.println("該流程定義暫停");
        }
    }

  控制台效果

 

 

 

 9. 單個流程實例的掛起

  編寫測試代碼 

 /**
     * 單個流程實例的掛起
     */
    @Test
    public void singleSuspend(){
        //獲取processEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取RuntimeService對象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("2501").singleResult();
        //獲取到當前流程定義是否為暫停狀態   suspended方法為true代表為暫停   false就是運行的
        boolean suspended = processInstance.isSuspended();
        if(suspended){
            runtimeService.activateProcessInstanceById("2501");
            System.out.println("xx的請假流程激活");
        }else{
            runtimeService.suspendProcessInstanceById("2501");
            System.out.println("xx的請假流程掛起");
        }
    }

  控制台效果

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM