activiti的taskService.complete方法

官方提供了三种不同的方法
这里写图片描述
简单讲一下区别
1.complete(String taskId)
参数:taskId
作用:直接完成此次正在运行的任务,对用ac_ru_task表
2.complete(String taskId, Map<String,Object> variables)
参数:taskId(对应act_ru_task中的id_),variables(下一次任务所需要的参数)
作用:完成这一次任务,并且下一步任务需要流程变量的
这里写图片描述
上图所示则为variables所要填充的参数
3.complete(String taskId, Map<String,Object> variables, boolean localScope)
参数:taskId(对应act_ru_task中的id_),variables(下一次任务所需要的参数),localScope(存储范围:本任务)
作用:同第二个,加上存储范围的设置
localScope官方解释:If true, the provided variables will be stored task-local, instead of process instance wide (which is the default for complete(String, Map)).(如果为true,通过的变量将会随着本任务存亡(本任务结束,变量删除,称之为任务变量(局部)),默认为false,即为complete(String,Map) 那么这时候的变量为流程变量(全局))
关于流程变量和任务(exception)变量区别,可查看
流程变量与任务变量区别
提示:
那么就有个疑问了,如果在act_ru_variable表中存在相同的name,不同的值,一个为流程变量(全局),一个为任务变量(局部),那么在complete的时候会用哪个的????
经本人初步测试,在complete的时候会先用本任务(exception)的变量,如果没有才会用流程变量(全局)。但是在源码中并未找到!!!

  • 27
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Activiti中,使用taskService.complete(taskId, variables)方法完成任务时,variables参数是一个Map类型的变量,用于设置任务完成时的变量值。在连续出线的条件参数方面,可以在variables参数中设置,然后在后续的任务节点中通过表达式来判断。 例如,在你的问题中,如果task1有两条出线a和b,它们的条件表达式分别为${param1 == 'A'}和${param2 == 'B'}。那么在使用taskService.complete(task1.getId(), variables)完成task1时,可以将连续出线的条件参数param1和param2设置到variables参数中,例如: ```java Map<String, Object> variables = new HashMap<>(); variables.put("param1", "A"); variables.put("param2", "B"); taskService.complete(task1.getId(), variables); ``` 然后,在后续的任务节点中,可以通过表达式来判断param1和param2的值,从而决定选择哪条出线。例如,在task2中,可以使用以下表达式来判断: ```xml <sequenceFlow id="flowToP1" name="flowToP1" sourceRef="task2" targetRef="p1"> <conditionExpression xsi:type="tFormalExpression"> <![CDATA[${param1 == 'A'}]]> </conditionExpression> </sequenceFlow> ``` 在排他网关中,也可以使用类似的方式判断连续出线的条件参数。例如,在p1的条件表达式中,可以使用以下表达式来判断: ```xml <exclusiveGateway id="p1" name="p1"> <conditionExpression xsi:type="tFormalExpression"> <![CDATA[${param1 == 'C1'}]]> </conditionExpression> <outgoing>flowToD1</outgoing> <outgoing>flowToD2</outgoing> </exclusiveGateway> ``` 总之,通过在variables参数中设置连续出线的条件参数,并在后续任务节点的表达式中进行判断,就可以实现连续出线的条件判断了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值