// 用于并行、串行会签的处理.
//在离开节点的时候判断多实例
if (this instanceof Activity && ((Activity) this).getLoopCharacteristics() != null) {
Activity activity = (Activity) this;
LoopCharacteristics loopCharacteristics = activity.getLoopCharacteristics();
// 如果是并行多实例
if (loopCharacteristics instanceof MultiInstanceLoopCharacteristics) {
// 并行多实例处理
//MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = (MultiInstanceLoopCharacteristics) loopCharacteristics;
TokenEntity token=executionContext.getToken();
LOG.debug("节点: {}({}) 含有并行多实例,将进入多实例'离开'阶段处理,令牌号: {}({}).",activity.getName(),activity.getId(),token.getName(),token.getId());
// 输出数据集
String loopDataOutputCollectionExpressionValue = getLoopDataOutputCollectionExpression();
// 多实例输入数据集
String loopDataInputCollectionExpressionValue = getLoopDataInputCollectionExpression();
// 多实例输入项
String inputDataItemExpressionValue = getInputDataItemExpression();
// 多实例输出项
String outputDataItemExpressionValue = getOutputDataItemExpression();
//完成条件
String completionConditionExpressionValue=getCompletionConditionExpression();
//打印日志信息
LOG.debug("\n多实例配置信息: \n 【输入数据集】: \n{}",loopDataInputCollectionExpressionValue);
LOG.debug("\n【输入项编号】: \n{}",inputDataItemExpressionValue);
LOG.debug("\n【输出项编号】: \n{}",outputDataItemExpressionValue);
LOG.debug("\n【输出数据集】: \n{}",outputDataItemExpressionValue);
LOG.debug("\n【完成条件】: \n{}",completionConditionExpressionValue);
if (loopDataOutputCollectionExpressionValue != null && !loopDataOutputCollectionExpressionValue.equals("")) {
Object valueObj = ExpressionMgmt.execute(loopDataOutputCollectionExpressionValue, executionContext);
if (valueObj != null) {
if (valueObj instanceof Collection) {
String expressionValueTemp = getOutputDataItemExpression();
@SuppressWarnings("rawtypes")
Collection collection = (Collection) valueObj;
collection.add(ExpressionMgmt.execute(expressionValueTemp, executionContext));
} else {
}
} else {
}
}
if (completionConditionExpressionValue == null || completionConditionExpressionValue.equals("")) {
LOG.error("节点: "+activity.getName()+"("+activity.getId()+") 多实例完成条件为空.");
throw new FixFlowExpressionException(ExceptionCode.EXPRESSIONEXCEPTION_CONDITIONEXPRESSIONEMPTY,this.getId(),this.getName(),"");
} else {
boolean isCompletion=false;
try {
isCompletion=StringUtil.getBoolean(ExpressionMgmt.execute(completionConditionExpressionValue, executionContext));
} catch (Exception e) {
LOG.error("节点: "+activity.getName()+"("+activity.getId()+") 多实例完成条件计算出错.",e);
throw new FixFlowExpressionException(ExceptionCode.EXPRESSIONEXCEPTION_CONDITIONEXPRESSIONERROR,this.getId(),this.getName(),"");
}
if (isCompletion){
LOG.debug("节点: {}({}) 多实例完成条件验证通过,令牌号: {}({}).",activity.getName(),activity.getId(),token.getName(),token.getId());
super.leave(executionContext);
}else{
//不做处理
LOG.debug("节点: {}({}) 多实例完成条件验证不通过,令牌将继续停留在当前借点,令牌号: {}({}).",activity.getName(),activity.getId(),token.getName(),token.getId());
}
}
} else {
//这里还没实现。。。。囧