activiti中一个任务节点able有a,b两条出线,a出线条件为message=1,b出线条件为message=2,a出线连接任务节点aaa,b连接排他网关,排他网关有两条出现,d1,d2,d1连接任务节点e1,条件为pre=1,d2连接任务节点e2,条件为pre=2,此时运行时任务Id为taskId,由任务节点able执行,请问如何使用taskService.complete()进入任务节点e2
时间: 2024-02-29 08:51:58 浏览: 16
您可以通过以下步骤使用`taskService.complete()`进入任务节点e2:
1. 先查询当前运行时的任务对象,使用`taskService.createTaskQuery().taskId(taskId).singleResult()`方法查询。假设查询出的任务对象为`Task task`。
2. 判断当前任务节点的出线条件,如果满足条件2(message=2),则需要选择b出线,即执行`taskService.complete(task.getId(), Collections.singletonMap("message", "2"))`方法。其中,第二个参数是一个Map类型的变量,用于设置出线条件参数。
3. 接着,排他网关会根据出线条件2选择d2出线,进入任务节点e2。
完整的代码示例如下:
```java
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task != null) {
if ("2".equals(message)) { // 判断出线条件为message=2
taskService.complete(task.getId(), Collections.singletonMap("message", "2")); // 执行任务完成操作,设置出线条件参数
}
}
```
相关问题
在activiti中一个任务节点有两个出线,一个出线A不设置条件,一个出线B设置条件,现在流程变量符合出线B,次数taskService.complete会走出线A么
根据 Activiti 的默认行为,当一个任务节点有多个出线时,如果其中一个出线设置了条件,那么只有符合条件的出线才会被执行。因此,在你提到的情况下,如果流程变量符合出线B的条件,那么只会走出线B,不会走出线A。如果你希望同时走出线A和出线B,可以考虑使用网关来实现这个流程行为。例如,可以在任务节点后面添加一个并行网关,并将出线A和出线B连接到该网关上,这样当任务节点完成后,同时会走出线A和出线B,从而满足你的需求。
在activiti中一个任务节点有两个出线,一个出线A不设置条件,一个出线B设置条件,现在流程变量与出线B条件匹配,taskService.complete会走出线A么
是的,如果任务节点存在两个出线,其中一个出线设置了条件,而另一个出线没有设置条件,那么即使流程变量匹配了出线B的条件,也可能会走出线A。这是因为Activiti会优先选择没有条件的出线,如果没有任何一个出线满足条件,才会抛出异常。因此,如果想要保证流程一定会按照条件走出线B,应该将出线A的条件设置为不满足条件,或者将其删除。