in core/src/main/java/com/alibaba/smart/framework/engine/bpmn/behavior/gateway/helper/CommonGatewayHelper.java [302:349]
public static List<PvmTransition> calcMatchedTransitions(PvmActivity pvmActivity, ExecutionContext context) {
String processDefinitionActivityId = pvmActivity.getModel().getId();
Map<String, PvmTransition> outcomeTransitions = pvmActivity.getOutcomeTransitions();
List<PvmTransition> matchedTransitions = new ArrayList<PvmTransition>(outcomeTransitions.size());
for (Map.Entry<String, PvmTransition> transitionEntry : outcomeTransitions.entrySet()) {
PvmTransition pendingTransition = transitionEntry.getValue();
boolean matched = pendingTransition.match(context);
if (matched) {
matchedTransitions.add(pendingTransition);
}
}
//如果都没匹配到,就使用DefaultSequenceFlow
if(0 == matchedTransitions.size()){
Map<String, String> properties = pvmActivity.getModel().getProperties();
if(MapUtil.isNotEmpty(properties)){
String defaultSeqFLowId = properties.get(DEFAULT);
if(StringUtil.isNotEmpty(defaultSeqFLowId)){
PvmTransition pvmTransition = outcomeTransitions.get(defaultSeqFLowId);
if (null != pvmTransition){
matchedTransitions.add(pvmTransition);
}else {
throw new EngineException("default sequence flow is assigned, but not found the pvmTransition ,check sequenceFlow id: "+ defaultSeqFLowId);
}
}else{
// do nothing
}
}else{
throw new EngineException("properties can not be empty, check activity id :"+ processDefinitionActivityId);
}
}
if(0 == matchedTransitions.size()){
throw new EngineException("No Transitions matched,please check input request and condition expression,activity id :"+ processDefinitionActivityId);
}
return matchedTransitions;
}