基於Activiti工作流引擎(四)

流程變量

流程變量在整個工作流中扮演很重要的作用。例如:請假流程中有請假天數、請假原因等一些參數都爲流程變量的範圍。流程變量的作用域範圍是只對應一個流程實例。也就是說各個流程實例的流程變量是不相互影響的。流程實例結束完成以後流程變量還保存在數據庫中(存放到流程變量的歷史表中)。
package com;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class DefinitionVaribles {
    /**
     * this.getClass().getResourceAsStream("diagrams/MyVaribles.bpmn");//從classpath根目錄下下載指定文件
     * this.getClass().getClassLoader().getResourceAsStream("diagrams/MyProcess.zip");//從classpath根目錄下下載指定文件
     * this.getClass().getResourceAsStream("MyVaribles.bpmn");//從當前包下下載指定文件
     */
    ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
    @Test
    /**部署流程*/
    public void deploy()throws Exception{
    InputStream in= this.getClass().getResourceAsStream("/diagrams/MyVaribles.bpmn");
    Deployment deployment=processEngine.getRepositoryService()
                            .createDeployment()
                            .name("請假流程")
                            .addInputStream("Myvaribles.bpmn",in)
                            .addInputStream("Myvaribles.png", in)
                            .deploy();
    System.out.println("流程定義Id:"+deployment.getId()+"   "+"流程名稱:"+deployment.getName());    
    }
    @Test
    /**開啓流程*/
    public void startProcess()throws Exception{
        String processInstanceKey="myVaribles";
        ProcessInstance pi=processEngine.getRuntimeService().startProcessInstanceByKey(processInstanceKey);
        System.out.println("流程實例ID:"+pi.getId());
    }
    @Test
    /**設置流程變量*/
    public void setVaribles()throws Exception{
        //獲取執行taskService
        TaskService taskService=processEngine.getTaskService();
        //指定辦理人
        String assignee="謝永學";
        //指定實例ID
        String processInstanceId="2201";
        Task task=  taskService.createTaskQuery()
                    .processInstanceId(processInstanceId)
                    .taskAssignee(assignee)
                    .singleResult();
        taskService.setVariable(task.getId(), "請假人", "謝永學");
        taskService.setVariableLocal(task.getId(), "請假天數", 10);
        taskService.setVariable(task.getId(), "請假日期", new Date());
        Person p=new Person();
        p.setId(12345);
        p.setName("謝永遠");
        taskService.setVariable(task.getId(), "人員信息", p);
        System.out.println("設置變量完成");
    }
    @Test
    /**得到參數*/
    public void getVaribles()throws Exception{
        //獲取執行taskService
        TaskService taskService=processEngine.getTaskService();
        //指定辦理人
        String assignee="謝永學";
        //指定實例ID
        String processInstanceId="2201";
        Task task=taskService.createTaskQuery()
                    .processInstanceId(processInstanceId)
                    .taskAssignee(assignee)
                    .singleResult();
        String StringValue=(String)taskService.getVariable(task.getId(),"請假人");
        Integer IntValue=(Integer)taskService.getVariableLocal(task.getId(),"請假天數");
        Date dateValue=(Date)taskService.getVariable(task.getId(), "請假日期");
        System.out.println("StringValue:"+StringValue+"===IntVlue:"+IntValue+"===dateValue"+dateValue);
        Person p=(Person)taskService.getVariable(task.getId(), "人員信息");
        System.out.println("Id:"+p.getId()+",name:"+p.getName());
    }
    /**
     * 查詢歷史變量
     * @throws Exception
     */
    @Test
    public void queryHistoryVaribles()throws Exception{
        String assignee="謝永學";
        String processInstanceId="2201";
        List<HistoricVariableInstance> list=processEngine.getHistoryService()
                                    .createHistoricVariableInstanceQuery()
                                    .variableName("請假天數")
                                    .list();
        if(list!=null){
            for (HistoricVariableInstance historicVariableInstance : list) {
                System.out.println(historicVariableInstance.getTaskId()+"name:"+historicVariableInstance.getVariableName());
            }
        }
    }
    /**
     * 歷史流程實例查看,查找按照某個規則一共執行了多少次流程
     * @throws Exception
     */
    @Test
    public void queryHistoricProcessInstance()throws Exception{
    List<HistoricProcessInstance> hpiList=processEngine.getHistoryService()
        //獲取歷史流程實例,返回歷史流程實例的集合
        .createHistoricProcessInstanceQuery()//創建流程實例查詢
        .processDefinitionKey("myVaribles")//按照流程定義的Key查詢
        .orderByProcessInstanceStartTime()//按照流程開始時間降序排列
        .asc()
        .list();
    for (HistoricProcessInstance hpi : hpiList) {
        System.out.println("pid:"+hpi.getId());
        System.out.println("pdid:"+hpi.getProcessDefinitionId());
        System.out.println("startTime:"+hpi.getStartTime());
        System.out.println("endTime:"+hpi.getEndTime());
        System.out.println("duration:"+hpi.getDurationInMillis());
    }
    }
    /**
     * 歷史活動查看(某一次流程的執行經歷了多少步)
     * @throws Exception
     */
    @Test
    public void queryHistoricActivityInstance()throws Exception{
        String processInstance="2201";
        List<HistoricActivityInstance> haiList= processEngine.getHistoryService()
                .createHistoricActivityInstanceQuery()
                .processInstanceId(processInstance)
                .orderByHistoricActivityInstanceStartTime()
                .asc()
                .list();
        for (HistoricActivityInstance hai : haiList) {
            System.out.println("activiId:"+hai.getActivityId()+",");
            System.out.println("name:"+hai.getActivityName()+",");
            System.out.println("type:"+hai.getProcessInstanceId()+",");
            System.out.println("assignee:"+hai.getAssignee()+",");
            System.out.println("startTime:"+hai.getStartTime()+",");
            System.out.println("endTime:"+hai.getEndTime()+",");
            System.out.println("duration:"+hai.getDurationInMillis());

        }
    }
    /**
     * 歷史任務查看(某一次流程的執行經歷了多少次任務節點)
     * @throws Exception
     */
    @Test
    public void queryHistoricTaskInstance()throws Exception{
         String processInstance="2201";
         List<HistoricTaskInstance> htiList=    processEngine.getHistoryService()
        .createHistoricTaskInstanceQuery()
        .processInstanceId(processInstance)
        .orderByHistoricTaskInstanceEndTime()
        .asc()
        .list();
         for(HistoricTaskInstance hti : htiList) {
            System.out.println("taskId:"+hti.getId());
            System.out.println("name:"+hti.getName()+",");
            System.out.println("pdId:"+hti.getProcessDefinitionId());
            System.out.println("pId:"+hti.getProcessInstanceId());
            System.out.println("assignee:"+hti.getAssignee());
            System.out.println("startTime:"+hti.getStartTime());
            System.out.println("endTime:"+hti.getEndTime());
            System.out.println("duration:"+hti.getDurationInMillis());
        }
    }
}

Javabean類型設置流程變量,需要這個javabean實現了Serializable接口
package com;
import java.io.Serializable;
public class Person implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章