Example #1
0
 internal WorkflowApplicationIdleEventArgs(System.Activities.WorkflowApplication application) : base(application)
 {
 }
Example #2
0
 internal WorkflowApplicationEventArgs(System.Activities.WorkflowApplication application)
 {
     this.Owner = application;
 }
Example #3
0
        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;
 }
Example #5
0
        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;
 }
Example #8
0
        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;
        }
Example #9
0
        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;
        }
Example #10
0
 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";
 }