/// <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); }
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); }
/// <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()); } }