Activiti流程變量


流程變量在整個工作流中扮演很重要的作用

  例如:請假流程中有請假天數、請假原因等一些參數都為流程變量的范圍。流程變量的作用域范圍是流程實例。也就是說各個流程實例的流程變量是不相互影響的。

添加流程變量

  1、在啟動流程實例時,可以添加流程變量。  

public void startProcess() throws Exception {
        String processDefinitionKey ="varTest";
        // 創建流程變量
        Map<String,Object> variables = new HashMap<String,Object>();
        variables.put("請假人", "馮小剛");
        // 在啟動時設置流程變量
        ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey , variables );
        System.out.println("pid:" + pi.getId());
    }

說明:

  1)     在啟動流程實例時,通過重載startProcessInstanceByKey的方法可以加載流程變量。

  2)     第二個參數要求是Map<String ,Object>類型,意味着可以添加多個流程變量。

  3)     當這段代碼執行完以后,會在數據庫表act_ru_variable中添加兩行記錄。

 

  2、在辦理任務時

    在辦理任務時,有時候任務辦理完成以后,要傳遞一些信息到系統中。這個時候可以利用TaskService這個類來添加流程實例。

public void setVar() throws Exception {
        String processInstanceId = "1901";
        Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
//        String taskId 
        /**
         *  在辦理過程中設置流程變量
         */
//        taskService.setVariable(taskId, variableName, value)   // 設置一個流程變量
        Map<String, Object> variables = new HashMap<>();
//        variables.put("請假時間", "2013-11-22");
//        variables.put("請假天數", "3");
        variables.put("請假天數", 3);
        taskService.setVariables(task.getId(), variables );
        /**
         * 在任務完成時設置流程變量
         */
//        taskService.complete(taskId)
//        Map<String, Object> variables = new HashMap<>();
//        variables.put("請假原因", "約會!!");
//        taskService.complete(task.getId(), variables);
        
    }

說明:

  1)     利用setVariables方法在任務辦理過程中添加一批流程變量。

  2)     利用setVariable方法在任務辦理過程中添加一個流程變量。

  3)     TaskService有一個重載 complete方法

 

  3、執行流程實例時直接在Execution上設置流程變量 

    因為流程變量的作用域就是流程實例,所以只要設置就行了,不用管在哪個階段

public void setVarByExecution() throws Exception {
        String processInstanceId = "1901";
        Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
//        String taskId 
        /**
         *  在辦理過程中設置流程變量
         */
//        taskService.setVariable(taskId, variableName, value)   // 設置一個流程變量
        Map<String, Object> variables = new HashMap<>();
        variables.put("批注", "好好約會,注意安全!!");
        runtimeService.setVariables(task.getExecutionId(), variables);
        /**
         * 在任務完成時設置流程變量
         */
//        taskService.complete(taskId)
//        Map<String, Object> variables = new HashMap<>();
//        variables.put("請假原因", "約會!!");
//        taskService.complete(task.getId(), variables);
        
    }

另一種設置變量的方法:

public void setVarByObj() throws Exception {
        String processInstanceId = "1901";
        Task task =taskService.createTaskQuery().taskAssignee("manager").processInstanceId(processInstanceId ).singleResult();
        Form form = new Form();//這個javabean實現了Serializable接口
  
    form.setName("表單名稱");
 form.setContent("我是張三,我要請假3天"); taskService.setVariable(task.getId(), "form", form); }

 

獲取流程變量

  可以通過runTimeService的方法來獲取流程變量。

public void viewVar() throws Exception {
        String processInstanceId = "1901";
        Task task =taskService.createTaskQuery().taskAssignee("user").processInstanceId(processInstanceId ).singleResult();
        System.out.println("taskName:" + task.getName());
//        String variableName = "請假人";
//        String val = (String)taskService.getVariable(task.getId(), variableName );
        Map<String,Object> vars = taskService.getVariables(task.getId());
        for (String variableName : vars.keySet()) {
            String val = (String) vars.get(variableName);
            System.out.println(variableName + " = " +val);
        }
    }

  說明:這些流程變量是從act_ru_variable這個表中讀出來的。

 


免責聲明!

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



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