/// <summary>
 /// Starts the specified workflow.
 /// </summary>
 /// <param name="workflow">The workflow.</param>
 public void Start(Models.Domain.Workflow.WorkflowInstance workflow)
 {
     Log.Debug($"Start({workflow})");
     //TODO: Block concurrent calls to Start/Process?
     Unloaded.Reset();
     Result      = new WorkflowResult();
     Application = CreateWorkflowApplication(workflow);
     Application.Run();
 }
 /// <summary>
 /// Starts the specified workflow.
 /// </summary>
 /// <param name="workflow">The workflow.</param>
 public void Start(IWorkflow workflow)
 {
     Log.DebugFormat("Start({0})", workflow);
     //TODO: Block concurrent calls to Start/Process?
     Unloaded.Reset();
     Result      = new WorkflowResult();
     Application = CreateWorkflowApplication(workflow);
     Application.Run();
 }
        /// <summary>
        /// Processes the specified workflow, executing the specified <paramref name="transition"/> with the given <paramref name="request"/>
        /// </summary>
        /// <param name="workflow">The workflow.</param>
        /// <param name="transition">The transition.</param>
        /// <param name="request">The request.</param>
        public void Process(IWorkflow workflow, WorkflowTransition transition, WorkflowRequest request)
        {
            Log.DebugFormat("Process({0}, {1}, {2})", workflow, transition, request);
            //TODO: Block concurrent calls to Start/Process?
            Unloaded.Reset();
            Result      = new WorkflowResult();
            Application = CreateWorkflowApplication(null);
            if (!CheckForRunnableInstance())
            {
                Application.Load(workflow.WorkflowInstanceId);
            }
            else
            {
                Application.LoadRunnableInstance();
            }

            Application.ResumeBookmark(transition.Name, request);
        }
        /// <summary>
        /// Processes the specified workflow, executing the specified <paramref name="transition"/> with the given <paramref name="request"/>
        /// </summary>
        /// <param name="workflow">The workflow.</param>
        /// <param name="transition">The transition.</param>
        /// <param name="request">The request.</param>
        public void Process(WorkflowInstance workflow, WorkflowTransition transition, WorkflowRequest request)
        {
            Log.Debug($"Process({workflow}, {transition}, {request})");
            //TODO: Block concurrent calls to Start/Process?
            Unloaded.Reset();
            Result      = new WorkflowResult();
            Application = CreateWorkflowApplication(workflow, false);
            //UnloadApplication(Application);
            if (!CheckForRunnableInstance())
            {
                Application.Load(workflow.InstanceId);
            }
            else
            {
                Application.LoadRunnableInstance();
            }

            Application.ResumeBookmark(transition.Name, request);
        }