private ActivityParameterEvaluator GetParameterEvaluator( Activity activity, ActivityParameter param, string paramValue) { if (paramValue.StartsWith("@")) { paramValue = paramValue.Substring(1); if (string.IsNullOrEmpty(paramValue)) throw new WorkflowSchemeParserException(string.Format( "Некорректное значение параметра {0}: {1}", param.Name, paramValue), this); if (paramValue.StartsWith("@")) { paramValue = paramValue.Substring(1); if (string.IsNullOrEmpty(paramValue)) throw new WorkflowSchemeParserException(string.Format( "Некорректное значение параметра {0}: {1}", param.Name, paramValue), this); try { return WorkflowBuiltinFunctions.GetEvaluatorForBuiltinFunction(paramValue); } catch (Exception ex) { throw new WorkflowSchemeParserException( "Ошибка получения метода для получения значения параметра", ex, this); } } int dotIndex = paramValue.IndexOf(PREFIX_DELIMITER); if (dotIndex > 0) { var strArr = paramValue.Split(PREFIX_DELIMITER); var prefix = strArr[0]; var propName = strArr[1]; if (string.IsNullOrEmpty(propName)) throw new WorkflowSchemeParserException(string.Format( "Некорректное значение параметра {0}: {1}", param.Name, paramValue), this); if (prefix == PREFIX_ROOT) prefix = Scheme.RootActivityName; var propOwner = GetReferencedActivity(prefix); return GetParameterEvaluatorForPropertyReference(propName, propOwner); } if (activity.Parent == null) throw new WorkflowSchemeParserException(string.Format( "Для значения-ссылки @{0} параметра {1} не определено родительское действие", paramValue, param.Name), this); return GetParameterEvaluatorForPropertyReference(paramValue, activity.Parent); } if (paramValue.StartsWith("[") && paramValue.EndsWith("]")) { paramValue = paramValue.Substring(1, paramValue.Length - 2); var array = paramValue.Split(','); var evaluatorArray = new ActivityParameterEvaluator[array.Length]; for (int i = 0; i < array.Length; i++) evaluatorArray[i] = GetParameterEvaluator(activity, param, array[i]); return new ActivityParameterEvaluator(evaluatorArray); } if (paramValue.StartsWith(@"\@")) paramValue = '@' + paramValue.Substring(2); return new ActivityParameterEvaluator(paramValue); }
private ActivityParameterEvaluator EvaluateParameterEvaluator(ActivityParameterEvaluator evaluator) { if (evaluator.ValueType == ActivityParameterValueType.Array) { for (int i = 0; i < evaluator.EvaluatorArray.Length; i++) evaluator.EvaluatorArray[i] = EvaluateParameterEvaluator(evaluator.EvaluatorArray[i]); return evaluator; } var unevalEvaluator = evaluator as UnevaluatedActivityParameterEvaluator; if (unevalEvaluator == null) return evaluator; return CreateActivityParameterEvaluator( unevalEvaluator.PropertyName, EvaluateActivity( unevalEvaluator.PropertyOwner, string.Format("Вычисление действия, содержащего св-во {0}", unevalEvaluator.PropertyName))); }