Exemplo n.º 1
0
        public async Task <object> Execute(RealWorkfolwActivityParameter parameter, RealWorkfolwContext context)
        {
            RealWorkfolwActivityParameterExpressionDescription parameterDescription = null;

            if (!parameter.Extensions.TryGetValue("description", out object objDescription))
            {
                parameterDescription = await Resolve(parameter, parameter.Configuration);

                parameter.Extensions["description"] = parameterDescription;
            }
            else
            {
                parameterDescription = (RealWorkfolwActivityParameterExpressionDescription)objDescription;
            }
            return(await Calculate(parameterDescription, context));
        }
Exemplo n.º 2
0
        private async Task <object> Calculate(RealWorkfolwActivityParameterExpressionDescription description, RealWorkfolwContext context)
        {
            if (!context.ParameterExpressionResults.TryGetValue(description.Expression, out object result))
            {
                List <object> inputs = new List <object>();
                foreach (var paraitem in description.Parameters)
                {
                    if (paraitem is RealWorkfolwActivityParameterExpressionDescription)
                    {
                        inputs.Add(await Calculate((RealWorkfolwActivityParameterExpressionDescription)paraitem, context));
                    }
                    else
                    {
                        inputs.Add(paraitem.ToString());
                    }
                }

                var expressionHandle = _realWorkfolwExpressionHandleSelector.Choose(description.Name);
                result = await expressionHandle.Execute(inputs, context);

                context.ParameterExpressionResults[description.Expression] = result;
            }
            return(result);
        }
Exemplo n.º 3
0
        private async Task <RealWorkfolwActivityParameterExpressionDescription> Resolve(RealWorkfolwActivityParameter parameter, string expression)
        {
            RealWorkfolwActivityParameterExpressionDescription result = new RealWorkfolwActivityParameterExpressionDescription();

            result.Expression = expression;

            var rootMatch = _regRoot.Match(expression);

            if (rootMatch.Success == false)
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.RealWorkfolwActivityParameterHandleExecuteError,
                    DefaultFormatting = "工作流活动参数处理出错,错误原因:{0},参数名称:{1},参数数据类型:{2},参数表达式类型:{3},参数配置:{4},发生位置:{5}",
                    ReplaceParameters = new List <object>()
                    {
                        parameter.Name, parameter.DataType, parameter.ExpressionType, parameter.Configuration, $"{this.GetType().FullName}.Execute"
                    }
                };

                throw new UtilityException((int)Errors.RealWorkfolwActivityParameterHandleExecuteError, fragment);
            }
            string rootName;
            string strRootName      = rootMatch.Groups[1].Value;
            var    arrayStrRootName = strRootName.Split('_');

            rootName    = arrayStrRootName[0];
            result.Name = rootName;
            var expressions = _regExpression.Matches(rootMatch.Groups[2].Value);



            Dictionary <int, RealWorkfolwActivityParameterExpressionDescription> expressionParameters = new Dictionary <int, RealWorkfolwActivityParameterExpressionDescription>();

            int parIndex = 0;

            for (var index = 0; index <= expressions.Count - 1; index++)
            {
                expressionParameters[parIndex] = await Resolve(parameter, expressions[index].Value);

                parIndex++;
            }

            var newStrPars = _regExpression.Replace(rootMatch.Groups[2].Value, @"\n");

            var arrayParas = _regParSep.Split(newStrPars);

            parIndex = 0;
            List <object> inputs = new List <object>();

            foreach (var itemPara in arrayParas)
            {
                if (itemPara == @"\n")
                {
                    inputs.Add(expressionParameters[parIndex]);
                }
                else
                {
                    inputs.Add(itemPara.Replace(@"\,", @",").Replace(@"\)", @")").Replace(@"\(", @"(").Replace(@"\\", @"\"));
                }
            }

            result.Parameters = inputs;

            return(result);
        }