Example #1
0
        private bool GetConditionResult(IAutomationEngineInstance engine)
        {
            bool isTrueStatement = true;

            foreach (DataRow rw in v_IfConditionsTable.Rows)
            {
                var commandData     = rw["CommandData"].ToString();
                var ifCommand       = JsonConvert.DeserializeObject <BeginIfCommand>(commandData);
                var statementResult = CommandsHelper.DetermineStatementTruth(engine, ifCommand.v_IfActionType, ifCommand.v_ActionParameterTable);

                if (!statementResult && v_LogicType == "And")
                {
                    isTrueStatement = false;
                    break;
                }

                if (statementResult && v_LogicType == "Or")
                {
                    isTrueStatement = true;
                    break;
                }
                else if (v_LogicType == "Or")
                {
                    isTrueStatement = false;
                }
            }
            return(isTrueStatement);
        }
Example #2
0
        public async static Task <bool> ElementExists(IAutomationEngineInstance engine, OBAppInstance instance, string searchMethod, string parameterName,
                                                      string searchOption, int timeout)
        {
            //get engine reference
            List <string[]> seleniumSearchParamRows = new List <string[]>();

            seleniumSearchParamRows.Add(new string[]
            {
                string.Empty, $"\"{searchMethod}\"", parameterName
            });

            //get selenium instance driver
            var seleniumInstance = (IWebDriver)instance.Value;

            try
            {
                //search for element
                var element = await FindElement(engine, seleniumInstance, seleniumSearchParamRows, searchOption, timeout);

                //element exists
                if (element == null)
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            catch (Exception)
            {
                //element does not exist
                return(false);
            }
        }
Example #3
0
        public static bool ElementExists(IAutomationEngineInstance engine, string instanceName, string searchMethod, string parameterName,
                                         string searchOption, int timeout)
        {
            //get engine reference
            List <string[]> seleniumSearchParamRows = new List <string[]>();

            seleniumSearchParamRows.Add(new string[]
            {
                string.Empty, searchMethod, parameterName
            });

            //get stored app object
            var browserObject = instanceName.GetAppInstance(engine);

            //get selenium instance driver
            var seleniumInstance = (ChromeDriver)browserObject;

            try
            {
                //search for element
                var element = FindElement(engine, seleniumInstance, seleniumSearchParamRows, searchOption, timeout);

                //element exists
                return(true);
            }
            catch (Exception)
            {
                //element does not exist
                return(false);
            }
        }
Example #4
0
        public static Type GetVarArgType(this string varArgName, IAutomationEngineInstance engine)
        {
            OBScriptVariable requiredVariable;

            var variableList             = engine.EngineContext.Variables;
            var argumentsAsVariablesList = engine.EngineContext.Arguments
                                           .Select(arg => new OBScriptVariable
            {
                VariableName  = arg.ArgumentName,
                VariableType  = arg.ArgumentType,
                VariableValue = arg.ArgumentValue
            })
                                           .ToList();

            var variableSearchList = new List <OBScriptVariable>();

            variableSearchList.AddRange(variableList);
            variableSearchList.AddRange(argumentsAsVariablesList);

            requiredVariable = variableSearchList.Where(var => var.VariableName == varArgName).FirstOrDefault();

            if (requiredVariable != null)
            {
                return(requiredVariable.VariableType);
            }
            else
            {
                return(null);
            }
        }
        public static object ConvertUserVariableToObject(this string varArgName, IAutomationEngineInstance engine, string parameterName, ScriptCommand parent)
        {
            var variableProperties       = parent.GetType().GetProperties().Where(f => f.Name == parameterName).FirstOrDefault();
            var compatibleTypesAttribute = variableProperties.GetCustomAttributes(typeof(CompatibleTypes), true);

            Type[] compatibleTypes = null;

            if (compatibleTypesAttribute.Length > 0)
            {
                compatibleTypes = ((CompatibleTypes[])compatibleTypesAttribute)[0].CompTypes;
            }

            ScriptVariable requiredVariable;
            ScriptArgument requiredArgument;

            if (varArgName.StartsWith("{") && varArgName.EndsWith("}"))
            {
                //reformat and attempt
                var reformattedVarArg = varArgName.Replace("{", "").Replace("}", "");

                requiredVariable = engine.AutomationEngineContext.Variables
                                   .Where(var => var.VariableName == reformattedVarArg)
                                   .FirstOrDefault();

                if (requiredVariable != null && compatibleTypes != null && !compatibleTypes.Any(x => x.IsAssignableFrom(requiredVariable.VariableType) ||
                                                                                                x == requiredVariable.VariableType))
                {
                    throw new ArgumentException($"The type of variable '{requiredVariable.VariableName}' is not compatible.");
                }

                requiredArgument = engine.AutomationEngineContext.Arguments
                                   .Where(arg => arg.ArgumentName == reformattedVarArg)
                                   .FirstOrDefault();

                if (requiredArgument != null && compatibleTypes != null && !compatibleTypes.Any(x => x.IsAssignableFrom(requiredArgument.ArgumentType) ||
                                                                                                x == requiredArgument.ArgumentType))
                {
                    throw new ArgumentException($"The type of argument '{requiredArgument.ArgumentName}' is not compatible.");
                }
            }
            else
            {
                throw new Exception("Variable/Argument markers '{}' missing. Variable/Argument '" + varArgName + "' could not be found.");
            }

            if (requiredVariable != null)
            {
                return(requiredVariable.VariableValue);
            }
            else if (requiredArgument != null)
            {
                return(requiredArgument.ArgumentValue);
            }
            else
            {
                return(null);
            }
        }
Example #6
0
        public static AutomationElement SearchForGUIElement(IAutomationEngineInstance engine, DataTable uiaSearchParams, string variableWindowName)
        {
            User32Functions.ActivateWindow(variableWindowName);
            //create search params
            var searchParams = from rw in uiaSearchParams.AsEnumerable()
                               where rw.Field <string>("Enabled") == "True"
                               select rw;

            //create and populate condition list
            var conditionList = new List <Condition>();

            foreach (var param in searchParams)
            {
                var parameterName  = (string)param["Parameter Name"];
                var parameterValue = (string)param["Parameter Value"];

                parameterValue = parameterValue.ConvertUserVariableToString(engine);

                PropertyCondition propCondition;
                if (bool.TryParse(parameterValue, out bool bValue))
                {
                    propCondition = CreatePropertyCondition(parameterName, bValue);
                }
                else
                {
                    propCondition = CreatePropertyCondition(parameterName, parameterValue);
                }

                conditionList.Add(propCondition);
            }

            //concatenate or take first condition
            Condition searchConditions;

            if (conditionList.Count > 1)
            {
                searchConditions = new AndCondition(conditionList.ToArray());
            }
            else
            {
                searchConditions = conditionList[0];
            }

            //find window
            var windowElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, variableWindowName));

            //if window was not found
            if (windowElement == null)
            {
                throw new Exception("Window named '" + variableWindowName + "' was not found!");
            }

            //find required handle based on specified conditions
            var element = windowElement.FindFirst(TreeScope.Descendants, searchConditions);

            return(element);
        }
        public static void CreateTestVariable(object variableValue, IAutomationEngineInstance engine, string variableName, Type variableType)
        {
            ScriptVariable newVar = new ScriptVariable();

            newVar.VariableName  = variableName;
            newVar.VariableValue = variableValue;
            newVar.VariableType  = variableType;
            engine.AutomationEngineContext.Variables.Add(newVar);
        }
        private void InitializeArgumentLists(IAutomationEngineInstance parentAutomationEngineInstance)
        {
            _argumentList = new List <ScriptArgument>();

            foreach (DataRow rw in v_ArgumentAssignments.Rows)
            {
                var    argumentName      = (string)rw.ItemArray[0];
                var    argumentType      = (Type)rw.ItemArray[1];
                object argumentValue     = null;
                var    argumentDirection = (string)rw.ItemArray[3];

                if (argumentDirection == "In" || argumentDirection == "InOut")
                {
                    if (((string)rw.ItemArray[2]).StartsWith("{") && ((string)rw.ItemArray[2]).EndsWith("}"))
                    {
                        argumentValue = ((string)rw.ItemArray[2]).ConvertUserVariableToObject(parentAutomationEngineInstance, typeof(object));
                    }

                    if (argumentValue is string || argumentValue == null)
                    {
                        argumentValue = ((string)rw.ItemArray[2]).ConvertUserVariableToString(parentAutomationEngineInstance);
                    }

                    _argumentList.Add(new ScriptArgument
                    {
                        ArgumentName  = argumentName.Replace("{", "").Replace("}", ""),
                        Direction     = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), argumentDirection),
                        ArgumentValue = argumentValue,
                        ArgumentType  = argumentType
                    });
                }

                if (argumentDirection == "Out" || argumentDirection == "InOut")
                {
                    //verify whether the assigned variable/argument exists
                    ((string)rw.ItemArray[2]).ConvertUserVariableToObject(parentAutomationEngineInstance, nameof(v_ArgumentAssignments), this);

                    var existingArg = _argumentList.Where(x => x.ArgumentName == argumentName.Replace("{", "").Replace("}", "")).FirstOrDefault();
                    if (existingArg != null)
                    {
                        existingArg.AssignedVariable = ((string)rw.ItemArray[2]).Replace("{", "").Replace("}", "");
                    }
                    else
                    {
                        _argumentList.Add(new ScriptArgument
                        {
                            ArgumentName     = argumentName.Replace("{", "").Replace("}", ""),
                            Direction        = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), argumentDirection),
                            AssignedVariable = ((string)rw.ItemArray[2]).Replace("{", "").Replace("}", ""),
                            ArgumentType     = argumentType
                        });
                    }
                }
            }
        }
        /// <summary>
        /// Stores value of the object to a user-defined variable.
        /// </summary>
        /// <param name="sender">The script engine instance (AutomationEngineInstance) which contains session variables.</param>
        /// <param name="targetVariable">the name of the user-defined variable to override with new value</param>
        public static void StoreInUserVariable(this object varArgValue, IAutomationEngineInstance engine, string varArgName, string parameterName, ScriptCommand parent)
        {
            var variableProperties       = parent.GetType().GetProperties().Where(f => f.Name == parameterName).FirstOrDefault();
            var compatibleTypesAttribute = variableProperties.GetCustomAttributes(typeof(CompatibleTypes), true);

            Type[] compatibleTypes = null;

            if (compatibleTypesAttribute.Length > 0)
            {
                compatibleTypes = ((CompatibleTypes[])compatibleTypesAttribute)[0].CompTypes;
            }

            if (varArgName.StartsWith("{") && varArgName.EndsWith("}"))
            {
                varArgName = varArgName.Replace("{", "").Replace("}", "");
            }
            else
            {
                throw new Exception("Variable markers '{}' missing. '" + varArgName + "' is an invalid output variable name.");
            }

            var existingVariable = engine.AutomationEngineContext.Variables
                                   .Where(var => var.VariableName == varArgName)
                                   .FirstOrDefault();

            if (existingVariable != null && compatibleTypes != null && !compatibleTypes.Any(x => x.IsAssignableFrom(existingVariable.VariableType) ||
                                                                                            x == existingVariable.VariableType))
            {
                throw new ArgumentException($"The type of variable '{existingVariable.VariableName}' is not compatible.");
            }
            else if (existingVariable != null)
            {
                existingVariable.VariableValue = varArgValue;
                return;
            }

            var existingArgument = engine.AutomationEngineContext.Arguments
                                   .Where(arg => arg.ArgumentName == varArgName)
                                   .FirstOrDefault();

            if (existingArgument != null && compatibleTypes != null && !compatibleTypes.Any(x => x.IsAssignableFrom(existingArgument.ArgumentType) ||
                                                                                            x == existingArgument.ArgumentType))
            {
                throw new ArgumentException($"The type of argument '{existingArgument.ArgumentName}' is not compatible.");
            }
            else if (existingArgument != null)
            {
                existingArgument.ArgumentValue = varArgValue;
                return;
            }

            throw new ArgumentNullException($"No variable/argument with the name '{varArgName}' was found.");
        }
        private static string CalculateVariables(this string str, IAutomationEngineInstance engine)
        {
            if (!engine.AutoCalculateVariables)
            {
                return(str);
            }
            else
            {
                //track math chars
                var mathChars = new List <char>();
                mathChars.Add('*');
                mathChars.Add('+');
                mathChars.Add('-');
                mathChars.Add('=');
                mathChars.Add('/');

                //if the string matches the char then return
                //as the user does not want to do math
                if (mathChars.Any(f => f.ToString() == str) || (mathChars.Any(f => str.StartsWith(f.ToString()))))
                {
                    return(str);
                }

                //bypass math for types that are dates
                DateTime dateTest;
                if ((DateTime.TryParse(str, out dateTest) || DateTime.TryParse(str, CultureInfo.CreateSpecificCulture("es-ES"), DateTimeStyles.AssumeUniversal, out dateTest)) &&
                    (str.Split('/').Length == 3 || str.Split('-').Length == 3))
                {
                    return(str);
                }

                //test if math is required
                if (mathChars.Any(f => str.Contains(f)))
                {
                    try
                    {
                        DataTable dt = new DataTable();
                        var       v  = dt.Compute(str, "");
                        return(v.ToString());
                    }
                    catch (Exception)
                    {
                        return(str);
                    }
                }
                else
                {
                    return(str);
                }
            }
        }
Example #11
0
        public async static Task <bool> EvaluateSnippet(this string code, IAutomationEngineInstance engine)
        {
            if (engine.EngineContext.EngineScriptState == null)
            {
                engine.EngineContext.EngineScriptState = await engine.EngineContext.EngineScript.RunAsync();
            }

            string script = $"{code};";

            engine.EngineContext.EngineScriptState = await engine.EngineContext.EngineScriptState
                                                     .ContinueWithAsync(script);

            return(true);
        }
Example #12
0
        public void UpdateCurrentEngineContext(IAutomationEngineInstance parentAutomationEngineIntance, IfrmScriptEngine childfrmScriptEngine, List <ScriptArgument> argumentList)
        {
            //get new variable list from the new task engine after it finishes running
            var childEngine = ((frmScriptEngine)childfrmScriptEngine).EngineInstance;

            var parentVariableList = parentAutomationEngineIntance.AutomationEngineContext.Variables;
            var parentArgumentList = parentAutomationEngineIntance.AutomationEngineContext.Arguments;

            //get new argument list from the new task engine after it finishes running
            var childArgumentList = childfrmScriptEngine.ScriptEngineContext.Arguments;

            foreach (var argument in argumentList)
            {
                if ((argument.Direction == ScriptArgumentDirection.Out || argument.Direction == ScriptArgumentDirection.InOut) &&
                    argument.AssignedVariable != null)
                {
                    var assignedParentVariable = parentVariableList.Where(v => v.VariableName == argument.AssignedVariable).FirstOrDefault();
                    var assignedParentArgument = parentArgumentList.Where(a => a.ArgumentName == argument.AssignedVariable).FirstOrDefault();
                    if (assignedParentVariable != null)
                    {
                        assignedParentVariable.VariableValue = childArgumentList.Where(a => a.ArgumentName == argument.ArgumentName).First().ArgumentValue;
                    }
                    else if (assignedParentArgument != null)
                    {
                        assignedParentArgument.ArgumentValue = childArgumentList.Where(a => a.ArgumentName == argument.ArgumentName).First().ArgumentValue;
                    }
                    else
                    {
                        throw new ArgumentException($"Unable to assign the value of '{argument.ArgumentName}' to '{argument.AssignedVariable}' " +
                                                    "because no variable/argument with this name exists.");
                    }
                }
            }

            //get updated app instance dictionary after the new engine finishes running
            parentAutomationEngineIntance.AutomationEngineContext.AppInstances = childEngine.AutomationEngineContext.AppInstances;

            //get errors from new engine (if any)
            var newEngineErrors = childEngine.ErrorsOccured;

            if (newEngineErrors.Count > 0 && !(parentAutomationEngineIntance.LastExecutedCommand.CommandName == "RunTaskCommand" && parentAutomationEngineIntance.LastExecutedCommand.v_ErrorHandling == "Ignore Error"))
            {
                parentAutomationEngineIntance.ChildScriptFailed = true;
                foreach (var error in newEngineErrors)
                {
                    parentAutomationEngineIntance.ErrorsOccured.Add(error);
                }
            }
        }
Example #13
0
        private void UpdateCurrentEngineContext(IAutomationEngineInstance parentAutomationEngineIntance, IAutomationEngineInstance childAutomationEngineInstance)
        {
            parentAutomationEngineIntance.EngineContext.SessionVariables = childAutomationEngineInstance.EngineContext.SessionVariables;

            var parentVariableList = parentAutomationEngineIntance.EngineContext.Variables;
            var parentArgumentList = parentAutomationEngineIntance.EngineContext.Arguments;

            //get new argument list from the new task engine after it finishes running
            var childArgumentList = childAutomationEngineInstance.EngineContext.Arguments;

            foreach (var argument in _argumentList)
            {
                if ((argument.Direction == ScriptArgumentDirection.Out || argument.Direction == ScriptArgumentDirection.InOut) &&
                    !string.IsNullOrEmpty(argument.AssignedVariable))
                {
                    var assignedParentVariable = parentVariableList.Where(v => v.VariableName == argument.AssignedVariable).FirstOrDefault();
                    var assignedParentArgument = parentArgumentList.Where(a => a.ArgumentName == argument.AssignedVariable).FirstOrDefault();

                    if (assignedParentVariable != null)
                    {
                        var newVarValue = childArgumentList.Where(a => a.ArgumentName == argument.ArgumentName).First().ArgumentValue;
                        newVarValue.SetVariableValue(parentAutomationEngineIntance, assignedParentVariable.VariableName);
                    }
                    else if (assignedParentArgument != null)
                    {
                        var newArgValue = childArgumentList.Where(a => a.ArgumentName == argument.ArgumentName).First().ArgumentValue;
                        newArgValue.SetVariableValue(parentAutomationEngineIntance, assignedParentArgument.ArgumentName);
                    }
                    else
                    {
                        throw new ArgumentException($"Unable to assign the value of '{argument.ArgumentName}' to '{argument.AssignedVariable}' " +
                                                    "because no variable/argument with this name exists.");
                    }
                }
            }

            //get errors from new engine (if any)
            var newEngineErrors = childAutomationEngineInstance.ErrorsOccured;

            if (newEngineErrors.Count > 0 && v_ErrorHandling != "Ignore Error")
            {
                parentAutomationEngineIntance.ChildScriptFailed = true;

                foreach (var error in newEngineErrors)
                {
                    parentAutomationEngineIntance.ErrorsOccured.Add(error);
                }
            }
        }
Example #14
0
        private async Tasks.Task InitializeArgumentLists(IAutomationEngineInstance parentAutomationEngineInstance)
        {
            _argumentList = new List <ScriptArgument>();

            foreach (DataRow rw in v_ArgumentAssignments.Rows)
            {
                var    argumentName      = (string)rw.ItemArray[0];
                var    argumentType      = (Type)rw.ItemArray[1];
                object argumentValue     = null;
                var    argumentDirection = (string)rw.ItemArray[3];

                if (argumentDirection == "In" || argumentDirection == "InOut")
                {
                    argumentValue = await((string)rw.ItemArray[2]).EvaluateCode(parentAutomationEngineInstance);

                    _argumentList.Add(new ScriptArgument
                    {
                        ArgumentName  = argumentName,
                        Direction     = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), argumentDirection),
                        ArgumentValue = argumentValue,
                        ArgumentType  = argumentType
                    });
                }

                if (argumentDirection == "Out" || argumentDirection == "InOut")
                {
                    //verify whether the assigned variable/argument exists
                    await((string)rw.ItemArray[2]).EvaluateCode(parentAutomationEngineInstance);

                    var existingArg = _argumentList.Where(x => x.ArgumentName == argumentName).FirstOrDefault();

                    if (existingArg != null)
                    {
                        existingArg.AssignedVariable = (string)rw.ItemArray[2];
                    }
                    else
                    {
                        _argumentList.Add(new ScriptArgument
                        {
                            ArgumentName     = argumentName,
                            Direction        = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), argumentDirection),
                            AssignedVariable = (string)rw.ItemArray[2],
                            ArgumentType     = argumentType
                        });
                    }
                }
            }
        }
Example #15
0
        public static string GetJobId(IAutomationEngineInstance engine)
        {
            var    sessionVariablesDict = engine.EngineContext.SessionVariables;
            object value;

            if (sessionVariablesDict != null && sessionVariablesDict.Count > 0)
            {
                bool keyExists = sessionVariablesDict.TryGetValue("JobId", out value);
                if (keyExists)
                {
                    return(value.ToString());
                }
            }

            return(null);
        }
Example #16
0
        public static object GetAppInstance(this string instanceName, IAutomationEngineInstance engine)
        {
            try
            {
                if (engine.AutomationEngineContext.AppInstances.TryGetValue(instanceName, out object appObject))
                {
                    return(appObject);
                }

                throw new Exception("App Instance '" + instanceName + "' not found!");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #17
0
        public static void SetVariableValue(this object newVal, IAutomationEngineInstance engine, string varName)
        {
            engine.EngineContext.EngineScriptState.Variables.Where(x => x.Name == varName).FirstOrDefault().Value = newVal;

            var existingVar = engine.EngineContext.Variables.Where(x => x.VariableName == varName).FirstOrDefault();

            if (existingVar != null)
            {
                existingVar.VariableValue = newVal;
            }
            var existingArg = engine.EngineContext.Arguments.Where(x => x.ArgumentName == varName).FirstOrDefault();

            if (existingArg != null)
            {
                existingArg.ArgumentValue = newVal;
            }
        }
        public static object ConvertUserVariableToObject(this string varArgName, IAutomationEngineInstance engine, Type compatibleType)
        {
            ScriptVariable requiredVariable;
            ScriptArgument requiredArgument;

            if (varArgName.StartsWith("{") && varArgName.EndsWith("}"))
            {
                //reformat and attempt
                var reformattedVarArg = varArgName.Replace("{", "").Replace("}", "");

                requiredVariable = engine.AutomationEngineContext.Variables
                                   .Where(var => var.VariableName == reformattedVarArg)
                                   .FirstOrDefault();

                if (requiredVariable != null && !compatibleType.IsAssignableFrom(requiredVariable.VariableType) && compatibleType != requiredVariable.VariableType)
                {
                    throw new ArgumentException($"The type of variable '{requiredVariable.VariableName}' is not compatible.");
                }

                requiredArgument = engine.AutomationEngineContext.Arguments
                                   .Where(arg => arg.ArgumentName == reformattedVarArg)
                                   .FirstOrDefault();

                if (requiredArgument != null && !compatibleType.IsAssignableFrom(requiredArgument.ArgumentType) && compatibleType != requiredArgument.ArgumentType)
                {
                    throw new ArgumentException($"The type of argument '{requiredArgument.ArgumentName}' is not compatible.");
                }
            }
            else
            {
                throw new Exception("Variable/Argument markers '{}' missing. Variable/Argument '" + varArgName + "' could not be found.");
            }

            if (requiredVariable != null)
            {
                return(requiredVariable.VariableValue);
            }
            else if (requiredArgument != null)
            {
                return(requiredArgument.ArgumentValue);
            }
            else
            {
                return(null);
            }
        }
        private async Task <OleDbConnection> CreateConnection(IAutomationEngineInstance engine)
        {
            var connection = (string)await v_ConnectionString.EvaluateCode(engine);

            var connectionSecurePass = (SecureString)await v_ConnectionStringPassword.EvaluateCode(engine);

            var connectionPass = "";

            if (connectionSecurePass != null)
            {
                connectionPass = connectionSecurePass.ConvertSecureStringToString();
            }

            connection = connection.Replace("#pwd", connectionPass);

            return(new OleDbConnection(connection));
        }
Example #20
0
 public static void RemoveAppInstance(this string instanceName, IAutomationEngineInstance engine)
 {
     try
     {
         if (engine.AutomationEngineContext.AppInstances.ContainsKey(instanceName))
         {
             engine.AutomationEngineContext.AppInstances.Remove(instanceName);
         }
         else
         {
             throw new Exception("App Instance '" + instanceName + "' not found!");
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Example #21
0
        public async static Task <object> EvaluateCode(this string code, IAutomationEngineInstance engine)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(null);
            }

            if (engine.EngineContext.EngineScriptState == null)
            {
                engine.EngineContext.EngineScriptState = await engine.EngineContext.EngineScript.RunAsync();
            }

            string script = $"object {engine.EngineContext.GuidPlaceholder} = {code};";

            engine.EngineContext.EngineScriptState = await engine.EngineContext.EngineScriptState
                                                     .ContinueWithAsync(script);

            return(engine.EngineContext.EngineScriptState.GetVariable($"{engine.EngineContext.GuidPlaceholder}").Value);
        }
Example #22
0
        public static UserInfo RefreshToken(IAutomationEngineInstance engine)
        {
            var sessionVariablesDict = engine.EngineContext.SessionVariables;

            UserInfo userInfo = (UserInfo)sessionVariablesDict["UserInfo"];

            sessionVariablesDict.Remove("UserInfo");

            //use refresh token and get new auth/refresh tokens
            var environmentSettings = new EnvironmentSettings();

            environmentSettings.Load();
            AuthMethods authMethods = new AuthMethods();

            authMethods.Initialize(environmentSettings.ServerType, environmentSettings.OrganizationName, environmentSettings.ServerUrl, environmentSettings.Username, environmentSettings.Password, environmentSettings.AgentId);

            authMethods.RefreshToken(userInfo);

            return(userInfo);
        }
        public static void StoreInUserVariable(this object varArgValue, IAutomationEngineInstance engine, string varArgName, Type compatibleType)
        {
            if (varArgName.StartsWith("{") && varArgName.EndsWith("}"))
            {
                varArgName = varArgName.Replace("{", "").Replace("}", "");
            }
            else
            {
                throw new Exception("Variable/Argument markers '{}' missing. '" + varArgName + "' is an invalid output variable/argument name.");
            }

            var existingVariable = engine.AutomationEngineContext.Variables
                                   .Where(var => var.VariableName == varArgName)
                                   .FirstOrDefault();

            if (existingVariable != null && !compatibleType.IsAssignableFrom(existingVariable.VariableType) && compatibleType != existingVariable.VariableType)
            {
                throw new ArgumentException($"The type of variable '{existingVariable.VariableName}' is not compatible.");
            }
            else if (existingVariable != null)
            {
                existingVariable.VariableValue = varArgValue;
                return;
            }

            var existingArgument = engine.AutomationEngineContext.Arguments
                                   .Where(arg => arg.ArgumentName == varArgName)
                                   .FirstOrDefault();

            if (existingArgument != null && !compatibleType.IsAssignableFrom(existingArgument.ArgumentType) && compatibleType != existingArgument.ArgumentType)
            {
                throw new ArgumentException($"The type of argument '{existingArgument.ArgumentName}' is not compatible.");
            }
            else if (existingArgument != null)
            {
                existingArgument.ArgumentValue = varArgValue;
                return;
            }

            throw new ArgumentNullException($"No variable/argument with the name '{varArgName}' was found.");
        }
        public static Type GetVarArgType(this string varArgName, IAutomationEngineInstance engine)
        {
            ScriptVariable requiredVariable;

            if (varArgName.StartsWith("{") && varArgName.EndsWith("}"))
            {
                //reformat and attempt
                var reformattedVarArg = varArgName.Replace("{", "").Replace("}", "");

                var variableList             = engine.AutomationEngineContext.Variables;
                var systemVariables          = CommonMethods.GenerateSystemVariables();
                var argumentsAsVariablesList = engine.AutomationEngineContext.Arguments.Select(arg => new ScriptVariable
                {
                    VariableName  = arg.ArgumentName,
                    VariableType  = arg.ArgumentType,
                    VariableValue = arg.ArgumentValue
                })
                                               .ToList();

                var variableSearchList = new List <ScriptVariable>();
                variableSearchList.AddRange(variableList);
                variableSearchList.AddRange(systemVariables);
                variableSearchList.AddRange(argumentsAsVariablesList);

                requiredVariable = variableSearchList.Where(var => var.VariableName == reformattedVarArg).FirstOrDefault();
            }
            else
            {
                throw new Exception("Variable/Argument markers '{}' missing. Variable/Argument '" + varArgName + "' could not be found.");
            }

            if (requiredVariable != null)
            {
                return(requiredVariable.VariableType);
            }
            else
            {
                return(null);
            }
        }
Example #25
0
        public static void SetAuthSessionVariables(IAutomationEngineInstance engine, UserInfo userInfo)
        {
            var    sessionVariablesDict = engine.EngineContext.SessionVariables;
            object sessionUserInfo;

            bool keyExists = sessionVariablesDict.TryGetValue("UserInfo", out sessionUserInfo);

            if (!keyExists)
            {
                sessionVariablesDict.Add("UserInfo", userInfo);
            }
            else
            {
                var    originalUserInfo = (UserInfo)sessionUserInfo;
                string token            = originalUserInfo.Token;
                if (token != userInfo.Token)
                {
                    sessionVariablesDict.Remove("UserInfo");
                    sessionVariablesDict.Add("UserInfo", userInfo);
                }
            }
        }
Example #26
0
        public static UserInfo GetUserInfo(IAutomationEngineInstance engine)
        {
            var environmentSettings = new EnvironmentSettings();

            environmentSettings.Load();
            AuthMethods authMethods = new AuthMethods();

            authMethods.Initialize(environmentSettings.ServerType, environmentSettings.OrganizationName, environmentSettings.ServerUrl, environmentSettings.Username, environmentSettings.Password, environmentSettings.AgentId);

            var    sessionVariablesDict = engine.EngineContext.SessionVariables;
            object sessionUserInfo;

            bool keyExists = sessionVariablesDict.TryGetValue("UserInfo", out sessionUserInfo);

            if (!keyExists)
            {
                sessionUserInfo = authMethods.GetUserInfo();
                SetAuthSessionVariables(engine, (UserInfo)sessionUserInfo);
            }

            return((UserInfo)sessionUserInfo);
        }
        private async Task Reply(IAutomationEngineInstance engine, MailItem mail, string body)
        {
            if (v_BodyType == "HTML")
            {
                mail.HTMLBody = body;
            }
            else
            {
                mail.Body = body;
            }

            if (!string.IsNullOrEmpty(v_Attachments))
            {
                var vAttachment = (List <string>) await v_Attachments.EvaluateCode(engine);

                foreach (var attachment in vAttachment)
                {
                    mail.Attachments.Add(attachment);
                }
            }
            mail.Send();
        }
Example #28
0
        public static void AddAppInstance(this object appObject, IAutomationEngineInstance engine, string instanceName)
        {
            if (engine.AutomationEngineContext.AppInstances.ContainsKey(instanceName) && engine.EngineSettings.OverrideExistingAppInstances)
            {
                engine.AutomationEngineContext.AppInstances.Remove(instanceName);
            }

            else if (engine.AutomationEngineContext.AppInstances.ContainsKey(instanceName) && !engine.EngineSettings.OverrideExistingAppInstances)
            {
                throw new Exception("App Instance already exists and override has been disabled in engine settings! " +
                                    "Enable override existing app instances or use unique instance names!");
            }

            try
            {
                engine.AutomationEngineContext.AppInstances.Add(instanceName, appObject);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private async Tasks.Task <bool> DetermineMultiStatementTruth(IAutomationEngineInstance engine)
        {
            bool isTrueStatement = true;

            foreach (DataRow rw in v_WhileConditionsTable.Rows)
            {
                var  commandData  = rw["CommandData"].ToString();
                var  whileCommand = JsonConvert.DeserializeObject <BeginWhileCommand>(commandData);
                bool statementResult;

                if (whileCommand.v_Option == "Builder")
                {
                    statementResult = await CommandsHelper.DetermineStatementTruth(engine, whileCommand.v_ActionType, whileCommand.v_ActionParameterTable);
                }
                else
                {
                    statementResult = (bool)await whileCommand.v_Condition.EvaluateCode(engine);
                }

                if (!statementResult && v_LogicType == "And")
                {
                    isTrueStatement = false;
                    break;
                }

                if (statementResult && v_LogicType == "Or")
                {
                    isTrueStatement = true;
                    break;
                }
                else if (v_LogicType == "Or")
                {
                    isTrueStatement = false;
                }
            }
            return(isTrueStatement);
        }
        /// <summary>
        /// Replaces variable placeholders ({variable}) with variable text.
        /// </summary>
        /// <param name="sender">The script engine instance (AutomationEngineInstance) which contains session variables.</param>
        public static string ConvertUserVariableToString(this string userInputString, IAutomationEngineInstance engine, bool requiresMarkers = true)
        {
            if (string.IsNullOrEmpty(userInputString))
            {
                return(string.Empty);
            }

            if (engine == null)
            {
                return(userInputString);
            }

            if (userInputString.Length < 2)
            {
                return(userInputString);
            }

            var variableList             = engine.AutomationEngineContext.Variables;
            var systemVariables          = CommonMethods.GenerateSystemVariables();
            var argumentsAsVariablesList = engine.AutomationEngineContext.Arguments.Select(arg => new ScriptVariable {
                VariableName  = arg.ArgumentName,
                VariableType  = arg.ArgumentType,
                VariableValue = arg.ArgumentValue
            })
                                           .ToList();

            var variableSearchList = new List <ScriptVariable>();

            variableSearchList.AddRange(variableList);
            variableSearchList.AddRange(systemVariables);
            variableSearchList.AddRange(argumentsAsVariablesList);

            //variable markers
            string startVariableMarker = "{";
            string endVariableMarker   = "}";

            if ((!userInputString.Contains(startVariableMarker) || !userInputString.Contains(endVariableMarker)) && requiresMarkers)
            {
                return(userInputString.CalculateVariables(engine));
            }

            //split by custom markers
            string[] potentialVariables = userInputString.Split(new string[] { startVariableMarker, endVariableMarker }, StringSplitOptions.None);

            foreach (var potentialVariable in potentialVariables)
            {
                if (potentialVariable.Length == 0)
                {
                    continue;
                }

                string varcheckname = potentialVariable;
                bool   isSystemVar  = systemVariables.Any(vars => vars.VariableName == varcheckname);

                if (potentialVariable.Split('.').Length >= 2 && !isSystemVar)
                {
                    varcheckname = potentialVariable.Split('.')[0];
                }

                var varCheck = variableSearchList.Where(v => v.VariableName == varcheckname)
                               .FirstOrDefault();

                if (potentialVariable == "OpenBots.EngineContext")
                {
                    varCheck.VariableValue = engine.GetEngineContext();
                }

                if (varCheck != null)
                {
                    var searchVariable = startVariableMarker + potentialVariable + endVariableMarker;

                    if (userInputString.Contains(searchVariable))
                    {
                        if (varCheck.VariableType == typeof(string) || varCheck.VariableType.IsPrimitive)
                        {
                            userInputString = userInputString.Replace(searchVariable, varCheck.VariableValue?.ToString());
                        }
                        else if (varCheck.VariableValue is List <string> && potentialVariable.Split('.').Length == 2)
                        {
                            //get data from a string list using the index
                            string listIndexString = potentialVariable.Split('.')[1].ConvertUserVariableToString(engine, false);
                            var    list            = varCheck.VariableValue as List <string>;

                            string listItem;
                            if (int.TryParse(listIndexString, out int listIndex))
                            {
                                listItem = list[listIndex].ToString();
                            }
                            else
                            {
                                return(userInputString);
                            }

                            userInputString = userInputString.Replace(searchVariable, listItem);
                        }
                        else if (varCheck.VariableValue is DataRow && potentialVariable.Split('.').Length == 2)
                        {
                            //get data from a datarow using the column name/index
                            string columnName = potentialVariable.Split('.')[1].ConvertUserVariableToString(engine, false);
                            var    row        = varCheck.VariableValue as DataRow;

                            string cellItem;
                            if (int.TryParse(columnName, out var columnIndex))
                            {
                                cellItem = row[columnIndex].ToString();
                            }
                            else
                            {
                                cellItem = row[columnName].ToString();
                            }

                            userInputString = userInputString.Replace(searchVariable, cellItem);
                        }
                        else if (varCheck.VariableValue is DataTable && potentialVariable.Split('.').Length == 3)
                        {
                            //get data from datatable using the row index and column name/index
                            string rowIndexString = potentialVariable.Split('.')[1].ConvertUserVariableToString(engine, false);
                            string columnName     = potentialVariable.Split('.')[2].ConvertUserVariableToString(engine, false);
                            var    dt             = varCheck.VariableValue as DataTable;
                            string cellItem;

                            if (int.TryParse(rowIndexString, out int rowIndex))
                            {
                                if (int.TryParse(columnName, out int columnIndex))
                                {
                                    cellItem = dt.Rows[rowIndex][columnIndex].ToString();
                                }
                                else
                                {
                                    cellItem = dt.Rows[rowIndex][columnName].ToString();
                                }
                            }
                            else
                            {
                                return(userInputString);
                            }

                            userInputString = userInputString.Replace(searchVariable, cellItem);
                        }
                        else if (varCheck.VariableValue?.GetType().Name == typeof(KeyValuePair <,>).Name && potentialVariable.Split('.').Length == 2)
                        {
                            //get data from a keyvaluepair using Key/Value
                            string resultType = potentialVariable.Split('.')[1].ConvertUserVariableToString(engine, false);

                            dynamic pair;
                            string  resultItem;
                            pair = varCheck.VariableValue;
                            if (resultType.ToLower() == "key")
                            {
                                resultItem = pair.Key;
                            }
                            else if (resultType.ToLower() == "value")
                            {
                                resultItem = StringMethods.ConvertObjectToString(pair.Value, pair.Value.GetType());
                            }
                            else
                            {
                                throw new DataException("Only use of Key and Value is allowed using dot operater with KeyValuePair");
                            }
                            userInputString = userInputString.Replace(searchVariable, resultItem);
                        }
                    }
                    else if (!requiresMarkers)
                    {
                        if (varCheck.VariableValue is string)
                        {
                            userInputString = userInputString.Replace(potentialVariable, (string)varCheck.VariableValue);
                        }
                    }
                }
                else if (varCheck == null && userInputString.Contains(startVariableMarker + varcheckname + endVariableMarker))
                {
                    throw new ArgumentNullException($"No variable/argument with the name '{varcheckname}' was found.");
                }
            }

            return(userInputString.CalculateVariables(engine));
        }