开发者

Error Occurred Creating Second Task within While loop - VS SharePoint Workflow

开发者 https://www.devze.com 2023-03-04 12:39 出处:网络
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

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.


You should place sequenceActivity element into while block and put your "Create Task" element to it. Then set ownerActivityName property of "Create Task" element to name of sequenceActivity.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号