Example #1
0
        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);
        }