流程变量的设置和获取

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。

一、设置流程变量
流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。

1.基本类型

    /**设置流程变量*/
    @Test
    public void setProcessVariables(){
        String processInstanceId = "1301";//流程实例ID
        String assignee = "张三";//任务办理人
        TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量
        
        //查询当前办理人的任务ID
        Task task = taskService.createTaskQuery()
                .processInstanceId(processInstanceId)//使用流程实例ID
                .taskAssignee(assignee)//任务办理人
                .singleResult();
        
        //设置流程变量【基本类型】
        taskService.setVariable(task.getId(), "请假人", assignee);
        taskService.setVariableLocal(task.getId(), "请假天数",3);
        taskService.setVariable(task.getId(), "请假日期", new Date());
        
        
    }

流程变量的设置和获取_第1张图片
2.JavaBean类型

首先,定义JavaBean类。

package cn.gome.d_processVariables;
 
public class Person implements java.io.Serializable{
    
    private static final long serialVersionUID = 8379071759772449529L;
    
    private Integer id;
    private String name;
    private String education;
    
    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;
    }
    
}

然后,通过JavaBean设置流程变量。这里要注意的是,Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生编号,否则抛出异常。

  /**设置流程变量?去哪个表里查*/
    @Test
    public void setProcessVariables(){
        String processInstanceId = "1301";//流程实例ID
        String assignee = "张三";//任务办理人
        TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量
        
        //查询当前办理人的任务ID
        Task task = taskService.createTaskQuery()
                .processInstanceId(processInstanceId)//使用流程实例ID
                .taskAssignee(assignee)//任务办理人
                .singleResult();
        
        //设置流程变量【javabean类型】
        Person p = new Person();
        p.setId(1);
        p.setName("周江霄");
        taskService.setVariable(task.getId(), "人员信息", p);
        System.out.println("流程变量设置成功~~");
    }

  数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。

流程变量的设置和获取_第2张图片
二、获取流程变量
1.基本类型

/**获取流程变量*/
@Test
public void getProcessVariables(){
    String processInstanceId = "1301";//流程实例ID
    String assignee = "张三";//任务办理人
    TaskService taskService = processEngine.getTaskService();
    //获取当前办理人的任务ID
    Task task = taskService.createTaskQuery()
            .processInstanceId(processInstanceId)
            .taskAssignee(assignee)
            .singleResult();
    
    //获取流程变量【基本类型】
    String person = (String) taskService.getVariable(task.getId(), "请假人");
    Integer day = (Integer) taskService.getVariableLocal(task.getId(), "请假天数");
    Date date = (Date) taskService.getVariable(task.getId(), "请假日期");
    System.out.println(person+"  "+day+"   "+date);
    
}
       2.JavaBean类型    
/**获取流程变量*/
@Test
public void getProcessVariables(){
    String processInstanceId = "1301";//流程实例ID
    String assignee = "张三";//任务办理人
    TaskService taskService = processEngine.getTaskService();
    //获取当前办理人的任务ID
    Task task = taskService.createTaskQuery()
            .processInstanceId(processInstanceId)
            .taskAssignee(assignee)
            .singleResult();
    
    //获取流程变量【javaBean类型】
    Person p = (Person) taskService.getVariable(task.getId(), "人员信息");
    System.out.println(p.getId()+"  "+p.getName());
    System.out.println("获取成功~~");
}
 三、查询历史流程变量    
/**查询历史的流程变量*/
@Test
public void getHistoryProcessVariables(){
    List<HistoricVariableInstance> list = processEngine.getHistoryService()
            .createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询
            .variableName("请假天数")
            .list();
    
    if(list != null && list.size()>0){
        for(HistoricVariableInstance hiv : list){
            System.out.println(hiv.getTaskId()+"  "+hiv.getVariableName()+"        "+hiv.getValue()+"        "+hiv.getVariableTypeName());
        }
    }                
}

流程变量的设置和获取_第3张图片

你可能感兴趣的:(activiti)