/// <summary> /// Start the activity running /// </summary> /// <returns>True if the activity has completed, false if it is paused. Along with a sequence number of if it is paused</returns> public override bool OnStart(IRunState context, ActivityInputs inputs) { var assignedTo = GetArgumentEntity <Person>(inputs, "inPromptUserForPerson"); var promptMessage = GetArgumentValue <string>(inputs, "inPromptUserMessage"); var activityInstanceAs = ActivityInstance.Cast <PromptUserActivity>(); var userTask = new PromptUserTask { Name = ActivityInstance.Name ?? "User input required", AssignedToUser = assignedTo, TaskStatus_Enum = TaskStatusEnum_Enumeration.TaskStatusNotStarted, UserTaskDueOn = DateTime.UtcNow, // dueDate KeepAfterCompletion = false, // keepTask WaitForNextTask = true, // waitForNext PromptForTaskMessage = promptMessage, PromptForTaskArguments = new EntityCollection <ActivityPrompt>(activityInstanceAs.PromptForArguments) }; // move current state information on to the task for pre-population of any arguments for prompt var argValues = context.GetArgValues().ToList(); foreach (var arg in activityInstanceAs.PromptForArguments) { var argValue = argValues.FirstOrDefault(a => a.Item2.Id == arg.ActivityPromptArgument.Id); if (argValue != null) { var valueArg = ActivityArgumentHelper.ConvertArgInstValue(argValue.Item1, argValue.Item2, argValue.Item3); userTask.PromptForTaskStateInfo.Add(new StateInfoEntry { Name = valueArg.Name, StateInfoActivity = ActivityInstance, StateInfoArgument = argValue.Item2, StateInfoValue = valueArg }); continue; } var emptyArg = ActivityArgumentHelper.ConvertArgInstValue(ActivityInstance, arg.ActivityPromptArgument, null); userTask.PromptForTaskStateInfo.Add(new StateInfoEntry { Name = emptyArg.Name, StateInfoActivity = ActivityInstance, StateInfoArgument = arg.ActivityPromptArgument, StateInfoValue = emptyArg }); } context.SetUserTask(userTask.Cast <BaseUserTask>()); return(false); }