Question

SharePoint 2007 Sequential Workflow in VS 2008

There is an issue wherein my workflow will complete if only one account is specified, but will fail and create only the first task if multiple users are specified.

In my list, I have a required Person or Group column called RequiredReviewers, in which multiple users are allowed to be selected upon creation.

I've created a sequential workflow with the following three Activities: 1) OnWorkflowActivated: onWorkflowActivated1, workflowToken, onWorkflowActivated1_Invoked 2) WhileActivity: whileCreateTasks, (no token associated here), Code Condition: WhileTaskIsNotCompleteCondition 3) within the while, there is one CreateTask activity: createTask1, taskToken, createTask1_MethodInvoking

public sealed partial class Workflow1 : SequentialWorkflowActivity
{
    public Workflow1()
    {
        InitializeComponent();
    }

    public Guid workflowId = default(System.Guid);
    public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
    public int _numRequiredReviewers = 0;
    public SPFieldUserValueCollection RequiredReviewers = null;

    public Dictionary<Guid, bool> TaskCompleted = new Dictionary<Guid, bool>();
    public const string ApproverGroupName = "Approvers - ATC";
    public SPUserCollection ApproverGroupUsers = null;

    private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
    {
        _numRequiredReviewers = 0;
        RequiredReviewers = (SPFieldUserValueCollection)((SPItem)workflowProperties.Item)["RequiredReviewers"];
        ApproverGroupUsers = workflowProperties.Web.SiteGroups[ApproverGroupName].Users;
    }

    private void createTask1_MethodInvoking(object sender, EventArgs e)
    {
        CreateTask task = sender as CreateTask;

        task.TaskId = Guid.NewGuid();
        task.TaskProperties = new SPWorkflowTaskProperties();

        task.TaskProperties.TaskType = 0;
        task.TaskProperties.Title = string.Format("{0} - {1} - {2}", workflowProperties.List.Title, workflowProperties.Item.File.Name, RequiredReviewers[_numRequiredReviewers].User.Name);
        task.TaskProperties.AssignedTo = workflowProperties.Originator;

        task.TaskProperties.PercentComplete = 0F;

        task.TaskProperties.SendEmailNotification = false; //default email communication;

        task.TaskProperties.ExtendedProperties["User"] = workflowProperties.OriginatorUser.LoginName;


        _numRequiredReviewers++;
        TaskCompleted.Add(task.TaskId, false);

    }

    private void createTasksWhileCondition(object sender, ConditionalEventArgs e)
    {
        e.Result = RequiredReviewers.Count != _numRequiredReviewers;
    }
}

The code will execute appropriately for one user.

The code will navigate through, and hit the createTask1_methodInvoking function the correct number of times. However, only the task of the first user specified is created, and the workflow status will return "Error Occurred" with no explanation or entry within the logs. VS does not catch any errors. I've tried this within a replicator (versus while loop) and I get the same if not worse results.

Any help is appreciated. Thank you.

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top