工作流学习③之流程变量的设置和获取

- 变量的设置和获取
在工作流的开发中,针对某一流程任务设置变量是常有的。例如再请假流程中,从流程的发起(即申请),经过各级审批,到最后流程结束;在流程申请时,申请人的申请信息,在申请审批时,审批人的意见等,都可以作为变量设置在流程中。

  1. 流程变量的设置
    给正在执行的任务设置变量,首先需要获取正在执行的任务的ID(通过流程实例id和正在执行的任务相关的Service获取 – 在第二篇文章中有介绍),获取与任务相关的Service(getTaskService()),距离如下:
    1)
TaskService taskService = processEngine.getTaskService();
        /**通过正在执行的任务ID设置流程变量,基本数据类型*/
        String taskId = "5204";
        taskService.setVariableLocal(taskId,"请假理由","我要找女朋友,不知道她愿意不");  //该方法会自动绑定任务Id,保存到流程变量表中
        taskService.setVariable(taskId,"请假时间",new Date());
        taskService.setVariableLocal(taskId,"请假天数",7);

2)通过封装的java类设置变量(javabean)

 /**设置流程变量,使用javabean类型*/
        Person person = new Person();
        person.setCode("person");
        person.setName("测试");
        taskService.setVariable(taskId,"人员信息",person);

Person:

import java.io.Serializable;

public class Person implements Serializable {

    /***
     * 版本控制(固定) -- 新增属性不影响该类的正常使用
     */
    private static final long serialVersionUID = -6968423903037762467L;  //序列化

    private String code;  //人员编号
    private String name;  //人员姓名

    //新增属性,测试是否影响序列化
    private String sex;

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

序列化的作用:
* 当一个Javabean(实现序列化)放置到流程变量中,则要求Javabean的属性不能再次修改,
* 如果发生变化,在进行变量获取的时候,会抛出异常
* 解决方案:
* 在Person对象中添加:
* 版本控制–同时实现序列化

  1. 流程变量的获取
    获取设置的流程变量–通过设置变量时填写变量名称,举例如下:
 /**根据任务id获取流程变量*/
       TaskService taskService = processEngine.getTaskService();

       String taskId = "5204";
       /**获取流程变量,基础数据类型*/
       String str1 = (String) taskService.getVariable(taskId,"请假理由");
       Integer inte = (Integer) taskService.getVariable(taskId,"请假天数");
       Date date = (Date) taskService.getVariable(taskId,"请假时间");

       System.out.println("请假理由:"+str1);
       System.out.println("请假天数:"+inte);
       System.out.println("请假时间:"+date);

通过javabean设置的流程变量获取:

Person person = (Person) taskService.getVariable(taskId,"人员信息");
       System.out.println("人员编号:"+person.getCode());
       System.out.println("人员姓名:"+person.getName());

2.获取历史的流程变量信息:

List<HistoricVariableInstance> list = processEngine.getHistoryService()
                .createHistoricVariableInstanceQuery()  //创建一个历史的流程变量查询对象
                .variableName("请假天数")//根据流程变量名称查询数据
                .list();
        if(list != null && list.size()>0){
            for (HistoricVariableInstance hvi : list){
                System.out.println(hvi.getId()+" "+hvi.getTaskId()+" "+hvi.getVariableName()+" "+hvi.getVariableTypeName()+" "+hvi.getValue());
                System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5");
            }
        }

附加信息:
其他设置、获取变量的方式:
1.通过RuntimeService设置变量:

runtimeService.setVariable(executionId,variableName,value);//表示使用执行对象ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)
runtimeService.setVariables(executionId,variables);//表示使用执行对象ID,和Map集合设置流程变量,map集合的Key就是流程变量的名称,map集合的value就是流程变量的值(一次可以设置多个值)
runtimeService.startProcessInstanceByKey(processDefinintionKey,variables);//启动流程实例的同时,可以设置流程变量,用Map集合

获取流程变量:

runtimeService.getVariable(executionId,variableName)//使用执行对象ID和流程变量的名称,获取流程变量的值
runtimeService.getVariables(executionId)//使用执行对象ID,获取所有的流程变量,将流程变量放置到Map集合中,map集合的key就是流程变量的名称,map集合的value就是流程变量的值
runtimeService.getVariables(executionId,variables)//使用执行对象ID,获取流程变量的值,通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值,值存放到map集合中

2.通过getTaskService设置流程变量:

taskService.setVariable(taskId,variableName,value);//表示使用任务ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)
taskService.setVariables(taskId,variables);//表示使用任务ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,map集合的value就是流程变量的值
taskService.complete(taskId,variables);//完成任务的同时,设置流程变量,用Map集合

获取流程变量:

taskService.getVariable(taskId,variable)//使用任务ID和流程变量的名称,获取流程变量的值
taskService.getVariables(executionIs);//使用任务ID,获取所有的流程变量,将流程变量放置到Map集合中,map集合的key就是流程变量的名称,map集合的value就是流程变量的值
taskService.getVariables(executionId,variables)//使用执任务ID,获取流程变量的值,通过设置流程变量的名称存放到集合中,获取指定流程变量名称的流程变量的值,值存放到map集合中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值