Flowable中exclusive gateway 'exclusivegateway8'无可用outgoing sequence flow问题求助
isLogged = false
reduceLogLevel = false
detailMessage = "No outgoing sequence flow of the exclusive gateway 'exclusivegateway8' could be selected for continuing the process"
cause = {FlowableException@16042} "org.flowable.engine.common.api.FlowableException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway8' could be selected for continuing the process"
嘿,这个问题是Flowable新手碰到排他网关时最常见的坑之一,我来给你掰扯清楚:
错误本质
排他网关(Exclusive Gateway)的核心逻辑是只会走一条满足条件的分支,如果所有分支的条件都不匹配,同时又没设置默认分支的话,流程就彻底“卡壳”了——它不知道该往哪走,自然就抛出这个异常。
常见原因&解决办法
所有分支条件都没命中
先检查你的流程变量和网关分支的${}表达式是否匹配:比如你分支条件写的是${status == 'APPROVED'}和${status == 'REJECTED'},但实际流程中status的值是PENDING,那两个条件都触发不了。解决办法要么补全变量的可能取值,要么调整表达式覆盖所有场景。没配置默认兜底分支
Flowable允许给排他网关指定一个默认分支(不需要写条件),当其他分支都不满足时就走这条。操作起来也简单:在BPMN编辑器里给目标序列流勾选“Default”选项,或者在XML里给对应sequenceFlow标签加上default="true"属性就行。流程变量没正确传递
确认网关执行时,需要的变量已经正确设置到流程实例中。比如你用runtimeService.setVariable()或者启动流程时传入的变量,有没有写错变量名?注意哦,Flowable里变量名是区分大小写的,别因为拼写小问题掉坑里。
调试小技巧
可以在网关执行前,用代码打印出当前流程的所有变量,快速排查变量值和条件表达式是否匹配:
Map<String, Object> variables = runtimeService.getVariables(processInstanceId); System.out.println("Current process variables: " + variables);
内容的提问来源于stack exchange,提问作者Dhiral Kaniya

