Activiti7 基本架構與使用步驟(一)


感覺跟activiti6差不多,不過7中刪除了兩個service(IdentityService、FormService),反而又多了兩個表。這里所有輸出的信息都是以后可以放在前端里的信息。


 

1.Activiti的架構說明

ProcessEngineConfiguration類,主要作用是加載activiti.cfg.xml配置文件

ProcessEngine類 作用是幫助我們可以快速得到各個Service接口,並且可以生成activiti的工作環境 25張表生成

Service接口          作用:可以快速實現數據25張表的操作。

      RepositoryService

         RuntimeService

         TaskService

         HistoryService

 

2.用BPMN的ActivitiDesigner插件繪制流程定義圖

3.部署流程定義

方式一:單個文件(bpmn文件,png文件)

/**
 * 流程定義的部署
 * 影響的activiti表有哪些
 * act_re_deployment 部署信息
 * act_re_procdef    流程定義的一些信息
 * act_ge_bytearray  流程定義的bpmn文件以及png文件
 */
public class ActivitiDeployment {
    // 流程定義部署
    public static void main(String[] args){
        //1.創建ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RepositoryService實例
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //3.進行部署
        Deployment deployment = repositoryService.createDeployment()//創建Deployment對象
                .addClasspathResource("diagram/holiday.bpmn")//添加bpmn文件
                .addClasspathResource("diagram/holiday.png")//添加png文件
                .name("請假申請單流程")
                .deploy();//部署

        //4.輸出部署的一些信息
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }
}

  

方式二:先將bpmn文件和png文件壓縮成zip文件。但是activiti最終也是以單個文件形式保存,說明activiti進行了解壓工作。

/**
 * Zip文件部署流程
 * 影響的activiti表有哪些
 *  act_re_deployment 部署信息
 *  act_re_procdef    流程定義的一些信息
 *  act_ge_bytearray  流程定義的bpmn文件以及png文件
 */
public class ActivitiZipDeployment {
    // 流程定義部署
    public static void main(String[] args){
        //1.創建ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RepositoryService實例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        
        //3.轉換出ZipInputStream流對象
        InputStream is = ActivitiZipDeployment.class.getClass().getClassLoader().getResourceAsStream("holidayBPMN.zip");

        //將InputStream流轉化為ZipInputStream
        ZipInputStream zipInputStream = new ZipInputStream(is);

        //3.進行部署
        Deployment deployment = repositoryService.createDeployment()//創建Deployment對象
                .addZipInputStream(zipInputStream)
                .name("請假申請單流程")
                .deploy();//部署

        //4.輸出部署的一些信息
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }
}

4.啟動流程實例:

/**
 * 啟動流程實例:
 *      前提是先已經完成流程定義的部署工作
 *
 *      背后影響的表:
 *      act_hi_actinst      已完成的活動信息
 *      act_hi_identitylink   參與者信息
 *      act_hi_procinst     流程實例
 *      act_hi_taskinst     任務實例
 *      act_ru_execution    執行表
 *      act_ru_identitylink   參與者信息
 *      act_ru_task   任務表
 */
public class ActivitiStartInstance {
    public static void main(String[] args) {
        //1.得到ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RunService對象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //3.創建流程實例(關鍵步驟)即 啟動流程實例
        //需要知道流程定義的Key:holiday(找key的方法  1:bpmn文件中的id,它對應的值就是key
        // 2:直接看數據庫中流程定義表act_re_procdet的key值)
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
        //4.輸出實例的相關信息
        System.out.println("流程部署ID="+processInstance.getDeploymentId());//null
        System.out.println("流程定義ID="+processInstance.getProcessDefinitionId());//holiday:1:4
        System.out.println("流程實例ID="+processInstance.getId());//2501
        System.out.println("流程活動ID="+processInstance.getActivityId());//獲取當前具體執行的某一個節點的ID(null)

    }
}

5.查看任務

TaskService    taskService.createTaskQuery()

/**
 * 查詢當前用戶的任務列表
 */
public class ActivitiTaskQuery {
    //lisi完成自己任務列表的查詢
    public static void main(String[] args) {
        //1.得到ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //3.根據流程定義的key以及負責人assignee來實現當前用戶的任務列表查詢
        List<Task> taskList = taskService.createTaskQuery()
                .processDefinitionKey("holiday")
                .taskAssignee("lisi")
                .list();//這里還有一個查詢唯一結果的方法:singleResult();、還有分頁查詢listPage(index,limit);
        //4.任務列表展示
        for (Task task : taskList) {
            //查的act_hi_procinst表的id
            System.out.println("流程實例ID="+task.getProcessInstanceId());
            //查的act_hi_taskinst表的id
            System.out.println("任務ID="+task.getId());
            //查的act_hi_taskinst表的Assignee_
            System.out.println("任務負責人名稱="+task.getAssignee());
            //查的act_hi_taskinst表的NAME_
            System.out.println("任務名稱="+task.getName());
        }
    }
}

6.完成任務

TaskService    taskService.complete(task.getId());//參數為任務ID

/**
 * 處理當前用戶的任務列表
 *  背后操作到的表:
 *           act_hi_actinst
 *           act_hi_identitylink
 *           act_hi_taskinst
 *           act_ru_execution
 *           act_ru_identitylink
 *           act_ru_task //只放當前要執行的任務
 */
public class ActivitiCompleteTask {
    /**
     * 李四完成自己的任務
     * @param args
     */
    public static void main(String[] args) {
        //1.得到ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService對象
        TaskService taskService = processEngine.getTaskService();

        //3.處理任務,結合當前用戶任務列表的查詢操作的話,可以知道任務ID=5002(實際操作中應該與查詢寫在一起)
        taskService.complete("5002");
    }
}

 


免責聲明!

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



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