} else {
LOG.error("多实例输出集合不是一个集合");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataOutputCollectionExpressionValue);
}
}
}
//开始触发多实例循环
if (loopDataInputCollectionExpressionValue != null && !loopDataInputCollectionExpressionValue.equals("")) {
//生成一个唯一组号,用户多实例任务组的标识
String groupID = GuidUtil.CreateGuid();
//给流程上下文设置唯一组号,好在多实例每次进入节点的时候将唯一组号传递给每个任务创建方法。
executionContext.setGroupID(groupID);
LOG.debug("为多实例生成唯一组号: '{}'", groupID);
//执行多实例 输入数据集 解释
Object valueObj =null;
try {
valueObj = ExpressionMgmt.execute(loopDataInputCollectionExpressionValue, executionContext);
} catch (Exception e) {
LOG.error("多实例输入数据集解释出错,错误信息: "+e.getMessage(), e);
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataInputCollectionExpressionValue,e);
}
if (valueObj != null) {
//如果会签输入数据集是一个集合
if (valueObj instanceof Collection) {
Collection<?> valueObjCollection = (Collection<?>) valueObj;
if (valueObjCollection.size() == 0) {
LOG.error("多实例输入集合的个数为 0,请重新检查多实例输入集合配置.");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAINPUTCOLLECTIONEMPTY,this.getId(),this.getName(),loopDataInputCollectionExpressionValue);
}
//定义计数器
int i=1;
//循环执行 将令牌多次放入节点
for (Object object : valueObjCollection) {
LOG.debug("多实例循环第 '{}' 次开始执行,循环值为: '{}'",i,StringUtil.getString(object));
try {
//将循环的每个变量赋值给输入数据项
ExpressionMgmt.setVariable(inputDataItemExpressionValue, object, executionContext);
} catch (Exception e) {
LOG.error("多实例循环第 '"+i+"' 次执行出错,错误信息: "+e.getMessage(),e);
throw new FixFlowExpressionException(ExceptionCode.EXPRESSIONEXCEPTION_COLLECTIONININPUTDATAITEM,this.getId(),this.getName(),inputDataItemExpressionValue,e);
}
//执行令牌进入节点方法
this.tokenEnter(executionContext);
//循环计数器自加1
i=i+1;
}
//如果会签输入数据集不是集合
} else {
if (valueObj instanceof String[]) {
//如果是个字符串数组
String[] valueObjString = (String[]) valueObj;
//循环执行 将令牌多次放入节点
for (int i = 0; i < valueObjString.length; i++) {
LOG.debug("多实例循环第 '{}' 次开始执行,循环值为: '{}'",i,valueObjString[i]);
try {
//将循环的每个变量赋值给输入数据项
ExpressionMgmt.setVariable(inputDataItemExpressionValue, valueObjString[i],executionContext);
} catch (Exception e) {
LOG.error("多实例循环第 '"+i+"' 次执行出错,错误信息: "+e.getMessage(),e);
throw new FixFlowExpressionException(ExceptionCode.EXPRESSIONEXCEPTION_COLLECTIONININPUTDATAITEM,this.getId(),this.getName(),inputDataItemExpressionValue,e);
}
//执行令牌进入节点方法
this.tokenEnter(executionContext);
}
} else {
//如果是一个逗号分割的字符串
if (valueObj != null && !valueObj.equals("")) {
//将字符串转换为字符串数组
String[] valueObjString = valueObj.toString().split(",");
//如果大于0再处理
if (valueObjString.length > 0) {
for (int i = 0; i < valueObjString.length; i++) {
LOG.debug("多实例循环第 '{}' 次开始执行,循环值为: '{}'", i, valueObjString[i]);
try {
// 将循环的每个变量赋值给输入数据项
ExpressionMgmt.setVariable(inputDataItemExpressionValue, valueObjString[i],executionContext);
} catch (Exception e) {
LOG.error("多实例循环第 '" + i + "' 次执行出错,错误信息: " + e.getMessage(), e);
throw new FixFlowExpressionException(
ExceptionCode.EXPRESSIONEXCEPTION_COLLECTIONININPUTDATAITEM,
this.getId(), this.getName(), inputDataItemExpressionValue, e);
}
//执行节点进入
this.tokenEnter(executionContext);
}
} else {
//不认识的格式
LOG.error("多实例输出集合不是一个集合");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataOutputCollectionExpressionValue);
}
} else {
//不认识的格式
LOG.error("多实例输出集合不是一个集合");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataOutputCollectionExpressionValue);
}
}
}
} else {
LOG.error("多实例输出集合不是一个集合");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataOutputCollectionExpressionValue);
}
} else {
LOG.error("多实例输出集合不是一个集合");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSION_EXCEPTION_LOOPDATAOUTPUTCOLLECTION_COLLECTIONCHECK,this.getId(),this.getName(),loopDataOutputCollectionExpressionValue);
}
} else {
// 当发现不是多实例的情况下继续节点的执行,以后添加了串行多实例要在这里加判断