为了实现批量签核,需在代码中实现完成task并自动生成下一步task的功能.
先在Task列表中找到相应的task记录, 如下代码中是 taskListItem , 且在工作流中有一个 checkbox 域-- Result 来标记签核结果
Hashtable data = new Hashtable();
data[SPBuiltInFieldId.Completed] = "TRUE";
data[SPBuiltInFieldId.PercentComplete] = 1;
data[SPBuiltInFieldId.TaskStatus] =
SPResource.GetString(new CultureInfo((int)taskListItem.Web.Language, false),
"WorkflowTaskStatusComplete", new object[0]);
data[taskListItem.Fields["Result"].Id] = "TRUE";
//data[taskListItem.Fields["Outcome"].Id] = "Completed";
data[SPBuiltInFieldId.Outcome] = "Completed";
data[SPBuiltInFieldId.FormData] = SPWorkflowStatus.Completed;
//data[SPBuiltInFieldId.TaskStatus] = "#"; // This would mean that the task has been Approved
//ht["TaskStatus"] = "@"; // This would mean that the task has been Rejected
web.AllowUnsafeUpdates = true;
SPWorkflowTask.AlterTask(taskListItem, data, true);
另外也可以根据表单记录来找到task然后实现签核
SPSite site = new SPSite("http://servername/");
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["TestList"];
SPListItem item = list.GetItemById(22);
SPWorkflow workflow = item.Workflows[0];
SPWorkflowTask task = workflow.Tasks[0];
Hashtable ht = new Hashtable();
ht[SPBuiltInFieldId.Completed] = "TRUE";
ht["Completed"] = "TRUE";
ht[SPBuiltInFieldId.PercentComplete] = 1.0f;
ht["PercentComplete"] = 1.0f;
ht["Status"] = "Completed";
ht[SPBuiltInFieldId.TaskStatus] = SPResource.GetString(new CultureInfo((int)task.Web.Language, false), Strings.WorkflowStatusCompleted, new object[0]);
ht[SPBuiltInFieldId.WorkflowOutcome] = "Approved";
ht["TaskStatus"] = "Approved";
ht["FormData"] = SPWorkflowStatus.Completed;
web.AllowUnsafeUpdates = true;
SPWorkflowTask.AlterTask((task as SPListItem), ht, true);
}
参考: