If you’re trying to update a task item that is linked to a running workflow using code similar to
public UpdateTaskItem(SPList taskList, int identifier, string newValue) { taskItem = taskList.GetItemById(identifier); // Update task item taskItem["fieldname"] = newValue; taskItem.Update(); } |
and receive an error stating This task is currently locked by a running workflow and cannot be edited, a simple fix is to update the built in field WorkflowVersion to the value 1 prior to calling the Update method.
public UpdateTaskItem(SPList taskList, int identifier, string newValue) { taskItem = taskList.GetItemById(identifier); // Update task item taskItem["fieldname"] = newValue; Guid workflowInstanceId = new Guid(taskItem[Microsoft.SharePoint.SPBuiltInFieldId.WorkflowInstanceID].ToString()); SPWorkflow workflow = taskItem.Workflows[workflowInstanceId]; if (workflow != null && !workflow.IsLocked) { taskItem[Microsoft.SharePoint.SPBuiltInFieldId.WorkflowVersion] = 1; } taskItem.Update(); } |
Setting this field to 1 allows the task item to be updated. There’s a check performed by SharePoint to see if this field’s value is set to 1 and when it’s not, the This task is currently locked by a running workflow and cannot be edited error is thrown.