在activiti中一个任务节点有两个出线,一个出线A不设置条件,一个出线B设置条件,现在流程变量符合出线B,次数taskService.complete会走出线A么
时间: 2024-01-24 16:18:26 浏览: 77
根据 Activiti 的默认行为,当一个任务节点有多个出线时,如果其中一个出线设置了条件,那么只有符合条件的出线才会被执行。因此,在你提到的情况下,如果流程变量符合出线B的条件,那么只会走出线B,不会走出线A。如果你希望同时走出线A和出线B,可以考虑使用网关来实现这个流程行为。例如,可以在任务节点后面添加一个并行网关,并将出线A和出线B连接到该网关上,这样当任务节点完成后,同时会走出线A和出线B,从而满足你的需求。
相关问题
在activiti中一个任务节点有两个出线,一个出线A不设置条件,一个出线B设置条件,现在流程变量与出线B条件匹配,taskService.complete会走出线A么
是的,如果任务节点存在两个出线,其中一个出线设置了条件,而另一个出线没有设置条件,那么即使流程变量匹配了出线B的条件,也可能会走出线A。这是因为Activiti会优先选择没有条件的出线,如果没有任何一个出线满足条件,才会抛出异常。因此,如果想要保证流程一定会按照条件走出线B,应该将出线A的条件设置为不满足条件,或者将其删除。
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()从able任务节点进入任务节点e2
根据任务节点able的出线条件,需要选择b出线,进入排他网关,再根据排他网关的出线条件,选择d2出线,进入任务节点e2。因此,您可以通过以下代码使用`taskService.complete()`从able任务节点进入任务节点e2:
```java
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task != null) {
Map<String, Object> variables = new HashMap<>();
variables.put("message", "2"); // 设置出线条件参数
taskService.complete(task.getId(), variables); // 执行任务完成操作
}
```
在上述代码中,我们首先查询了运行时的任务对象,然后根据出线条件设置了变量`message`的值为2,接着执行`taskService.complete()`方法完成任务。由于选择了任务节点e2,因此流程会继续在任务节点e2中执行。
阅读全文