已解决Activiti7.1.M6 默认传值特性缺陷

我先介绍一下全局流程变量和局部流程变量:

全局流程变量

设置全局流程变量,流程变量名称相同时,后一次的值替换前一次的值,而且可以看到ACT_HI_VARINST和ACT_RU_VARIABLE两张表中的TASK_ID全都为空。

局部流程变量

设置局部流程变量,针对当前任务设置流程变量,如果一个流程中存在2个任务,对每个任务都设置局部变量,变量的名称相同时,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个任务的流程变量值,而且可以看到TASK_ID的字段会存放任务ID的值,局部变量不会存入ACT_RU_VARIABLE表,且ACT_HI_VARINST表不会存入数据。

总结

1、全局变量:针对一个流程实例而言,多次重复,后者覆盖前者。
2、局部变量:针对一个流程实例中的一个节点任务而言,后者不覆盖前者。

下面我说一下这个Activiti7特性缺陷:

Activiti7在传值时,流程变量如果不设置全局或者局部的话,默认会具有局部流程变量特性,
说人话:
如果一个流程中,给的流程变量名是相同的,Activiti7会以第一次赋给这个变量的值为准,
后面再赋值给此变量然而并没有被覆盖(局部变量的特性),就离大普。

我是用HashMap传值,以及TaskService的complete方法传值的,具体函数代码如下:

@RequestMapping("/completeProcessZipPassValues")
@ResponseBody
public void completeProcessZipPassValues(){
//  通过任务id获取该任务
    Map<String,Object> variable1 = new HashMap<>();
//  设置对象来代替字符串传值亦可
    variable1.put("username","熊大");
//  这是任务Id,我直接写死了
    String taskId = "714a3b7c-36b3-11ee-8d27-380025923ccc";
//  在办理流程的方法可设置两个参数,
//  一个是根据什么来办理线程,
//  一个是要上传的变量值
    taskService.complete(taskId,variable1);
    System.out.println("===办理成功===");
}

就这样写的username默认用的是局部流程变量,所以只需要改一下设置的变量是全局,以及传值方式就行,具体代码如下:

@RequestMapping("/completeProcessZipPassValues")
@ResponseBody
public void completeProcessZipPassValues(){
   String taskId = "5e9b4719-36bc-11ee-80c6-380025923ccc";
   taskService.setVariable(taskId,"username","熊大");
   System.out.println("===办理成功===");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小航要快乐呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值