0

VS 2008 中的 SharePoint 2007 顺序工作流

存在一个问题,如果仅指定一个帐户,我的工作流程将完成,但如果指定多个用户,我的工作流程将失败并仅创建第一个任务。

在我的列表中,我有一个名为RequiredReviewers 的必需人员或组列,其中允许在创建时选择多个用户。

我创建了一个包含以下三个活动的顺序工作流:1)OnWorkflowActivated:onWorkflowActivated1、workflowToken、onWorkflowActivated1_Invoked 2)WhileActivity:whileCreateTasks,(此处没有关联令牌),代码条件:WhileTaskIsNotCompleteCondition 3)在此期间,有一个 CreateTask 活动: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;
    }
}

代码将为一位用户正确执行。

代码将导航,并按正确的次数点击 createTask1_methodInvoking 函数。但是,仅创建指定的第一个用户的任务,并且工作流状态将返回“发生错误”,日志中没有任何解释或条目。VS 没有发现任何错误。我已经在复制器中尝试过这个(相对于 while 循环),如果不是更差的话,我得到了相同的结果。

任何帮助表示赞赏。谢谢你。

4

1 回答 1

2

您应该将 sequenceActivity 元素放入 while 块中,并将“创建任务”元素放入其中。然后将“创建任务”元素的 ownerActivityName 属性设置为 sequenceActivity 的名称。

于 2011-12-06T12:30:56.320 回答