Activiti 學習筆記七:連線(SequenceFlow)

衣舞晨風發表於2016-09-08

這裡寫圖片描述

一、部署流程定義

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /** 部署流程定義(從inputStream) */
    @Test
    public void deploymentProcessDefinition_inputStream() {
        InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");
        InputStream inputStreamPng = this.getClass().getResourceAsStream("sequenceFlow.png");
        Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署物件相關的Service
                .createDeployment()// 建立一個部署物件
                .name("連線")// 新增部署的名稱
                .addInputStream("sequenceFlow.bpmn", inputStreamBpmn)//
                .addInputStream("sequenceFlow.png", inputStreamPng)//
                .deploy();// 完成部署
        System.out.println("部署ID:" + deployment.getId());//
        System.out.println("部署名稱:" + deployment.getName());//
    }

注意:如果將流程圖放置在和java類相同的路徑,需要配置
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
點選remove按鈕,移除*/.java
這裡寫圖片描述

二、啟動流程例項

/** 啟動流程例項 */
    @Test
    public void startProcessInstance() {
        // 流程定義的key
        String processDefinitionKey = "sequenceFlow";
        ProcessInstance pi = processEngine.getRuntimeService()// 與正在執行的流程例項和執行物件相關的Service
                .startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程例項,key對應helloworld.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動
        System.out.println("流程例項ID:" + pi.getId());// 流程例項ID 101
        System.out.println("流程定義ID:" + pi.getProcessDefinitionId());// 流程定義ID
                                                                    // helloworld:1:4
    }

三、查詢我的個人任務

/** 查詢當前人的個人任務 */
    @Test
    public void findMyPersonalTask() {
        String assignee = "趙六";
        List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的Service
                .createTaskQuery()// 建立任務查詢物件
                /** 查詢條件(where部分) */
                .taskAssignee(assignee)// 指定個人任務查詢,指定辦理人
                // .taskCandidateUser(candidateUser)//組任務的辦理人查詢
                // .processDefinitionId(processDefinitionId)//使用流程定義ID查詢
                // .processInstanceId(processInstanceId)//使用流程例項ID查詢
                // .executionId(executionId)//使用執行物件ID查詢
                /** 排序 */
                .orderByTaskCreateTime().asc()// 使用建立時間的升序排列
                /** 返回結果集 */
                // .singleResult()//返回惟一結果集
                // .count()//返回結果集的數量
                // .listPage(firstResult, maxResults);//分頁查詢
                .list();// 返回列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任務ID:" + task.getId());
                System.out.println("任務名稱:" + task.getName());
                System.out.println("任務的建立時間:" + task.getCreateTime());
                System.out.println("任務的辦理人:" + task.getAssignee());
                System.out.println("流程例項ID:" + task.getProcessInstanceId());
                System.out.println("執行物件ID:" + task.getExecutionId());
                System.out.println("流程定義ID:" + task.getProcessDefinitionId());
                System.out.println("########################################################");
            }
        }
    }

四、完成我的任務

/** 完成我的任務 */
    @Test
    public void completeMyPersonalTask() {
        // 任務ID
        String taskId = "67504";
        // 完成任務的同時,設定流程變數,使用流程變數用來指定完成任務後,下一個連線,對應sequenceFlow.bpmn檔案中${message=='不重要'}
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("message", "重要");
        processEngine.getTaskService()// 與正在執行的任務管理相關的Service
                .complete(taskId, variables);
        System.out.println("完成任務:任務ID:" + taskId);
    }

說明:
1)使用流程變數,設定連線需要的流程變數的名稱message,並設定流程變數的值
對應:
這裡寫圖片描述
流程會按照指定的連線完成任務。

五、總結

1、一個活動中可以指定一個或多個SequenceFlow(Start中有一個,End中沒有)。
* 開始活動中有一個SequenceFlow 。
* 結束活動中沒有SequenceFlow 。
* 其他活動中有1條或多條SequenceFlow
2、如果只有一個,則可以不使用流程變數設定codition的名稱;
這裡寫圖片描述
如果有多個,則需要使用流程變數設定codition的名稱。message表示流程變數的名稱,‘不重要’表示流程變數的值,${}中間的內容要使用boolean型別的表示式,用來判斷應該執行的連線。
這裡寫圖片描述
演示demo下載:http://download.csdn.net/detail/xunzaosiyecao/9625592

本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章