/// <summary>
        /// Continue a paused activity
        /// </summary>
        /// <returns>True if the activity has completed, false if it is paused.</returns>
        public override bool OnResume(IRunState context, IWorkflowEvent resumeEvent)
        {
            var userCompletesEvent = resumeEvent as PromptUserTaskCompletedEvent;

            if (userCompletesEvent != null)
            {
                context.ExitPointId = new EntityRef("promptUserCompleted");

                var userTaskId = userCompletesEvent.UserTaskId;

                var userTask = Entity.Get <PromptUserTask>(userTaskId, PromptUserTask.PromptForTaskStateInfo_Field);
                if (userTask != null)
                {
                    // load the state information in the task back into the workflow run context
                    foreach (var arg in userTask.PromptForTaskArguments)
                    {
                        var input = userTask.PromptForTaskStateInfo.FirstOrDefault(si => si.StateInfoArgument.Id == arg.ActivityPromptArgument.Id);
                        if (input == null)
                        {
                            continue;
                        }

                        context.SetArgValue(input.StateInfoArgument, ActivityArgumentHelper.GetArgParameterValue(input.StateInfoValue));
                    }

                    Entity.Delete(userTask);
                }
            }

            return(true);
        }
Esempio n. 2
0
        public static Dictionary <string, object> GetOutput(this WorkflowRun run)
        {
            var outputArgIds = run.WorkflowBeingRun.OutputArguments.Select(a => a.Id);

            var outputInfo = run.StateInfo.Where(si => outputArgIds.Contains(si.StateInfoArgument.Id));

            var result = new Dictionary <string, object>();

            foreach (var si in outputInfo)
            {
                var outputArg = si.StateInfoArgument;
                var valueArg  = si.StateInfoValue;
                var value     = ActivityArgumentHelper.GetArgParameterValue(valueArg);

                result.Add(outputArg.Name, value);
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// Load up any state from the run.
        /// </summary>
        public void SyncFromRun()
        {
            using (Profiler.Measure("RunStateBase.SyncFromRun"))
            {
                var run = WorkflowRun;

                if (run == null)
                {
                    throw new ArgumentNullException("run");
                }

                var sb = new StringBuilder("");
                sb.AppendFormat("Workflow: {0}. Loading state from workflow run ({1}). Values: ",
                                GetSafeWorkflowDescription(), run.Id);
                sb.Append(Environment.NewLine);

                foreach (var entry in run.StateInfo)
                {
                    var activity   = entry.StateInfoActivity;
                    var argument   = entry.StateInfoArgument;
                    var stateValue = entry.StateInfoValue;

                    var value = ActivityArgumentHelper.GetArgParameterValue(stateValue);

                    if (value != null)
                    {
                        if (activity == null || (run.WorkflowBeingRun != null && activity.Id == run.WorkflowBeingRun.Id))
                        {
                            SetArgValue(argument, value);
                        }
                        else
                        {
                            SetArgValue(activity, argument, value);
                        }

                        var act = "[Empty]";
                        var arg = "[Empty]";
                        if (activity != null)
                        {
                            if (!string.IsNullOrEmpty(activity.Name))
                            {
                                act = activity.Name;
                            }
                            else
                            {
                                act = "[" + activity.Id + "]";
                            }
                        }
                        if (argument != null)
                        {
                            if (!string.IsNullOrEmpty(argument.Name))
                            {
                                arg = argument.Name;
                            }
                            else
                            {
                                arg = "[" + argument.Id + "]";
                            }
                        }

                        sb.AppendLine(string.Format("{0}.{1} ", act, arg));
                    }
                }

                EventLog.Application.WriteInformation(sb.ToString());
            }
        }