Flowable 节点 驳回/退回 后,节点变量的处理

本文中提到的flowable版本为 6.4.0。

最近新增加一个需求:流程需要有驳回操作。需要驳回的节点是会签节点,普通串行节点的情况也类似,本文以串行节点说明问题。

驳回代码参考如下(该内容很多文章都有介绍,不过多描述):

runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(proInstanceId)
        .moveActivityIdsToSingleActivityId(curTaskKeys, targetTaskKey)
        .changeState();

以上代码已经可以满足当前节点的驳回操作。但是,经过测试,发现一个问题,项目代码不方便贴,问题描述如下:

该流程共有4个节点,串行,该4个节点的流程变量分别是 node1,node2,node3,node4。

发起人指定 node1 节点的 userID 为 1001,
node1 指定 node2 节点 userID 为 1002,
node2 指定 node3 节点 userID 为 1003,
node3 暂未指定 node4 节点。

当流程到 node3 时,1003 选择了驳回,此时查看act_ru_task表,流程确实已经回退到node2节点。

用 1002 账号登录,重新分配 node3 节点 userID 为 1005.

重点,重点,重点!!!

重新查看 act_ru_task,发现当前节点是 node3,这个没问题,但是有两条数据,分别是 1003 和 1005。

这就尴尬了,上一次驳回的操作不彻底,变量信息实际上还是存在的。

于是想着在 node3 节点驳回后,把 node3 变量信息给清空,修改如下:

runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(proInstanceId)
        .moveActivityIdsToSingleActivityId(curTaskKeys, targetTaskKey)
        .changeState();
        
Map<String,Object> params = new HashedMap();
params.put("node3",null);     
taskService.setVariables(task.getId(),params);   

以上代码执行报错: Active execution could not be found with activity id node3…

仔细看了一下该 api: taskService.setVariables

void setVariables(String var1, Map<String, ? extends Object> var2);

这样问题就清晰了,有可能是null出问题了,于是做了如下测试:
在这里插入图片描述
至此,问题已经定位,修改以上代码中 null 为 “” ,即可,如下:

runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(proInstanceId)
        .moveActivityIdsToSingleActivityId(curTaskKeys, targetTaskKey)
        .changeState();
        
Map<String,Object> params = new HashedMap();
params.put("node3","");     
taskService.setVariables(task.getId(),params);   
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值