Example #1
0
 public void ResumeBookmark(string bookmarkName, object value)
 {
     try
     {
         Log.Verbose("[workflow] Resume workflow at bookmark '" + bookmarkName + "'");
         if (isCompleted)
         {
             throw new ArgumentException("cannot resume bookmark on completed workflow!");
         }
         // Log.Debug(String.Format("Workflow {0} resuming at bookmark '{1}' value '{2}'", wfApp.Id.ToString(), bookmarkName, value));
         Task.Run(() =>
         {
             System.Threading.Thread.Sleep(50);
             try
             {
                 wfApp.ResumeBookmark(bookmarkName, value);
             }
             catch (Exception ex)
             {
                 Log.Error(ex.ToString());
             }
         });
         state = "running";
         // Log.Debug(String.Format("Workflow {0} resumed bookmark '{1}' value '{2}'", wfApp.Id.ToString(), bookmarkName, value));
         _ = Save();
     }
     catch (Exception)
     {
         throw;
     }
 }
Example #2
0
 public void ResumeBookmark(string bookmarkName, object value)
 {
     try
     {
         Log.Verbose("[workflow] Resume workflow at bookmark '" + bookmarkName + "'");
         if (isCompleted)
         {
             throw new ArgumentException("cannot resume bookmark on completed workflow!");
         }
         var _ref = (this as IWorkflowInstance);
         foreach (var runner in Plugins.runPlugins)
         {
             if (!runner.onWorkflowResumeBookmark(ref _ref, bookmarkName, value))
             {
                 throw new Exception("Runner plugin " + runner.Name + " declined running workflow instance");
             }
         }
         // Log.Debug(String.Format("Workflow {0} resuming at bookmark '{1}' value '{2}'", wfApp.Id.ToString(), bookmarkName, value));
         Task.Run(() =>
         {
             System.Threading.Thread.Sleep(50);
             try
             {
                 wfApp.ResumeBookmark(bookmarkName, value);
             }
             catch (Exception ex)
             {
                 Log.Error(ex.ToString());
             }
         });
         state = "running";
         // Log.Debug(String.Format("Workflow {0} resumed bookmark '{1}' value '{2}'", wfApp.Id.ToString(), bookmarkName, value));
         Save();
     }
     catch (Exception)
     {
         throw;
     }
 }
Example #3
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;
        }