public async Task <RealWorkfolwActivityDescription> Execute(string activityConfiguration) { XElement configuration = null; try { configuration = XElement.Parse(activityConfiguration); } catch (Exception ex) { var fragment = new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationParseXMLError, DefaultFormatting = "工作流活动配置转换成XML时出错,活动配置:{0},错误原因:{1}", ReplaceParameters = new List <object>() { activityConfiguration, ex.Message } }; var exception = new UtilityException((int)Errors.RealWorkfolwActivityConfigurationParseXMLError, fragment); exception.Data[UtilityExceptionDataKeys.Catch] = true; throw exception; } RealWorkfolwActivityDescriptionDataForResult data = new RealWorkfolwActivityDescriptionDataForResult(); data.ResultParameters = new List <RealWorkfolwActivityParameter>(); var setElement = configuration.Element("set"); if (setElement == null) { var fragment = new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationParseXMLError, DefaultFormatting = "工作流活动配置转换成XML时出错,活动配置:{0},错误原因:{1}", ReplaceParameters = new List <object>() { activityConfiguration, new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationMissXMLElement, DefaultFormatting = "工作流活动配置缺少XML节点{0}", ReplaceParameters = new List <object>() { "set" } } } }; var exception = new UtilityException((int)Errors.RealWorkfolwActivityConfigurationParseXMLError, fragment); exception.Data[UtilityExceptionDataKeys.Catch] = true; throw exception; } var parameterElements = setElement.Elements("parameter"); foreach (var parameterElement in parameterElements) { var parameter = await _parameterConfigurationService.ResolveParameter(parameterElement.ToString()); data.ResultParameters.Add(parameter); } RealWorkfolwActivityDescription description = new RealWorkfolwActivityDescription() { Data = data }; return(description); }
private async Task <List <RealWorkfolwActivityDescriptionDataForConditionElseIf> > GetElseifs(string activityConfiguration, XElement configuration) { List <RealWorkfolwActivityDescriptionDataForConditionElseIf> elseifList = new List <RealWorkfolwActivityDescriptionDataForConditionElseIf>(); var elseifElements = configuration.Elements("elseif"); if (elseifElements != null && elseifElements.Count() > 0) { foreach (var elseifElementItem in elseifElements) { var parametersElement = elseifElementItem.Element("parameters"); if (parametersElement == null) { var fragment = new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationParseXMLError, DefaultFormatting = "工作流活动配置转换成XML时出错,活动配置:{0},错误原因:{1}", ReplaceParameters = new List <object>() { activityConfiguration, new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationMissXMLChildElement, DefaultFormatting = "工作流活动配置缺少XML节点{0},节点所属的父节点内容:{1}", ReplaceParameters = new List <object>() { "parameters", elseifElementItem.ToString() } } } }; var exception = new UtilityException((int)Errors.RealWorkfolwActivityConfigurationParseXMLError, fragment); exception.Data[UtilityExceptionDataKeys.Catch] = true; throw exception; } var conditionParameterElement = (from parameter in parametersElement.Elements("parameter") where parameter.Attribute("name").Value == "condition" select parameter).FirstOrDefault(); if (conditionParameterElement == null) { var fragment = new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationParseXMLError, DefaultFormatting = "工作流活动配置转换成XML时出错,活动配置:{0},错误原因:{1}", ReplaceParameters = new List <object>() { activityConfiguration, new TextFragment() { Code = TextCodes.RealWorkfolwActivityConfigurationMissXMLChildElement, DefaultFormatting = "工作流活动配置缺少XML节点{0},节点所属的父节点内容:{1}", ReplaceParameters = new List <object>() { "parameters/parameter[name=condition]", elseifElementItem.ToString() } } } }; var exception = new UtilityException((int)Errors.RealWorkfolwActivityConfigurationParseXMLError, fragment); exception.Data[UtilityExceptionDataKeys.Catch] = true; throw exception; } var conditionParameter = await _parameterConfigurationService.ResolveParameter(conditionParameterElement.ToString()); var matchActivities = await _activityConfigurationService.SeparateActivities(elseifElementItem.ToString()); List <RealWorkfolwActivityDescription> matchList = new List <RealWorkfolwActivityDescription>(); foreach (var itemMatchActivity in matchActivities) { var match = await _realWorkfolwActivityResolve.Execute(itemMatchActivity.Configuration); matchList.Add(match); } elseifList.Add(new RealWorkfolwActivityDescriptionDataForConditionElseIf() { Condition = conditionParameter, Match = matchList }); } } return(elseifList); }