Ejemplo n.º 1
0
        public override ICalculateOutput Calc(ICalculateInpute input)
        {
            if (input.DataSource.Any())
            {
                string   script          = input.Script;
                string[] patternDataList = ExpressionTask.GetPatternDataList(script);
                foreach (string pattern in patternDataList)
                {
                    IMetaData md = input.DataSource.FirstOrDefault(t => t.TagId == pattern);

                    if (md != null)
                    {
                        script = script.Replace($"[{pattern}]", md.TagValue.ToString());
                    }
                }

                object result = CSharpScript.EvaluateAsync(script).Result;

                return(new CalculateOutput(input.SessinId, DateTime.Now,
                                           new MetaData[] {
                    new MetaData()
                    {
                        TagId = ResultId,
                        TagTime = input.InputeDateTime,
                        TagValue = result.ToString()
                    }
                }));
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 2
0
        public static void CreateTask(ProjectWrapper projectWrapper, PackageWrapper packageWrapper, ContainerWrapper containerWrapper,
                                      IonStructure.Task task, List <ScriptProject> globalScriptProjects, ScriptProject referencedGlobalScriptProject = null)
        {
            try
            {
                ExecutableWrapper executableWrapper = null;

                switch (task)
                {
                case DataFlow dataFlow:
                    DataFlowTask dataFlowTask = new DataFlowTask(dataFlow, projectWrapper, packageWrapper, containerWrapper);
                    executableWrapper = dataFlowTask.DataFlowTaskWrapper;
                    break;

                case ExecuteSql executeSql:
                    ExecuteSqlTask executeSqlTask = new ExecuteSqlTask(executeSql, containerWrapper);
                    executableWrapper = executeSqlTask.ExecuteSqlTaskWrapper;
                    break;

                case ExecuteProcess executeProcess:
                    executableWrapper = ExecuteProcessTask.CreateTask(executeProcess, containerWrapper);
                    break;

                case Expression expression:
                    executableWrapper = ExpressionTask.CreateTask(expression, containerWrapper);
                    break;

                case Script script:
                    ScriptTask scriptTask = new ScriptTask(script, projectWrapper, packageWrapper, containerWrapper, referencedGlobalScriptProject);
                    executableWrapper = scriptTask.ScriptTaskWrapper;
                    break;

                case ForLoopContainer forLoopContainer:
                    executableWrapper = ContainerExecutable.CreateForLoopContainer(forLoopContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;

                case ForEachFromVariableLoopContainer forEachFromVarLoopContainer:
                    executableWrapper = ContainerExecutable.CreateForEachFromVariableLoopContainer(forEachFromVarLoopContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;

                case SequenceContainer sequenceContainer:
                    executableWrapper = ContainerExecutable.CreateSequenceContainer(sequenceContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;
                }

                AddPrecedenceConstraints(containerWrapper, executableWrapper, task.PrecedenceConstraints);
            }
            catch (Exception e)
            {
                if (e.Data[Constants.ExceptionTaskKey] == null)
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name;
                }
                else
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name + "/" + e.Data[Constants.ExceptionTaskKey];                     // If task is not null then the task being created is a container, and an exception has been thrown in one of its underlying tasks.
                }
                throw;
            }
        }
Ejemplo n.º 3
0
        public void AddOrUpdateExpressionTask(string expId, string expName, ExpressionCalculateType expCalculateType, int timerInterval, string script, ICalculate calc)
        {
            if (!_expList.ContainsKey(expId))
            {
                IExpressionTask expTask = new ExpressionTask(expId, expName, expCalculateType, timerInterval, script, calc)
                {
                    GlobalContext = _context
                };

                _expList.TryAdd(expId, expTask);
            }
            else
            {
                IExpressionTask expTask;
                if (_expList.TryGetValue(expId, out expTask))
                {
                    expTask.Name   = expName;
                    expTask.Script = script;
                    expTask.ExpressionCalculateType = expCalculateType;
                    expTask.TimerInterval           = timerInterval;
                    expTask.CalculateOperator       = calc;
                }
            }
        }