基于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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章