您的位置:首页 > 其它

Activiti进阶(四)——流程变量的设置和获取

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

     一、设置流程变量

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

     1.基本类型

[java] view
plain copy

/**设置流程变量*/  

@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());  

      

      

}  

     

     对应数据库表:act_ru_variable

     


             2.JavaBean类型

     首先,定义JavaBean类。

[java] view
plain copy

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接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。

[java] view
plain copy

/**设置流程变量?去哪个表里查*/  

@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中。



     数据库对应表:act_ge_bytearray

   


     二、获取流程变量

     1.基本类型

[java] view
plain copy

/**获取流程变量*/  

@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类型

[java] view
plain copy

/**获取流程变量*/  

@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("获取成功~~");  

}  

     三、查询历史流程变量

[java] view
plain copy

/**查询历史的流程变量*/  

@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());  

        }  

    }                 

}  

        对应数据库表:act_ru_execution

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐