如何在Workflow Sharepoint 2010中重新分配工作流任务?

时间:2015-02-13 08:22:03

标签: c# visual-studio-2010 sharepoint sharepoint-2010 workflow

我是SharePoint 2010的初学者。我有一个创建任务的SharePoint 2010工作流程。该任务具有自定义表单,并且在提交表单时将执行自定义代码。但是,如果实际用户无法提交任务,我想将当前任务重新分配给不同的用户。

我在http://sharepoint.aspcode.net/view/635399286724222582137494/correct-way-to-reassign-workflow-tasks-in-visual-studio-wf找到了代码。代码如下:

web.AllowUnsafeUpdates = true;
                        //SPUser Approver = workflowProperties.Web.AllUsers["To"];
                        int tid = onTaskChanged1_AfterProperties1.TaskItemId;
                        SPListItem currentTaskItem = workflowProperties.TaskList.GetItemById(tid);
                        string TaskApproval = (currentTaskItem["Approval"].ToString());
                        if (TaskApproval.Length > 0)
                        {
                            //workflowProperties.LogComment(TaskApproval, "The item was " + TaskApproval + " by " + Approver.Name);
                            if (TaskApproval == "Reassigned")
                            {
                                Hashtable ht = new System.Collections.Hashtable();
                                ht[SPBuiltInFieldId.WorkflowVersion] = 1;
                                ht[SPBuiltInFieldId.AssignedTo] = currentTaskItem["ReassignedTo"];
                                ht["ReassignedTo"] = null;
                                ht["Approval"] = string.Empty;
                                //currentTaskItem.SystemUpdate();
                                SPWorkflowTask.AlterTask(currentTaskItem, ht, false);
                            }
                            else
                            {
                                //perform actions if item is not reassigned
                            }
                        }

我在任务列表中创建了两个字段“Approval”和“ReassignedTo”。在批准字段中,我将值“重新分配”,并且在ReassignedTo字段中是任务被重新分配给的用户的值。

但我得到了这个错误:

  

此任务目前由正在运行的工作流程锁定,但不能   编辑

这是我发现的错误:

http://i.imgur.com/4arY4By.jpg

如何纠正这个问题?是否有必要在执行代码之前先暂停工作流程?

1 个答案:

答案 0 :(得分:0)

终止工作流程(因为它真的挂起了,你可以用它做的不多)并启动一个新工作流程。

现在打开SharePoint 2010 Management Shell(PowerShell)并运行以下(或类似代码):

$s = Get-SPSite("http://intranet")
$w = $s.RootWeb
$i = $w.GetFile("http://intranet/Shared Documents/Instructions.txt").Item
$t = $i.Tasks[0]
$ht = new-object Hashtable
$ht["TaskStatus"] = "Approved"
[Microsoft.SharePoint.Workflow.SPWorkflowTask]::AlterTask($t, $ht, $false)

这将在我的任何测试环境中正常完成批准周期。