/// <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();
            }
        }
示例#2
0
        public void SetUserTask(BaseUserTask userTask)
        {
            if (userTask == null)
            {
                throw new ArgumentException();
            }

            WorkflowRun.TaskWithinWorkflowRun.Add(userTask);
        }