protected override void Execute(NativeActivityContext context) { var filename = context.GetValue<string>(FileName); if (!File.Exists(filename)) { throw new FileNotFoundException(filename); } context.SetValue(Extension, Path.GetExtension(filename)); context.SetValue(Directory, Path.GetDirectoryName(filename)); context.SetValue(FileNameWithoutExtension, Path.GetFileNameWithoutExtension(filename)); var fileinfo = new System.IO.FileInfo(filename); context.SetValue(Created, fileinfo.CreationTime); context.SetValue(Length, fileinfo.Length); context.SetValue(IsReadOnly, fileinfo.IsReadOnly); context.SetValue(Modified, fileinfo.LastWriteTime); }
protected override void StartLoop(NativeActivityContext context) { var SelectorString = Selector.Get(context); SelectorString = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(SelectorString, context.DataContext); var sel = new SAPSelector(SelectorString); var timeout = Timeout.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); var flatternguitree = FlatternGuiTree.Get(context); //var from = From.Get(context); SAPElement from = null; if (maxresults < 1) { maxresults = 1; } if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your SAP.GetElements is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } SAPElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); do { var selector = new SAPSelector(SelectorString); elements = SAPSelector.GetElementsWithuiSelector(selector, from, 0, maxresults, flatternguitree); } while (elements.Count() == 0 && sw.Elapsed < timeout); Log.Debug(string.Format("OpenRPA.SAP::GetElement::found {1} elements in {0:mm\\:ss\\.fff}", sw.Elapsed, elements.Count())); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if (elements.Count() < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } context.SetValue(Elements, elements); IEnumerator <SAPElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { IncIndex(context); SetTotal(context, elements.Length); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void StartLoop(NativeActivityContext context) { WindowsCacheExtension ext = context.GetExtension <WindowsCacheExtension>(); var sw = new Stopwatch(); sw.Start(); Log.Selector(string.Format("Windows.GetElement::begin {0:mm\\:ss\\.fff}", sw.Elapsed)); UIElement[] elements = null; var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new WindowsSelector(selector); var timeout = Timeout.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } var interactive = Interactive.Get(context); var from = From.Get(context); int failcounter = 0; do { if (ClearCache != null && ClearCache.Get(context)) { Log.Selector(string.Format("Windows.GetElement::Clearing windows element cache {0:mm\\:ss\\.fff}", sw.Elapsed)); WindowsSelectorItem.ClearCache(); } if (PluginConfig.get_elements_in_different_thread) { elements = OpenRPA.AutomationHelper.RunSTAThread <UIElement[]>(() => { try { Log.Selector(string.Format("Windows.GetElement::GetElementsWithuiSelector in non UI thread {0:mm\\:ss\\.fff}", sw.Elapsed)); return(WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults, ext)); } catch (System.Threading.ThreadAbortException) { } catch (Exception ex) { Log.Error(ex.ToString()); } return(new UIElement[] { }); }, PluginConfig.search_timeout).Result; } else { Log.Selector(string.Format("Windows.GetElement::GetElementsWithuiSelector using UI thread {0:mm\\:ss\\.fff}", sw.Elapsed)); elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults, ext); if (elements == null || elements.Length == 0) { elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults, ext); } } //elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults); if (elements == null) { elements = new UIElement[] { }; } if (elements.Length == 0) { Log.Selector(string.Format("Windows.GetElement::Found no elements {0:mm\\:ss\\.fff}", sw.Elapsed)); failcounter++; } if (failcounter > 2) { WindowsSelectorItem.ClearCache(); } } while (elements != null && elements.Length == 0 && sw.Elapsed < timeout); if (PluginConfig.get_elements_in_different_thread && elements.Length > 0) { // Get them again, we need the COM objects to be loaded in the UI thread elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults, ext); } context.SetValue(Elements, elements); var lastelements = context.GetValue(_lastelements); if (lastelements == null) { lastelements = new UIElement[] { } } ; context.SetValue(_lastelements, elements); if ((elements.Length + lastelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <UIElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (lastelements.Length == elements.Length && lastelements.Length > 0) { more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); } if (more) { if (interactive) { var testelement = _enum.Current; Wait.UntilResponsive(testelement.RawElement, PluginConfig.search_timeout); } context.SetValue(_elements, _enum); context.SetValue(_sw, sw); Log.Selector(string.Format("Windows.GetElement::end:: call ScheduleAction: {0:mm\\:ss\\.fff}", sw.Elapsed)); IncIndex(context); SetTotal(context, elements.Length); context.ScheduleAction <UIElement>(Body, _enum.Current, OnBodyComplete); } else { Log.Selector(string.Format("Windows.GetElement:end {0:mm\\:ss\\.fff}", sw.Elapsed)); } }
// excute when the bookmark continue private void CallbackFunc(NativeActivityContext context, Bookmark bookmark, object value) { context.SetValue(OutMoney, (int)value); Console.WriteLine("[Continue bookmark]"); }
protected override void StartLoop(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new IESelector(selector); var timeout = Timeout.Get(context); if (Timeout == null || Timeout.Expression == null) { timeout = TimeSpan.FromSeconds(3); } var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } IEElement[] elements = { }; if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your IE.GetElements is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } if (WaitForReady.Get(context)) { var browser = Browser.GetBrowser(false); MSHTML.HTMLDocument doc = browser.Document; var sw2 = new Stopwatch(); sw2.Start(); string readyState = ""; while (sw2.Elapsed < timeout && readyState != "complete" && readyState != "interactive") { try { readyState = doc.readyState; } catch (Exception) { browser = Browser.GetBrowser(true); } // Log.Debug("pending complete, readyState: " + doc.readyState); System.Threading.Thread.Sleep(100); } } var sw = new Stopwatch(); sw.Start(); do { elements = IESelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if (elements.Length < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } context.SetValue(Elements, elements); IEnumerator <IEElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { IncIndex(context); SetTotal(context, elements.Length); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { string input = state as string; context.SetValue(this.Result, input); }
/// <summary> /// Process the data that has arrived /// </summary> /// <param name="context"></param> /// <param name="bm"></param> /// <param name="state"></param> private void OnDataArrived(NativeActivityContext context, Bookmark bm, object state) { context.SetValue(this.Result, (string)state); }
protected override void Execute(NativeActivityContext context) { object obj; WaitCallback waitCallback; bool value; object[] activityInstanceId = new object[1]; activityInstanceId[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Beginning execution.", activityInstanceId)); string displayName = base.DisplayName; if (string.IsNullOrEmpty(displayName)) { displayName = base.GetType().Name; } if (PSActivity._structuredTracer.IsEnabled) { PSActivity._structuredTracer.ActivityExecutionStarted(displayName, base.GetType().FullName); } PSSQMAPI.IncrementWorkflowActivityPresent(base.GetType().FullName); bool? activityPersistFlag = this.GetActivityPersistFlag(context); if (!activityPersistFlag.HasValue || !activityPersistFlag.HasValue) { value = false; } else { value = activityPersistFlag.Value; } bool flag = value; if (!flag) { NoPersistHandle noPersistHandle = this.noPersistHandle.Get(context); noPersistHandle.Enter(context); } this.bookmarking.Set(context, flag); Dictionary<string, object> strs = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); HostParameterDefaults extension = context.GetExtension<HostParameterDefaults>(); if (extension != null) { Dictionary<string, object> parameters = extension.Parameters; foreach (KeyValuePair<string, object> parameter in parameters) { strs[parameter.Key] = parameter.Value; } if (strs.ContainsKey("PSComputerName") && strs["PSComputerName"] as string != null) { object[] item = new object[1]; item[0] = (string)strs["PSComputerName"]; strs["PSComputerName"] = item; } } if (!base.UseDefaultInput && strs.ContainsKey("Input")) { strs.Remove("Input"); } context.SetValue<Dictionary<string, object>>(this.ParameterDefaults, strs); PSActivityContext pSActivityContext = new PSActivityContext(); pSActivityContext.runningCommands = new Dictionary<PowerShell, RetryCount>(); pSActivityContext.commandQueue = new ConcurrentQueue<ActivityImplementationContext>(); pSActivityContext.IsCanceled = false; pSActivityContext.HostExtension = extension; GenericCimCmdletActivity genericCimCmdletActivity = this as GenericCimCmdletActivity; if (genericCimCmdletActivity != null) { pSActivityContext.TypeImplementingCmdlet = genericCimCmdletActivity.TypeImplementingCmdlet; } foreach (PSActivityArgumentInfo activityArgument in this.GetActivityArguments()) { Argument argument = activityArgument.Value; this.PopulateParameterFromDefault(argument, context, activityArgument.Name, strs); if (argument.Get(context) == null) { continue; } object[] name = new object[3]; name[0] = context.ActivityInstanceId; name[1] = activityArgument.Name; name[2] = argument.Get(context); this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Using parameter {1}, with value '{2}'.", name)); } PSDataCollection<PSObject> pSObjects = base.Input.Get(context); if (pSObjects == null || pSObjects.Count != 0) { bool flag1 = false; PSDataCollection<PSObject> pSObjects1 = base.Result.Get(context); if (pSObjects1 != null) { if (this.GetDisableSerialization(context)) { pSObjects1.SerializeInput = false; } else { pSObjects1.SerializeInput = true; } } if ((pSObjects1 == null || !pSObjects1.IsOpen) && base.Result.Expression != null) { if (pSObjects1 != null) { flag1 = true; } else { pSObjects1 = this.CreateOutputStream(context); } } else { if ((this.ParameterDefaults == null || !strs.ContainsKey("Result") || strs["Result"] != base.Result.Get(context)) && pSObjects1 != null) { bool flag2 = false; bool? appendOutput = base.AppendOutput; if (appendOutput.HasValue) { bool? nullable = base.AppendOutput; if (nullable.Value) { flag2 = true; } } if (!flag2) { flag1 = true; } } } pSActivityContext.errors = this.PSError.Get(context); if (this.PSError.Expression != null && (pSActivityContext.errors == null || pSActivityContext.errors.IsAutoGenerated)) { pSActivityContext.errors = new PSDataCollection<ErrorRecord>(); pSActivityContext.errors.IsAutoGenerated = true; this.PSError.Set(context, pSActivityContext.errors); object[] objArray = new object[1]; objArray[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: No ErrorStream was passed in; creating a new stream.", objArray)); } bool? nullable1 = this.MergeErrorToOutput.Get(context); if (nullable1.HasValue) { bool? nullable2 = this.MergeErrorToOutput.Get(context); if (nullable2.GetValueOrDefault(false) && pSObjects1 != null && pSActivityContext.errors != null) { if (this.ParameterDefaults != null && strs.ContainsKey("PSError") && strs["PSError"] == this.PSError.Get(context)) { pSActivityContext.errors = new PSDataCollection<ErrorRecord>(); pSActivityContext.errors.IsAutoGenerated = true; this.PSError.Set(context, pSActivityContext.errors); object[] activityInstanceId1 = new object[1]; activityInstanceId1[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Merge error to the output stream and current error stream is the host default; creating a new stream.", activityInstanceId1)); } pSActivityContext.MergeErrorToOutput = true; } } PSDataCollection<ProgressRecord> progressRecords = this.PSProgress.Get(context); if (this.PSProgress.Expression != null && (progressRecords == null || progressRecords.IsAutoGenerated)) { progressRecords = new PSDataCollection<ProgressRecord>(); progressRecords.IsAutoGenerated = true; this.PSProgress.Set(context, progressRecords); object[] objArray1 = new object[1]; objArray1[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: No ProgressStream was passed in; creating a new stream.", objArray1)); } pSActivityContext.progress = progressRecords; this.WriteProgressRecord(context, progressRecords, Resources.RunningString, ProgressRecordType.Processing); PSDataCollection<VerboseRecord> verboseRecords = this.PSVerbose.Get(context); if (this.PSVerbose.Expression != null && (verboseRecords == null || verboseRecords.IsAutoGenerated)) { verboseRecords = new PSDataCollection<VerboseRecord>(); verboseRecords.IsAutoGenerated = true; this.PSVerbose.Set(context, verboseRecords); object[] activityInstanceId2 = new object[1]; activityInstanceId2[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: No VerboseStream was passed in; creating a new stream.", activityInstanceId2)); } PSDataCollection<DebugRecord> debugRecords = this.PSDebug.Get(context); if (this.PSDebug.Expression != null && (debugRecords == null || debugRecords.IsAutoGenerated)) { debugRecords = new PSDataCollection<DebugRecord>(); debugRecords.IsAutoGenerated = true; this.PSDebug.Set(context, debugRecords); object[] objArray2 = new object[1]; objArray2[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: No DebugStream was passed in; creating a new stream.", objArray2)); } PSDataCollection<WarningRecord> warningRecords = this.PSWarning.Get(context); if (this.PSWarning.Expression != null && (warningRecords == null || warningRecords.IsAutoGenerated)) { warningRecords = new PSDataCollection<WarningRecord>(); warningRecords.IsAutoGenerated = true; this.PSWarning.Set(context, warningRecords); object[] activityInstanceId3 = new object[1]; activityInstanceId3[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: No WarningStream was passed in; creating a new stream.", activityInstanceId3)); } pSObjects = base.Input.Get(context); if (pSObjects != null) { bool flag3 = false; if (this.ParameterDefaults != null && strs.ContainsKey("Input") && strs["Input"] == base.Input.Get(context)) { flag3 = true; } if (flag3) { PSDataCollection<PSObject> pSObjects2 = new PSDataCollection<PSObject>(pSObjects); pSObjects2.IsAutoGenerated = true; base.Input.Set(context, pSObjects2); pSObjects.Clear(); pSObjects = base.Input.Get(context); } } List<ActivityImplementationContext> tasks = this.GetTasks(context); foreach (ActivityImplementationContext task in tasks) { bool flag4 = false; PropertyInfo[] properties = base.GetType().GetProperties(); for (int i = 0; i < (int)properties.Length; i++) { PropertyInfo propertyInfo = properties[i]; if (typeof(Argument).IsAssignableFrom(propertyInfo.PropertyType)) { Argument value1 = (Argument)propertyInfo.GetValue(this, null); if (value1 != null && (value1.ArgumentType.IsAssignableFrom(typeof(ScriptBlock)) || value1.ArgumentType.IsAssignableFrom(typeof(ScriptBlock[])))) { flag4 = true; break; } } } if (flag4) { this.PopulateRunspaceFromContext(task, pSActivityContext, context); } pSActivityContext.commandQueue.Enqueue(task); } uint? nullable3 = this.PSActionRunningTimeoutSec.Get(context); activityInstanceId = new object[2]; activityInstanceId[0] = context.ActivityInstanceId; activityInstanceId[1] = nullable3; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Max running time: {1}.", activityInstanceId)); if (nullable3.HasValue) { ActivityInstance activityInstance = context.ScheduleActivity(this.cancelTimer, new CompletionCallback(this.MaxRunTimeElapsed)); pSActivityContext.runningCancelTimer = activityInstance; } activityInstanceId = new object[1]; activityInstanceId[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Invoking command.", activityInstanceId)); PSActivity.OnActivityCreated(this, new ActivityCreatedEventArgs(null)); uint? nullable4 = null; uint? nullable5 = null; IImplementsConnectionRetry implementsConnectionRetry = this as IImplementsConnectionRetry; if (implementsConnectionRetry != null) { nullable4 = implementsConnectionRetry.PSConnectionRetryCount.Get(context); nullable5 = implementsConnectionRetry.PSConnectionRetryIntervalSec.Get(context); } List<string> strs1 = new List<string>(); if (!string.IsNullOrEmpty(this.PSDefiningModule)) { strs1.Add(this.PSDefiningModule); } string[] strArrays = this.PSRequiredModules.Get(context); if (strArrays != null) { strs1.AddRange(strArrays); } Action<object> activateDelegate = null; if (extension != null && extension.ActivateDelegate != null) { activateDelegate = extension.ActivateDelegate; } Guid empty = Guid.Empty; Guid guid = Guid.NewGuid(); Bookmark bookmark = context.CreateBookmark(string.Concat(PSActivity.PSBookmarkPrefix, guid.ToString()), new BookmarkCallback(this.OnResumeBookmark)); if (activateDelegate == null) { PSWorkflowInstanceExtension pSWorkflowInstanceExtension = context.GetExtension<PSWorkflowInstanceExtension>(); BookmarkContext bookmarkContext = new BookmarkContext(); bookmarkContext.CurrentBookmark = bookmark; bookmarkContext.BookmarkResumingExtension = pSWorkflowInstanceExtension; BookmarkContext bookmarkContext1 = bookmarkContext; waitCallback = new WaitCallback(PSActivity.OnComplete); obj = bookmarkContext1; } else { obj = bookmark; waitCallback = new WaitCallback(activateDelegate.Invoke); empty = extension.JobInstanceId; if (extension != null && extension.AsyncExecutionCollection != null) { Dictionary<string, PSActivityContext> asyncExecutionCollection = extension.AsyncExecutionCollection; if (asyncExecutionCollection != null) { if (asyncExecutionCollection.ContainsKey(context.ActivityInstanceId)) { asyncExecutionCollection.Remove(context.ActivityInstanceId); } asyncExecutionCollection.Add(context.ActivityInstanceId, pSActivityContext); } } } this.psActivityContextImplementationVariable.Set(context, pSActivityContext); pSActivityContext.Callback = waitCallback; pSActivityContext.AsyncState = obj; pSActivityContext.JobInstanceId = empty; pSActivityContext.ActivityParams = new ActivityParameters(nullable4, nullable5, this.PSActionRetryCount.Get(context), this.PSActionRetryIntervalSec.Get(context), strs1.ToArray()); pSActivityContext.Input = pSObjects; if (flag1) { pSObjects1 = this.CreateOutputStream(context); } pSActivityContext.Output = pSObjects1; pSActivityContext.WorkflowHost = PSActivity.GetWorkflowHost(extension); pSActivityContext.RunInProc = this.GetRunInProc(context); pSActivityContext.ParameterDefaults = strs; pSActivityContext.ActivityType = base.GetType(); PSActivity pSActivity = this; pSActivityContext.PrepareSession = new PrepareSessionDelegate(pSActivity.PrepareSession); pSActivityContext.ActivityObject = this; if (PSActivity.IsActivityInlineScript(this) && this.RunWithCustomRemoting(context)) { pSActivityContext.RunWithCustomRemoting = true; } context.SetValue<Dictionary<string, object>>(this.ParameterDefaults, strs); pSActivityContext.Execute(); if (PSActivity._structuredTracer.IsEnabled) { PSActivity._structuredTracer.ActivityExecutionFinished(displayName); } return; } else { object[] objArray3 = new object[1]; objArray3[0] = context.ActivityInstanceId; this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "PowerShell activity ID={0}: Execution skipped due to supplied (but empty) pipeline input.", objArray3)); return; } }
private void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { // Store the value returned by the host context.SetValue(this.Result, state as string); }
protected virtual void OnRequest(NativeActivityContext context, TRequest request) { context.SetValue(Result, request); }
/// <summary> /// Executes the activity. /// </summary> /// <param name="context"></param> protected override void Execute(NativeActivityContext context) { context.SetValue(Result, string.Format(context.GetValue(Format), Arguments.Select(i => context.GetValue(i)).ToArray())); }
//after bookmark,it will be callback private void CallBackFun(NativeActivityContext context, Bookmark bookmark, object value) { context.SetValue(outDays, (int)value); Console.WriteLine("bookmark continue"); }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new IESelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } IEElement[] elements = { }; if (WaitForReady.Get(context)) { var browser = Browser.GetBrowser(false); MSHTML.HTMLDocument doc = browser.Document; var sw2 = new Stopwatch(); sw2.Start(); string readyState = ""; while (sw2.Elapsed < timeout && readyState != "complete" && readyState != "interactive") { try { readyState = doc.readyState; } catch (Exception) { browser = Browser.GetBrowser(true); } // Log.Debug("pending complete, readyState: " + doc.readyState); System.Threading.Thread.Sleep(100); } } var sw = new Stopwatch(); sw.Start(); do { elements = IESelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if (elements.Length < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } context.SetValue(Elements, elements); IEnumerator <IEElement> _enum = elements.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
//回调函数 private void MethodCallback(NativeActivityContext context, Bookmark bookmark, object value) { context.SetValue(OutputData, (T)value); }
protected override void StartLoop(NativeActivityContext context) { var folder = Folder.Get(context); var maxresults = MaxResults.Get(context); var filter = Filter.Get(context); if (string.IsNullOrEmpty(folder)) { return; } var outlookApplication = CreateOutlookInstance(); if (outlookApplication.ActiveExplorer() == null) { Log.Warning("Outlook not running!"); return; } MAPIFolder mfolder = GetFolder(outlookApplication, folder); Items Items = mfolder.Items; var unreadonly = UnreadOnly.Get(context); if (unreadonly) { if (string.IsNullOrEmpty(filter)) { filter = ""; } if (string.IsNullOrEmpty(filter)) { filter = "[Unread]=true"; } else { filter += "and [Unread]=true"; } } if (!string.IsNullOrEmpty(filter)) { Items = Items.Restrict(filter); } var result = new List <email>(); foreach (var folderItem in Items) { MailItem mailItem = folderItem as MailItem; if (mailItem != null) { var _e = new email(mailItem); result.Add(_e); if (result.Count == maxresults) { break; } } } Emails.Set(context, result); IEnumerator <email> _enum = result.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { IncIndex(context); SetTotal(context, result.Count); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); if (WaitForReady.Get(context)) { string browser = sel.browser; if (from != null) { browser = from.browser; } if (!string.IsNullOrEmpty(browser)) { NMHook.enumtabs(); if (browser == "chrome" && NMHook.CurrentChromeTab != null) { NMHook.WaitForTab(NMHook.CurrentChromeTab.id, browser, TimeSpan.FromSeconds(10)); } if (browser == "ff" && NMHook.CurrentFFTab != null) { NMHook.WaitForTab(NMHook.CurrentFFTab.id, browser, TimeSpan.FromSeconds(10)); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } context.SetValue(Elements, elements); var lastelements = context.GetValue(_lastelements); if (lastelements == null) { lastelements = new NMElement[] { } } ; context.SetValue(_lastelements, elements); if ((elements.Length + lastelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (lastelements.Length == elements.Length && lastelements.Length > 0) { var eq = new Activities.NMEqualityComparer(); more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); } if (more) { context.SetValue(_elements, _enum); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
private void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { var input = (T)state; context.SetValue(Result, input); }
/// <summary> /// Executes just before the activity is to be closed. /// </summary> /// <param name="context"></param> void BeforeExit(NativeActivityContext context) { var state = this.state.Get(context); context.SetValue(Attempts, state.Attempts.ToArray()); }
void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { double input = Convert.ToDouble(state, new CultureInfo("EN-us")); context.SetValue(this.Result, input); }
protected override void Execute(NativeActivityContext context) { var sw = new Stopwatch(); sw.Start(); Log.Selector(string.Format("Windows.GetElement::begin {0:mm\\:ss\\.fff}", sw.Elapsed)); UIElement[] elements = null; var selector = Selector.Get(context); var sel = new WindowsSelector(selector); var timeout = Timeout.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } var from = From.Get(context); // double _timeout = 250; double _timeout = 5000; if (PluginConfig.search_descendants) { _timeout = 5000; } //#if DEBUG // _timeout = _timeout * 8; //#endif do { if (PluginConfig.get_elements_in_different_thread) { elements = OpenRPA.AutomationHelper.RunSTAThread <UIElement[]>(() => { try { Log.Selector(string.Format("Windows.GetElement::GetElementsWithuiSelector in non UI thread {0:mm\\:ss\\.fff}", sw.Elapsed)); return(WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults)); } catch (System.Threading.ThreadAbortException) { } catch (Exception ex) { Log.Error(ex, ""); } return(new UIElement[] { }); }, TimeSpan.FromMilliseconds(_timeout)).Result; } else { Log.Selector(string.Format("Windows.GetElement::GetElementsWithuiSelector using UI thread {0:mm\\:ss\\.fff}", sw.Elapsed)); elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults); } //elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults); if (elements == null) { elements = new UIElement[] { }; } if (elements.Length == 0) { Log.Selector(string.Format("Windows.GetElement::Found no elements {0:mm\\:ss\\.fff}", sw.Elapsed)); } } while (elements != null && elements.Length == 0 && sw.Elapsed < timeout); //if (PluginConfig.get_elements_in_different_thread && elements.Length > 0) //{ // // Get them again, we need the COM objects to be loaded in the UI thread // elements = WindowsSelector.GetElementsWithuiSelector(sel, from, maxresults); //} context.SetValue(Elements, elements); if (elements.Count() < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <UIElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (more) { context.SetValue(_elements, _enum); context.SetValue(_sw, sw); Log.Selector(string.Format("Windows.GetElement::end:: call ScheduleAction: {0:mm\\:ss\\.fff}", sw.Elapsed)); context.ScheduleAction <UIElement>(Body, _enum.Current, OnBodyComplete); } else { Log.Selector(string.Format("Windows.GetElement:end {0:mm\\:ss\\.fff}", sw.Elapsed)); } }
protected override void Execute(NativeActivityContext context) { var folder = Folder.Get(context); if (string.IsNullOrEmpty(folder)) { return; } var outlookApplication = CreateOutlookInstance(); if (outlookApplication.ActiveExplorer() == null) { Log.Warning("Outlook not running!"); return; } MAPIFolder inBox = (MAPIFolder)outlookApplication.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox); MAPIFolder folderbase = inBox.Store.GetRootFolder(); MAPIFolder mfolder = GetFolder(folderbase, folder); Items Items = mfolder.Items; var unreadonly = UnreadOnly.Get(context); if (unreadonly) { var Filter = "[Unread]=true"; // var Filter = "@SQL=" + (char)34 + "urn:schemas:httpmail:hasattachment" + (char)34 + "=1 AND " + // var Filter = "@SQL=" + (char)34 + "urn:schemas:httpmail:read" + (char)34 + "=0"; Items.Restrict(Filter); } var result = new List <email>(); foreach (var folderItem in Items) { Microsoft.Office.Interop.Outlook.MailItem mailItem = folderItem as Microsoft.Office.Interop.Outlook.MailItem; if (mailItem != null) { var _e = new email(mailItem); if (unreadonly) { if (_e.UnRead) { result.Add(_e); } } else { result.Add(_e); } } } Emails.Set(context, result); IEnumerator <email> _enum = result.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void Execute(NativeActivityContext context) { base.Execute(context); var cell = Cell.Get(context); Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(cell); Formula.Set(context, range.Formula); Range.Set(context, range); if (this.ResultType == typeof(string)) { if (range.Value2 == null) { context.SetValue(Result, null); } try { if (range.Value2 != null) { context.SetValue(Result, range.Value2.ToString()); } else { context.SetValue(Result, null); } } catch (Exception) { context.SetValue(Result, null); } } else { var value = range.Value2; if (value.GetType() == typeof(double) && typeof(TResult) == typeof(int)) { if (value != null) { value = int.Parse(value.ToString()); } if (value == null) { value = int.Parse("0"); } } if (value != null) { context.SetValue(Result, (TResult)value); } if (value == null) { context.SetValue(Result, default(TResult)); } } var sheetPassword = SheetPassword.Get(context); if (string.IsNullOrEmpty(sheetPassword)) { sheetPassword = null; } if (!string.IsNullOrEmpty(sheetPassword) && worksheet != null) { worksheet.Protect(sheetPassword); } }
/// <summary> /// Execute the method when the workflow is waken up. /// </summary> /// <param name="context"></param> /// <param name="bookmark"></param> /// <param name="value">Keep the parameters when wake the workflow up.</param> public void ExecuteContinueBookMark(NativeActivityContext context, Bookmark bookmark, object value) { int result = Convert.ToInt32(value); context.SetValue(ReturnResult, result); }
/// <summary> /// Respond to the completion callback for the Operation activity. /// </summary> /// <param name="context">The activity context.</param> /// <param name="instance">The current instance of the activity.</param> /// <param name="result">The result returned by the activity at completion.</param> private void OnOperationCompleted(NativeActivityContext context, ActivityInstance instance, string result) { // Check to see if the operation faulted if (this.AzureActivityExceptionCaught.Get(context)) { context.ScheduleActivity(this.Failure); return; } // Store the results of the activity for later context.SetValue(this.PollingEndTime, DateTime.UtcNow.AddSeconds(this.TimeoutSeconds)); context.SetValue(this.OperationId, result); // Start the process of polling for status - kind of like a do/while context.ScheduleFunc( this.PollingBody, this.OperationId.Get(context), this.SubscriptionId.Get(context), this.CertificateThumbprintId.Get(context), this.OnGetStatusCompleted, this.OnOperationFault); }
protected override void StartLoop(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) { maxresults = 1; } if (timeout.Minutes > 5 || timeout.Hours > 1) { Activity _Activity = null; try { var strProperty = context.GetType().GetProperty("Activity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var strGetter = strProperty.GetGetMethod(nonPublic: true); _Activity = (Activity)strGetter.Invoke(context, null); } catch (Exception) { } if (_Activity != null) { Log.Warning("Timeout for Activity " + _Activity.Id + " is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } else { Log.Warning("Timeout for on of your NM.GetElements is above 5 minutes, was this the intention ? calculated value " + timeout.ToString()); } } NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); string browser = sel.browser; if (WaitForReady.Get(context)) { if (from != null) { browser = from.browser; } DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) { allelements = new NMElement[] { } } ; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); // allelements = allelements.Concat(elements).ToArray(); if (allelements.Length > 0) { var newelements = new List <NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) { newelements.Insert(0, element); } } elements = newelements.ToArray(); //if(elements.Count() > 20) //{ // for(var i=0; i < allelements.Length && i < elements.Length; i++) // { // if (!eq.Equals(allelements[i], elements[i]) || allelements[i].GetHashCode() != elements[i].GetHashCode()) // { // Log.Output(allelements[i].GetHashCode() + " / " + elements[i].GetHashCode()); // } // } //} } } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) { elements = elements.Take(maxresults).ToArray(); } if ((elements.Length + allelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator <NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); //if (lastelements.Length == elements.Length && lastelements.Length > 0) //{ // var eq = new Activities.NMEqualityComparer(); // more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); //} if (more) { allelements = allelements.Concat(elements).ToArray(); var eq = new Activities.NMEqualityComparer(); allelements = allelements.Distinct(eq).ToArray(); //var allelementslength = allelements.Length; //Array.Resize(ref allelements, allelements.Length + elements.Length); //Array.Copy(elements, 0, allelements, allelementslength, elements.Length); } context.SetValue(_allelements, allelements); context.SetValue(Elements, allelements); Log.Selector("END:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (more) { context.SetValue(_elements, _enum); IncIndex(context); SetTotal(context, allelements.Length); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
protected override void Execute(NativeActivityContext context) { var result = GetExpandoFromXml(InputXml.Get(context), Descendant.Get(context)); context.SetValue(Result, result as Array); }
protected override void Execute(NativeActivityContext context) { base.Execute(context); var cell = Cell.Get(context); Microsoft.Office.Interop.Excel.Range range = worksheet.get_Range(cell); Formula.Set(context, range.Formula); Range.Set(context, range); object value = range.Value; if (range.Value2 is TResult val2) { context.SetValue(Result, val2); } else if (range.Value is TResult val) { context.SetValue(Result, val); } else { if (value != null && typeof(TResult) == typeof(bool)) { if (value is double d) { value = (d > 0); } if (value is int i) { value = (i > 0); } if (value is string s) { value = (s == "1" || s.ToLower() == "true"); } } if (value != null && value.GetType() == typeof(double) && typeof(TResult) == typeof(int)) { if (value != null) { value = int.Parse(value.ToString()); } if (value == null) { value = int.Parse("0"); } } if (value != null && value.GetType() == typeof(DateTime) && typeof(TResult) == typeof(string)) { value = value.ToString(); } if (value != null && value.GetType() == typeof(int) && typeof(TResult) == typeof(string)) { value = value.ToString(); } if (value != null && value.GetType() == typeof(double) && typeof(TResult) == typeof(string)) { value = value.ToString(); } if (value != null) { context.SetValue(Result, (TResult)value); } if (value == null) { context.SetValue(Result, default(TResult)); } } var sheetPassword = SheetPassword.Get(context); if (string.IsNullOrEmpty(sheetPassword)) { sheetPassword = null; } if (!string.IsNullOrEmpty(sheetPassword) && worksheet != null) { worksheet.Protect(sheetPassword); } }
protected override void Execute(NativeActivityContext context) { var selector = Selector.Get(context); selector = OpenRPA.Interfaces.Selector.Selector.ReplaceVariables(selector, context.DataContext); var sel = new NMSelector(selector); var timeout = Timeout.Get(context); var from = From.Get(context); var maxresults = MaxResults.Get(context); var minresults = MinResults.Get(context); if (maxresults < 1) maxresults = 1; NMElement[] elements = { }; var sw = new Stopwatch(); sw.Start(); string browser = sel.browser; if (WaitForReady.Get(context)) { if (from != null) browser = from.browser; DoWaitForReady(browser); } var allelements = context.GetValue(_allelements); if (allelements == null) allelements = new NMElement[] { }; var s = new NMSelectorItem(sel[0]); if (!string.IsNullOrEmpty(s.url)) { var tab = NMHook.FindTabByURL(browser, s.url); if (tab != null) { if (!tab.highlighted || !tab.selected) { var _tab = NMHook.selecttab(browser, tab.id); } } } do { elements = NMSelector.GetElementsWithuiSelector(sel, from, maxresults); Log.Selector("BEGIN:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); // allelements = allelements.Concat(elements).ToArray(); if (allelements.Length > 0) { var newelements = new List<NMElement>(); for (var i = elements.Length - 1; i >= 0; i--) { var element = elements[i]; if (!allelements.Contains(element)) newelements.Insert(0, element); } elements = newelements.ToArray(); //if(elements.Count() > 20) //{ // for(var i=0; i < allelements.Length && i < elements.Length; i++) // { // if (!eq.Equals(allelements[i], elements[i]) || allelements[i].GetHashCode() != elements[i].GetHashCode()) // { // Log.Output(allelements[i].GetHashCode() + " / " + elements[i].GetHashCode()); // } // } //} } } while (elements.Count() == 0 && sw.Elapsed < timeout); if (elements.Count() > maxresults) elements = elements.Take(maxresults).ToArray(); if ((elements.Length + allelements.Length) < minresults) { Log.Selector(string.Format("Windows.GetElement::Failed locating " + minresults + " item(s) {0:mm\\:ss\\.fff}", sw.Elapsed)); throw new ElementNotFoundException("Failed locating " + minresults + " item(s)"); } IEnumerator<NMElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); //if (lastelements.Length == elements.Length && lastelements.Length > 0) //{ // var eq = new Activities.NMEqualityComparer(); // more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); //} if (more) { allelements = allelements.Concat(elements).ToArray(); var eq = new Activities.NMEqualityComparer(); allelements = allelements.Distinct(eq).ToArray(); //var allelementslength = allelements.Length; //Array.Resize(ref allelements, allelements.Length + elements.Length); //Array.Copy(elements, 0, allelements, allelementslength, elements.Length); } context.SetValue(_allelements, allelements); context.SetValue(Elements, allelements); Log.Selector("END:: I have " + elements.Count() + " elements, and " + allelements.Count() + " in all elements"); if (more) { context.SetValue(_elements, _enum); context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
private void MethodCallback(NativeActivityContext context, Bookmark bookmark, object value) { // throw new NotImplementedException(); context.SetValue(OutputData, (T)value); }
protected override void Execute(NativeActivityContext context) { var folder = Folder.Get(context); var maxresults = MaxResults.Get(context); var filter = Filter.Get(context); if (string.IsNullOrEmpty(folder)) { return; } var outlookApplication = CreateOutlookInstance(); if (outlookApplication.ActiveExplorer() == null) { Log.Warning("Outlook not running!"); return; } MAPIFolder inBox = (MAPIFolder)outlookApplication.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox); // MAPIFolder folderbase = inBox.Store.GetRootFolder(); var folderbase = outlookApplication.GetNamespace("MAPI"); MAPIFolder mfolder = GetFolder(folderbase, folder); Items Items = mfolder.Items; var unreadonly = UnreadOnly.Get(context); if (unreadonly) { if (string.IsNullOrEmpty(filter)) { filter = ""; } //if (!filter.ToLower().Contains("[unread]") && filter.ToLower().Contains("httpmail:read")) //{ if (string.IsNullOrEmpty(filter)) { filter = "[Unread]=true"; } else { filter += "and [Unread]=true"; } // } // var Filter = "@SQL=" + (char)34 + "urn:schemas:httpmail:hasattachment" + (char)34 + "=1 AND " + // var Filter = "@SQL=" + (char)34 + "urn:schemas:httpmail:read" + (char)34 + "=0"; } else { } if (!string.IsNullOrEmpty(filter)) { Items = Items.Restrict(filter); } var result = new List <email>(); foreach (var folderItem in Items) { MailItem mailItem = folderItem as MailItem; if (mailItem != null) { var _e = new email(mailItem); result.Add(_e); if (result.Count == maxresults) { break; } } } Emails.Set(context, result); IEnumerator <email> _enum = result.ToList().GetEnumerator(); context.SetValue(_elements, _enum); bool more = _enum.MoveNext(); if (more) { context.ScheduleAction(Body, _enum.Current, OnBodyComplete); } }
void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { string input = state as string; context.SetValue(this.Result, input); }
private void ContinueAtValue( NativeActivityContext context, ActivityInstance completedInstance, T result) { context.SetValue <T>(this.Result, result); }
protected override void StartLoop(NativeActivityContext context) { var result = new List <UIElement>(); var includeHidden = false; var includeEmptyTitle = false; try { if (IncludeEmptyTitle != null) { includeEmptyTitle = IncludeEmptyTitle.Get(context); } if (IncludeHidden != null) { includeHidden = IncludeHidden.Get(context); } } catch (Exception) { } var windows = RuningWindows.GetOpenedWindows(includeHidden, includeEmptyTitle); using (var automation = AutomationUtil.getAutomation()) { foreach (var window in windows) { var _window = automation.FromHandle(window.Key); result.Add(new UIElement(_window)); } } WindowsCacheExtension ext = context.GetExtension <WindowsCacheExtension>(); var sw = new Stopwatch(); sw.Start(); Log.Selector(string.Format("Windows.GetWindows::begin {0:mm\\:ss\\.fff}", sw.Elapsed)); UIElement[] elements = result.ToArray(); context.SetValue(Elements, elements); var lastelements = context.GetValue(_lastelements); if (lastelements == null) { lastelements = new UIElement[] { } } ; context.SetValue(_lastelements, elements); IEnumerator <UIElement> _enum = elements.ToList().GetEnumerator(); bool more = _enum.MoveNext(); if (lastelements.Length == elements.Length && lastelements.Length > 0) { more = !System.Collections.StructuralComparisons.StructuralEqualityComparer.Equals(lastelements, elements); } if (more) { context.SetValue(_elements, _enum); context.SetValue(_sw, sw); Log.Selector(string.Format("Windows.GetWindows::end:: call ScheduleAction: {0:mm\\:ss\\.fff}", sw.Elapsed)); IncIndex(context); SetTotal(context, elements.Length); context.ScheduleAction <UIElement>(Body, _enum.Current, OnBodyComplete); } else { Log.Selector(string.Format("Windows.GetWindows:end {0:mm\\:ss\\.fff}", sw.Elapsed)); } }
protected override void Execute(NativeActivityContext context) { context.SetValue(this.Result, context.CreateBookmarkScope()); }
void bookmarkCallback(NativeActivityContext context, Bookmark bookmark, object obj) { context.SetValue(returnObjectValue, obj); }