internal WorkflowApplicationIdleEventArgs(System.Activities.WorkflowApplication application) : base(application) { }
internal WorkflowApplicationEventArgs(System.Activities.WorkflowApplication application) { this.Owner = application; }
public void createApp() { //var xh = new XamlHelper(workflow.xaml); //extraextension.updateProfile(xh.Variables.ToArray(), xh.ArgumentNames.ToArray()); var CustomTrackingParticipant = new WorkflowTrackingParticipant(); CustomTrackingParticipant.OnVisualTracking += Participant_OnVisualTracking; if (string.IsNullOrEmpty(InstanceId)) { // Remove unknown Parameters, if we don't the workflow will fail foreach (var param in Parameters.ToList()) { var allowed = Workflow.Parameters.Where(x => x.name == param.Key).FirstOrDefault(); if (allowed == null || allowed.direction == workflowparameterdirection.@out) { Parameters.Remove(param.Key); } } // Ensure Type foreach (var wfparam in Workflow.Parameters) { if (Parameters.ContainsKey(wfparam.name) && wfparam.type == "System.Int32") { if (Parameters[wfparam.name] != null) { Parameters[wfparam.name] = int.Parse(Parameters[wfparam.name].ToString()); } } else if (Parameters.ContainsKey(wfparam.name) && wfparam.type == "System.Boolean") { if (Parameters[wfparam.name] != null) { Parameters[wfparam.name] = bool.Parse(Parameters[wfparam.name].ToString()); } } } wfApp = new System.Activities.WorkflowApplication(Workflow.Activity, Parameters); wfApp.Extensions.Add(CustomTrackingParticipant); if (Workflow.Serializable) { //if (Config.local.localstate) //{ // if (!System.IO.Directory.Exists(System.IO.Directory.GetCurrentDirectory() + "\\state")) System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\\state"); // wfApp.InstanceStore = new Store.XMLFileInstanceStore(System.IO.Directory.GetCurrentDirectory() + "\\state"); //} //else //{ // wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); //} wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); } addwfApphandlers(wfApp); } else { wfApp = new System.Activities.WorkflowApplication(Workflow.Activity); wfApp.Extensions.Add(CustomTrackingParticipant); addwfApphandlers(wfApp); if (Workflow.Serializable || !Workflow.Serializable) { //if (Config.local.localstate) //{ // if (!System.IO.Directory.Exists(System.IO.Directory.GetCurrentDirectory() + "\\state")) System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\\state"); // wfApp.InstanceStore = new Store.XMLFileInstanceStore(System.IO.Directory.GetCurrentDirectory() + "\\state"); //} //else //{ // wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); //} wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); } wfApp.Load(new Guid(InstanceId)); } state = "loaded"; }
internal WorkflowApplicationCompletedEventArgs(System.Activities.WorkflowApplication application, Exception terminationException, ActivityInstanceState completionState, IDictionary <string, object> outputs) : base(application) { this.terminationException = terminationException; this.completionState = completionState; this.outputs = outputs; }
private void addwfApphandlers(System.Activities.WorkflowApplication wfApp) { wfApp.Completed = delegate(System.Activities.WorkflowApplicationCompletedEventArgs e) { isCompleted = true; if (e.CompletionState == System.Activities.ActivityInstanceState.Faulted) { } else if (e.CompletionState == System.Activities.ActivityInstanceState.Canceled) { } else if (e.CompletionState == System.Activities.ActivityInstanceState.Closed) { state = "completed"; foreach (var o in e.Outputs) { Parameters[o.Key] = o.Value; } if (runWatch != null) { runWatch.Stop(); } OnIdleOrComplete?.Invoke(this, EventArgs.Empty); } else if (e.CompletionState == System.Activities.ActivityInstanceState.Executing) { } else { throw new Exception("Unknown completetion state!!!" + e.CompletionState); } }; wfApp.Aborted = delegate(System.Activities.WorkflowApplicationAbortedEventArgs e) { hasError = true; isCompleted = true; state = "aborted"; Exception = e.Reason; errormessage = e.Reason.Message; _ = Save(); if (runWatch != null) { runWatch.Stop(); } OnIdleOrComplete?.Invoke(this, EventArgs.Empty); }; wfApp.Idle = delegate(System.Activities.WorkflowApplicationIdleEventArgs e) { var bookmarks = new Dictionary <string, object>(); foreach (var b in e.Bookmarks) { bookmarks.Add(b.BookmarkName, null); } Bookmarks = bookmarks; state = "idle"; _ = Save(); if (state != "completed") { OnIdleOrComplete?.Invoke(this, EventArgs.Empty); } }; wfApp.PersistableIdle = delegate(System.Activities.WorkflowApplicationIdleEventArgs e) { //return PersistableIdleAction.Unload; _ = Save(); return(System.Activities.PersistableIdleAction.Persist); }; wfApp.Unloaded = delegate(System.Activities.WorkflowApplicationEventArgs e) { if (!isCompleted && !hasError) { state = "unloaded"; } else { DeleteFile(); } //isUnloaded = true; if (global.isConnected) { _ = Save(); } }; wfApp.OnUnhandledException = delegate(System.Activities.WorkflowApplicationUnhandledExceptionEventArgs e) { hasError = true; isCompleted = true; state = "failed"; Exception = e.UnhandledException; errormessage = e.UnhandledException.ToString(); //exceptionsource = e.ExceptionSource.Id; if (runWatch != null) { runWatch.Stop(); } OnIdleOrComplete?.Invoke(this, EventArgs.Empty); return(System.Activities.UnhandledExceptionAction.Terminate); }; }
internal WorkflowApplicationUnhandledExceptionEventArgs(System.Activities.WorkflowApplication application, Exception exception, Activity exceptionSource, string exceptionSourceInstanceId) : base(application) { this.UnhandledException = exception; this.ExceptionSource = exceptionSource; this.ExceptionSourceInstanceId = exceptionSourceInstanceId; }
internal WorkflowApplicationAbortedEventArgs(System.Activities.WorkflowApplication application, Exception reason) : base(application) { this.Reason = reason; }
public void WorkflowContinue(Mercury.Server.Application application, Int64 workQueueItemId, String assemblyUrl, String workflowClassName, Guid workflowInstanceId, Server.Workflows.UserInteractions.Response.ResponseBase userInteractionResponse) { workflowResponse.WorkQueueItemId = workQueueItemId; #region Load Workflow Assembly assemblyReferencePath = assemblyUrl.Substring(0, assemblyUrl.LastIndexOf('\\') + 1); assemblyReferenceName = assemblyUrl.Replace(assemblyReferencePath, ""); AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); System.Reflection.Assembly workflowAssembly = System.Reflection.Assembly.LoadFrom(assemblyUrl); Type workflowClass = workflowAssembly.GetType(workflowClassName); if (workflowClass == null) { throw new ApplicationException("Unable to find Class [" + workflowClassName + "] in referenced Assembly [" + assemblyUrl + "]."); } #endregion // SET RESPONSE VALUE UserInteractionResponse = userInteractionResponse; // CREATE WORKFLOW INSTANCE workflowInstance = new System.Activities.WorkflowApplication((System.Activities.Activity)Activator.CreateInstance(workflowAssembly.GetType(workflowClassName))); // LINK EVENT HANDLERS workflowInstance.Completed = WorkflowCompleted; workflowInstance.Aborted = WorkflowAborted; // workflowInstance.Idle = WorkflowIdle; // DO NOTHING, REMOVED, FALL THROUGH TO PERSISTABLE IDLE TO UNLOAD workflowInstance.PersistableIdle = WorkflowPersistableIdle; workflowInstance.Unloaded = WorkflowUnloaded; workflowInstance.OnUnhandledException = WorkflowOnUnhandledException; // LINK PERSISTANCE INSTANCE STORE AND LOAD FROM STORE workflowInstance.InstanceStore = instanceStore; workflowInstance.Load(workflowInstanceId); // RESUME FROM BOOKMARK workflowInstance.ResumeBookmark(workflowInstanceId.ToString(), this); return; }
public void WorkflowStart(String assemblyUrl, String workflowClassName, WorkflowStartRequest startRequest) { workflowResponse.WorkQueueItemId = startRequest.WorkQueueItemId; #region Load Workflow Assembly assemblyReferencePath = assemblyUrl.Substring(0, assemblyUrl.LastIndexOf('\\') + 1); assemblyReferenceName = assemblyUrl.Replace(assemblyReferencePath, ""); AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); System.Reflection.Assembly workflowAssembly = System.Reflection.Assembly.LoadFrom(assemblyUrl); Type workflowClass = workflowAssembly.GetType(workflowClassName); if (workflowClass == null) { throw new ApplicationException("Unable to find Class [" + workflowClassName + "] in referenced Assembly [" + assemblyUrl + "]."); } #endregion #region Build Workflow Arguments (Inputs) Dictionary <String, Object> workflowArguments = new Dictionary <String, Object> (); workflowArguments.Add("WorkflowManager", this); foreach (System.Reflection.PropertyInfo currentProperty in workflowClass.GetProperties()) { String propertyName = currentProperty.Name; Type propertyType = currentProperty.PropertyType; System.Diagnostics.Debug.WriteLine("Workflow Property: " + propertyName + " [" + propertyType + "]"); System.Diagnostics.Debug.WriteLine(currentProperty.ToString()); if (startRequest.Arguments.ContainsKey(propertyName)) { try { switch (propertyType.Name) { case "Int16": workflowArguments.Add(propertyName, Convert.ToInt16(startRequest.Arguments[propertyName])); break; case "Int32": workflowArguments.Add(propertyName, Convert.ToInt32(startRequest.Arguments[propertyName])); break; case "Int64": workflowArguments.Add(propertyName, Convert.ToInt64(startRequest.Arguments[propertyName])); break; case "DateTime": workflowArguments.Add(propertyName, Convert.ToDateTime(startRequest.Arguments[propertyName])); break; case "Decimal": workflowArguments.Add(propertyName, Convert.ToDecimal(startRequest.Arguments[propertyName])); break; case "Single": workflowArguments.Add(propertyName, Convert.ToSingle(startRequest.Arguments[propertyName])); break; case "Double": workflowArguments.Add(propertyName, Convert.ToDouble(startRequest.Arguments[propertyName])); break; case "Boolean": workflowArguments.Add(propertyName, Convert.ToBoolean(startRequest.Arguments[propertyName])); break; case "String": workflowArguments.Add(propertyName, Convert.ToString(startRequest.Arguments[propertyName])); break; default: if (propertyName.EndsWith("Id")) { workflowArguments.Add(propertyName, Convert.ToInt64(startRequest.Arguments[propertyName])); } else { workflowArguments.Add(propertyName, startRequest.Arguments[propertyName]); } break; } } catch (Exception conversionException) { System.Diagnostics.Trace.WriteLineIf(Application.TraceSwitchWorkflow.TraceError, conversionException.Message); } } } #endregion // START WORKFLOW workflowInstance = new System.Activities.WorkflowApplication((System.Activities.Activity)Activator.CreateInstance(workflowAssembly.GetType(workflowClassName)), workflowArguments); // LINK EVENT HANDLERS workflowInstance.Completed = WorkflowCompleted; workflowInstance.Aborted = WorkflowAborted; // workflowInstance.Idle = WorkflowIdle; // DO NOTHING, REMOVED, FALL THROUGH TO PERSISTABLE IDLE TO UNLOAD workflowInstance.PersistableIdle = WorkflowPersistableIdle; workflowInstance.Unloaded = WorkflowUnloaded; workflowInstance.OnUnhandledException = WorkflowOnUnhandledException; // LINK PERSISTANCE INSTANCE STORE workflowInstance.InstanceStore = instanceStore; // EXECUTE WORKFLOW WorkflowStatus = Workflows.WorkflowStatus.Started; workflowInstance.Run(); return; }
public void createApp() { if (string.IsNullOrEmpty(InstanceId)) { // Remove unknown Parameters, if we don't the workflow will fail foreach (var param in Parameters.ToList()) { var allowed = Workflow.Parameters.Where(x => x.name == param.Key).FirstOrDefault(); if (allowed == null || allowed.direction == workflowparameterdirection.@out) { Parameters.Remove(param.Key); } } // Ensure Type foreach (var wfparam in Workflow.Parameters) { if (Parameters.ContainsKey(wfparam.name) && wfparam.type == "System.Int32") { if (Parameters[wfparam.name] != null) { Parameters[wfparam.name] = int.Parse(Parameters[wfparam.name].ToString()); } } else if (Parameters.ContainsKey(wfparam.name) && wfparam.type == "System.Boolean") { if (Parameters[wfparam.name] != null) { Parameters[wfparam.name] = bool.Parse(Parameters[wfparam.name].ToString()); } } } wfApp = new System.Activities.WorkflowApplication(Workflow.Activity, Parameters); if (Workflow.Serializable) { //if (Config.local.localstate) //{ // if (!System.IO.Directory.Exists(System.IO.Directory.GetCurrentDirectory() + "\\state")) System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\\state"); // wfApp.InstanceStore = new Store.XMLFileInstanceStore(System.IO.Directory.GetCurrentDirectory() + "\\state"); //} //else //{ // wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); //} wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); } addwfApphandlers(wfApp); } else { wfApp = new System.Activities.WorkflowApplication(Workflow.Activity); addwfApphandlers(wfApp); if (Workflow.Serializable) { //if (Config.local.localstate) //{ // if (!System.IO.Directory.Exists(System.IO.Directory.GetCurrentDirectory() + "\\state")) System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\\state"); // wfApp.InstanceStore = new Store.XMLFileInstanceStore(System.IO.Directory.GetCurrentDirectory() + "\\state"); //} //else //{ // wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); //} wfApp.InstanceStore = new Store.OpenFlowInstanceStore(); } wfApp.Load(new Guid(InstanceId)); } state = "loaded"; }