1. 程式人生 > >Activiti工作流之任務的執行/查詢/完成

Activiti工作流之任務的執行/查詢/完成

8張表:

SELECT * FROM act_re_deployment;   -- 一 流程部署表

SELECT * FROM act_ge_bytearray;    -- 二 流程二進位制表

SELECT * FROM act_re_procdef;      -- 三 流程定義表

SELECT * FROM act_ru_execution;    -- 四 流程正在執行表

SELECT * FROM act_hi_procinst;     -- 五 流程例項歷史表

SELECT * FROM act_ru_task;         -- 六 流程當前任務表

SELECT * FROM act_hi_taskinst;     -- 七 流程歷史任務表

SELECT * FROM act_hi_actinst;      -- 八 流程歷史活動節點表

先決工作:

//定義一個成員變數
    RepositoryService repositoryService;
    
    RuntimeService runtimeService;
    
    TaskService taskService;
    
    /**
     * 獲取流程引擎
     */
    @Before
    public void setUp() throws Exception {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        repositoryService = processEngine.getRepositoryService();
        runtimeService = processEngine.getRuntimeService();
        taskService = processEngine.getTaskService();
    }

1 啟動流程

測試程式碼:

/**
     * 啟動流程
     */
    @Test
    public void startProcess() {
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("activiti_leave");
        String processInstanceId = processInstance.getId();
        String activityId = processInstance.getActivityId();
        String definitionId = processInstance.getProcessDefinitionId();
        
        System.out.println("流程例項ID:"+processInstanceId);
        System.out.println("正在活動的節點ID:"+activityId);
        System.out.println("流程定義ID:"+definitionId);
    }

2 查詢正在執行的例項

測試程式碼:

/**
     * 查詢正在執行的例項
     */
    @Test
    public void queryExecution(){
        List<Execution> executionList = runtimeService.createExecutionQuery()  //建立正在執行的流程查詢物件
                      .processDefinitionKey("activiti_leave")   //根據流程定義的key查詢
                      .orderByProcessInstanceId()  //根據流程例項id排序
                      .desc()  //倒序
                      .list();  //查詢出集合
        for(Execution execution: executionList){
            System.out.println("正在執行的流程物件的id: "+execution.getId());
            System.out.println("所屬流程例項的id:"+execution.getProcessInstanceId());
            System.out.println("正在活動的節點的id: "+execution.getActivityId());
        }
    }

3 查詢任務

測試程式碼:

/**
     * 根據辦理人查詢任務
     */
    @Test
    public void queryTaskByAssignee(){
        String assignee = "employee";
        List<Task> taskList = taskService.createTaskQuery()
                                     .processDefinitionKey("activiti_leave")
                                     .taskAssignee(assignee)
                                     .orderByTaskCreateTime()
                                     .desc()
                                     .list();
        
        for(Task task: taskList){
            System.out.println("任務id: "+task.getId());
            System.out.println("任務名字: "+task.getName());
            System.out.println("任務建立時間: "+task.getCreateTime());
            System.out.println("辦理人: "+task.getAssignee());
        }
    }

4 查詢任務位置

測試程式碼:

/**
     * 查詢當前流程例項狀態
     */
    @Test
    public void queryProInstanceStateByProInstanceId(){
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("35001").singleResult();
        if(processInstance == null){
            System.out.println("當前流程已經完成");
        }else{
            System.out.println("當前流程例項ID:"+processInstance.getId());
            System.out.println("當前流程所處的位置:"+processInstance.getActivityId());
        }
    }

5 完成任務

測試程式碼:

/**
     * 根據辦理人查詢任務
     */
    @Test
    public void queryTaskByAssignee(){
        String assignee = "employee";
        List<Task> taskList = taskService.createTaskQuery()
                                     .processDefinitionKey("activiti_leave")
                                     .taskAssignee(assignee)
                                     .orderByTaskCreateTime()
                                     .desc()
                                     .list();
        
        for(Task task: taskList){
            System.out.println("任務id: "+task.getId());
            System.out.println("任務名字: "+task.getName());
            System.out.println("任務建立時間: "+task.getCreateTime());
            System.out.println("辦理人: "+task.getAssignee());
        }
    }

Activiti系列回顧: