天天看點

activiti工作流學習筆記-2

一、繪制流程

  1、指定流程定義key值;

  流程定義key值是流程定義的辨別,建議:相同的業務流程,流程定義的key名字定義一樣,比如,如果需要建立新的業務流程,請假流程則使用新的key。

activiti工作流學習筆記-2

  2、指定任務負責人

activiti工作流學習筆記-2

 二、部署流程定義

  

//部署流程定義
    @Test
    public void deployProcess(){
        //擷取repositoryService
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService
                .createDeployment().addClasspathResource("bpmn/example.bpmn")
                .addClasspathResource("bpmn/example.png") //通過bpmn檔案生成的png檔案
                .name("test").deploy();
        System.out.println("測試結果:"+deployment.getId()+"=="+deployment.getName());
    }

      
//壓縮包部署方式
    @Test
    public void deployProcessByZip(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //定義輸入流
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("bpmn/example.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        Deployment deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
        System.out.println("測試流程部署ID=="+deployment.getId());
        System.out.println("測試流程部署NAME=="+deployment.getName());
    }      

  流程定義部署後操作activiti資料表如下:

  SELECT * FROM act_re_deployment #流程定義部署表,記錄流程部署資訊

  SELECT * FROM act_re_procdef #流程定義表,記錄流程定義資訊

  SELECT * FROM act_ge_bytearray #資源表

  說明:

  act_re_deployment和act_re_procdef一對多關系,一次部署在流程部署表生成一條記錄,但一次部署可以部署多個流程定義,每個流程定義在流程定義表生成一條記錄。

  每一個流程定義在act_ge_bytearray  會存在兩個資源記錄,bpmn和png。

    建議:一次部署一個流程,這樣部署表和流程定義表是一對一有關系,友善讀取流程部署及流程定義資訊。

三、檢視部署的流程定義

//檢視部署的流程定義
    @Test
    public void queryProcessDefinition(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();

        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
        //流程定義KEY
        String key = "example";
        List<ProcessDefinition> processDefinitionList =
                processDefinitionQuery.processDefinitionKey(key).orderByProcessDefinitionVersion().desc().list();
        for(ProcessDefinition processDefinition : processDefinitionList){
            System.out.println("流程定義ID=="+processDefinition.getId());
            System.out.println("流程定義NAME=="+processDefinition.getName());
            System.out.println("流程定義部署ID=="+processDefinition.getDeploymentId());
        }
    }      

四、删除部署成功的流程定義

//删除部署成功的流程定義
    @Test
    public void deleteProcessDefinition(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //流程定義部署ID
        String deploymentId = "7501";
        //删除流程定義,如果該流程定義已有流程執行個體啟動則删除時出錯
        repositoryService.deleteDeployment(deploymentId);

        //設定true 級聯删除流程定義,即使該流程有流程執行個體啟動也可以删除,設定為false非級别删除方式
        //repositoryService.deleteDeployment(deploymentId , true);
    }      

  1) 使用repositoryService删除流程定義

  2) 如果該流程定義下沒有正在運作的流程,則可以用普通删除。

  3) 如果該流程定義下存在已經運作的流程,使用普通删除報錯,可用級聯删除方法将流程及相關記錄全部删除。項目開發中使用級聯删除的情況比較多,删除操作一般隻開放給超級管理者使用。

五、啟動一個流程執行個體

//啟動一個流程執行個體
    @Test
    public void startProcessInstance(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取runtimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //根據流程定義KEY啟動流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("example");
        System.out.println("流程定義ID=="+processInstance.getProcessDefinitionId());
        System.out.println("流程執行個體ID=="+processInstance.getId());
        System.out.println("流程定義NAME=="+processInstance.getName());
    }      

六、查詢目前人待執行的任務

//查詢目前人待執行的任務
    @Test
    public void findPersonalTaskList(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取taskService
        TaskService taskService = processEngine.getTaskService();
        //擷取目前人待執行任務清單
        List<Task> taskList = taskService.createTaskQuery().taskAssignee("park").list();
        for(Task task : taskList){
            System.out.println("測試任務ID=="+task.getId());
            System.out.println("測試任務NAME=="+task.getName());
            System.out.println("測試流程執行個體IDE=="+task.getProcessInstanceId());
        }
        //目前人隻有單個任務時使用
        Task task = taskService.createTaskQuery().taskAssignee("park").singleResult();
        System.out.println("測試任務ID=="+task.getId());
        System.out.println("測試任務NAME=="+task.getName());
        System.out.println("測試流程執行個體IDE=="+task.getProcessInstanceId());
    }      

七、完成任務

//完成任務
    @Test
    public void completTask(){
        //建立processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //擷取taskService
        TaskService taskService = processEngine.getTaskService();
        //完成任務
        String taskId = "12";
        taskService.complete(taskId);
    }