Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
 // excute when the bookmark continue
 private void CallbackFunc(NativeActivityContext context, Bookmark bookmark, object value)
 {
     context.SetValue(OutMoney, (int)value);
     Console.WriteLine("[Continue bookmark]");
 }
Пример #5
0
        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);
            }
        }
Пример #6
0
 void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
 {
     string input = state as string;
     context.SetValue(this.Result, input);
 }
Пример #7
0
 /// <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);
 }
Пример #8
0
		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;
			}
		}
Пример #9
0
 private void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
 {
     // Store the value returned by the host
     context.SetValue(this.Result, state as string);
 }
Пример #10
0
 protected virtual void OnRequest(NativeActivityContext context, TRequest request)
 {
     context.SetValue(Result, request);
 }
Пример #11
0
 /// <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()));
 }
Пример #12
0
 //after bookmark,it will be callback
 private void CallBackFun(NativeActivityContext context, Bookmark bookmark, object value)
 {
     context.SetValue(outDays, (int)value);
     Console.WriteLine("bookmark continue");
 }
Пример #13
0
        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);
            }
        }
Пример #14
0
 //回调函数
 private void MethodCallback(NativeActivityContext context, Bookmark bookmark, object value)
 {
     context.SetValue(OutputData, (T)value);
 }
Пример #15
0
        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);
            }
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        private void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
        {
            var input = (T)state;

            context.SetValue(Result, input);
        }
Пример #18
0
        /// <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);
        }
Пример #20
0
        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));
            }
        }
Пример #21
0
        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);
            }
        }
Пример #22
0
        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);
            }
        }
Пример #23
0
        /// <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);
        }
Пример #25
0
        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);
        }
Пример #27
0
        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);
            }
        }
Пример #28
0
        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);
 }
Пример #30
0
        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);
            }
        }
Пример #31
0
        void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
        {
            string input = state as string;

            context.SetValue(this.Result, input);
        }
Пример #32
0
 private void ContinueAtValue(
     NativeActivityContext context, ActivityInstance completedInstance, T result)
 {
     context.SetValue <T>(this.Result, result);
 }
Пример #33
0
        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());
 }
Пример #35
0
        void bookmarkCallback(NativeActivityContext context, Bookmark bookmark, object obj)
        {

            context.SetValue(returnObjectValue, obj);

        }