我是SharePoint 2010的初学者。我有一个创建任务的SharePoint 2010工作流程。该任务具有自定义表单,并且在提交表单时将执行自定义代码。但是,如果实际用户无法提交任务,我想将当前任务重新分配给不同的用户。
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
如何纠正这个问题?是否有必要在执行代码之前先暂停工作流程?
答案 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)
这将在我的任何测试环境中正常完成批准周期。