public void ExecuteScriptAsync(IfrmScriptEngine scriptEngine, string filePath, string projectPath, List <ScriptVariable> variables = null, List <ScriptElement> elements = null, Dictionary <string, object> appInstances = null) { Log.Information("Client requesting to execute script using frmEngine"); ScriptEngineUI = scriptEngine; if (variables != null) { VariableList = variables; } if (elements != null) { ElementList = elements; } if (appInstances != null) { AppInstances = appInstances; } new Thread(() => { Thread.CurrentThread.IsBackground = true; ExecuteScript(filePath, true, projectPath); }).Start(); }
public static void InitializeScriptEngine(IfrmScriptEngine newEngine) { if (_scriptEngine == null) { _scriptEngine = newEngine; } }
public EngineContext(string filePath, string projectPath, IContainer container, IfrmScriptBuilder scriptBuilder, Logger engineLogger, List <ScriptVariable> variables, List <ScriptArgument> arguments, List <ScriptElement> elements, Dictionary <string, object> appInstances, IfrmScriptEngine scriptEngine, int startFromLineNumber) { FilePath = filePath; ProjectPath = projectPath; Container = container; ScriptBuilder = scriptBuilder; EngineLogger = engineLogger; Variables = variables; Arguments = arguments; Elements = elements; AppInstances = appInstances; ScriptEngine = scriptEngine; StartFromLineNumber = startFromLineNumber; }
public EngineContext(string filePath, string projectPath, IContainer container, IfrmScriptBuilder scriptBuilder, Logger engineLogger, List <OBScriptVariable> variables, List <ScriptArgument> arguments, List <ScriptElement> elements, Dictionary <string, List <AssemblyReference> > importedNamespaces, Dictionary <string, object> sessionVariables, IfrmScriptEngine scriptEngine, int startFromLineNumber, bool isDebugMode, bool isChildEngine) { FilePath = filePath; ProjectPath = projectPath; Container = container; ScriptBuilder = scriptBuilder; EngineLogger = engineLogger; Variables = variables; Arguments = arguments; Elements = elements; ImportedNamespaces = importedNamespaces; SessionVariables = sessionVariables; ScriptEngine = scriptEngine; StartFromLineNumber = startFromLineNumber; IsDebugMode = isDebugMode; IsChildEngine = isChildEngine; GuidPlaceholder = GenerateGuidPlaceHolder(); }
public void ExecuteScriptAsync(IfrmScriptEngine scriptEngine, string filePath, List <ScriptVariable> variables = null, List <ScriptElement> elements = null) { EngineLogger.Information("Client requesting to execute script using frmEngine"); TasktEngineUI = scriptEngine; if (variables != null) { VariableList = variables; } if (elements != null) { ElementList = elements; } new Thread(() => { Thread.CurrentThread.IsBackground = true; ExecuteScript(filePath, true); }).Start(); }
public override void RunCommand(object sender) { var parentAutomationEngineInstance = (IAutomationEngineInstance)sender; if (parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine == null) { RunServerTask(sender); return; } var childTaskPath = v_TaskPath.ConvertUserVariableToString(parentAutomationEngineInstance); if (!File.Exists(childTaskPath)) { throw new FileNotFoundException("Task file was not found"); } IfrmScriptEngine parentfrmScriptEngine = parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine; string parentTaskPath = parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine.ScriptEngineContext.FilePath; int parentDebugLine = parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine.DebugLineNumber; //create argument list InitializeArgumentLists(parentAutomationEngineInstance); string projectPath = parentfrmScriptEngine.ScriptEngineContext.ProjectPath; EngineContext childEngineContext = new EngineContext(childTaskPath, projectPath, parentAutomationEngineInstance.AutomationEngineContext.Container, CurrentScriptBuilder, parentfrmScriptEngine.ScriptEngineContext.EngineLogger, null, _argumentList, null, parentAutomationEngineInstance.AutomationEngineContext.AppInstances, null, 1); _childfrmScriptEngine = parentfrmScriptEngine.CommandControls.CreateScriptEngineForm(childEngineContext, false, parentfrmScriptEngine.IsDebugMode); if (parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine.IsScheduledOrAttendedTask) { _childfrmScriptEngine.IsScheduledOrAttendedTask = true; } _childfrmScriptEngine.IsChildEngine = true; _childfrmScriptEngine.IsHiddenTaskEngine = true; if (IsSteppedInto) { _childfrmScriptEngine.IsNewTaskSteppedInto = true; _childfrmScriptEngine.IsHiddenTaskEngine = false; } if (CurrentScriptBuilder != null) { CurrentScriptBuilder.EngineLogger.Information("Executing Child Task: " + Path.GetFileName(childTaskPath)); } else { Log.Information("Executing Child Task: " + Path.GetFileName(childTaskPath)); } ((Form)parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine).Invoke((Action) delegate() { ((Form)parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine).TopMost = false; }); Application.Run((Form)_childfrmScriptEngine); if (_childfrmScriptEngine.ClosingAllEngines) { parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine.ClosingAllEngines = true; parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine.CloseWhenDone = true; } // Update Current Engine Context Post Run Task _childfrmScriptEngine.UpdateCurrentEngineContext(parentAutomationEngineInstance, _childfrmScriptEngine, _argumentList); if (CurrentScriptBuilder != null) { CurrentScriptBuilder.EngineLogger.Information("Resuming Parent Task: " + Path.GetFileName(parentTaskPath)); } else { Log.Information("Resuming Parent Task: " + Path.GetFileName(parentTaskPath)); } if (parentfrmScriptEngine.IsDebugMode) { ((Form)parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine).Invoke((Action) delegate() { ((Form)parentfrmScriptEngine).TopMost = true; parentfrmScriptEngine.IsHiddenTaskEngine = true; if ((IsSteppedInto || !_childfrmScriptEngine.IsHiddenTaskEngine) && !_childfrmScriptEngine.IsNewTaskResumed && !_childfrmScriptEngine.IsNewTaskCancelled) { parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.CurrentEngine = parentfrmScriptEngine; parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.IsScriptSteppedInto = true; parentfrmScriptEngine.IsHiddenTaskEngine = false; //toggle running flag to allow for tab selection parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.IsScriptRunning = false; parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.OpenScriptFile(parentTaskPath, true); parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.IsScriptRunning = true; parentfrmScriptEngine.UpdateLineNumber(parentDebugLine + 1); parentfrmScriptEngine.AddStatus("Pausing Before Execution"); } else if (_childfrmScriptEngine.IsNewTaskResumed) { parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.CurrentEngine = parentfrmScriptEngine; parentfrmScriptEngine.IsNewTaskResumed = true; parentfrmScriptEngine.IsHiddenTaskEngine = true; parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.IsScriptSteppedInto = false; parentfrmScriptEngine.ScriptEngineContext.ScriptBuilder.IsScriptPaused = false; parentfrmScriptEngine.ResumeParentTask(); } else if (_childfrmScriptEngine.IsNewTaskCancelled) { parentfrmScriptEngine.uiBtnCancel_Click(null, null); } else //child task never stepped into { parentfrmScriptEngine.IsHiddenTaskEngine = false; } }); } else { ((Form)parentAutomationEngineInstance.AutomationEngineContext.ScriptEngine).Invoke((Action) delegate() { ((Form)parentfrmScriptEngine).TopMost = true; }); } }
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); } } }