Activiti流程变量

1.流程变量的作用:

a.用来传递业务参数

b.指定连线来完成任务(同意或者拒绝)

c.动态指定任务的办理人

加载资源文件的方式:

        this.getClass().getClassLoader().getResourceAsStream("process/leavebpmn20.xml");  
                                                                        //从classpath下
        this.getClass().getResourceAsStream("/process/leavebpmn20.xml");//从classpath下
        this.getClass().getResourceAsStream("leavebpmn20.xml");         //从当前包下

2.设置流程变量

    /**
     * 设置流程变量
     */
    @Test
    public void test8(){
        RuntimeService runtimeService = processEngine.getRuntimeService();
        TaskService taskService = processEngine.getTaskService();
//        runtimeService.setVariable(String executionId, String variableName, Object value);
//        runtimeService.setVariables(String executionId, Map<String, ? extends Object> variables);
//        taskService.setVariable(String taskId, String variableName, Object value);
//        taskService.setVariables(String taskId, Map<String, ? extends Object> variables);
//        taskService.setVariable("35004","result","success");
        runtimeService.setVariable("35001","applyId","19941123");
        HashMap<String, Object> map = new HashMap<>();
        map.put("result","success");
        map.put("reason","soBeautiful");
        taskService.setVariables("35004",map);
//taskService.setVariablesLocal("52502",map);//变量与当前任务id绑定,完成此任务后流程变量消失
//        runtimeService.startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);
//        taskService.complete(String taskId, Map<String, Object> variables);
    }
  1. 流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段设置
  2. 基本类型设置流程变量,在taskService中使用任务ID,定义流程变量的名称,设置流程变量的值。
  3. Javabean类型设置流程变量,需要这个javabean实现了Serializable接口
  4. 设置流程变量的时候,向act_ru_variable这个表添加数据

3.获取流程变量(简略写 ,遵守怎么存怎么取的原则)

    /**
     * 获取流程变量
     */
    @Test
    public void test9(){
        RuntimeService runtimeService = processEngine.getRuntimeService();
        Object applyId = runtimeService.getVariable("35001", "applyId");
        System.out.println(applyId);
    }
    /**
     * 获取历史流程变量
     */
    @Test
    public void test10(){
        HistoryService historyService = processEngine.getHistoryService();
        List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().variableName("applyId").list();
        for (HistoricVariableInstance hi:list){
            System.out.println(hi.getId());
            System.out.println(hi.getTaskId());
            System.out.println(hi.getProcessInstanceId());
        }
    }
  1. 流程变量的获取针对流程实例(即1个流程),每个流程实例获取的流程变量时不同的
  2. 使用基本类型获取流程变量,在taskService中使用任务ID,流程变量的名称,获取流程变量的值。
  3. Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。解决方案,固定序列化ID

4.小结

在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。

对应的表:

act_ru_variable:正在执行的流程变量表

act_hi_varinst:流程变量历史表

setVariable和setVariableLocal的区别

setVariable:设置流程变量的时候,流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值

setVariableLocal:

1:设置流程变量的时候,针对当前活动的节点设置流程变量,如果一个流程中存在2个活动节点,对每个活动节点都设置流程变量,即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个流程变量值,而且可以看到TASK_ID的字段会存放任务ID的值

例如act_hi_varinst 表的数据:不同的任务节点,即使流程变量名称相同,存放的值也是不同的。

2:还有,使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量(因为正在执行的流程变量中没有这个数据),所有查询正在执行的任务时不能查询到我们需要的数据,此时需要查询历史的流程变量。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值