/// <summary> /// Reassign a task to point to the cloned workflow /// </summary> private static void ReassignTask(IDictionary <long, long> clonedIds, BaseUserTask task) { var displayFormTask = task.AsWritable <DisplayFormUserTask>(); // The available transitions will have been cloned so remove the references to the old workfow if (displayFormTask != null) { var oldTransitions = displayFormTask.AvailableTransitions.Where(t => clonedIds.ContainsKey(t.Id)); displayFormTask.AvailableTransitions.RemoveRange(oldTransitions); if (displayFormTask.UserResponse != null) { displayFormTask.UserResponse = Entity.Get <TransitionStart>(clonedIds[displayFormTask.UserResponse.Id]); } displayFormTask.Save(); return; } var promptUserTask = task.AsWritable <PromptUserTask>(); // The arguments that the old task pointed to will have been cloned. Reposition them. if (promptUserTask != null) { var oldArguments = promptUserTask.PromptForTaskArguments.Where(a => clonedIds.ContainsKey(a.Id)); promptUserTask.PromptForTaskArguments.RemoveRange(oldArguments); promptUserTask.Save(); } }
public void SetUserTask(BaseUserTask userTask) { if (userTask == null) { throw new ArgumentException(); } WorkflowRun.TaskWithinWorkflowRun.Add(userTask); }