我已經創建了一個工作流,即SharePoint Designer並將其與列表關聯。該工作流程會創建審批流程,因此SharePoint會在「任務」列表中創建一項任務,以便用戶批准或拒絕。使用SharePoint Web服務/對象模型批准SharePoint工作流任務
我需要做的是在不打開任務列表中的任務的情況下批准或拒絕任務。經過一番研究,我發現我可以使用SharePoint Web Services。然而,我不知道哪一種服務,例如Lists.asmx,以及哪種方法,例如UpdateListItems,來調用。
有人可以通過以下方式指導我:
1-批准工作流任務SharePoint Web Services是否可行?
2-您能否告訴我一個如何批准任務的例子,例如需要調用哪種服務和方法以及參數應該是什麼?
更新
我一直在使用下面的XML設置工作流程來完成:
batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" // Also used Moderate
+ "<Field Name='ID'>115</Field>"
+ "<Field Name='Status'>Completed</Field>"
+ "<Field Name='FormData'>Completed</Field>" // Also used Approved
+ "<Field Name='WorkflowOutcome'>Approved</Field>"
+ "<Field Name='Completed'>True</Field>"
+ "<Field Name='PercentComplete'>1</Field>"
+ "<Field Name='_ModerationStatus'>0</Field>"
+ "</Method>";
任務列表項更新,但仍然WorkflowOutcome空,工作流不動的下一步。
我還缺少什麼?
更新#2
我懷疑任務列表項的ExtendedProperties。對於使用UI完成的項目,ExtendedProperties顯示ws_TaskStatus ='Approved'。但是,對於使用代碼ws_TaskStatus批准的項目不存在。
更新#3
從MSDN後,我被告知使用Workflow.asmx而不是Lists.asmx的。
我用下面的代碼:
WorkflowService.Workflow listProxy = new WorkflowService.Workflow();
listProxy.Url = "http://<server_name>/_vti_bin/workflow.asmx";
listProxy.UseDefaultCredentials = true;
int todoID = 118;
Guid tasklistID = new Guid("{79ABFDE7-0398-4AD7-918A-0D40204E7726}");
string itemURL = "http://<server_name>/TestLibrary/volshext.log";
XmlDocument taskData = new XmlDocument();
taskData.Load(@"..\..\TaskData.xml");
try
{
XmlNode response = listProxy.AlterToDo(itemURL, todoID, tasklistID, taskData.DocumentElement);
Console.WriteLine(response.InnerText);
}
我使用批准該任務的XML是
<my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD" >
<my:TaskStatus>#</my:TaskStatus>
<my:Comments />
<my:DelegateTo />
<my:NewDescription>Please approve Workflow Demo</my:NewDescription>
<my:NewDueDate />
<my:RequestTo />
<my:Decline>0</my:Decline>
<my:dcr>0</my:dcr>
<my:Status>Completed</my:Status>
</my:myFields>
但同樣的任務更新,但工作流程並沒有向前推進。
更新#4
我已經然而,再次提出與SharePoint服務器對象模型中的一個庭審最後,任務更新,但工作流程不前進。
這裏是我的代碼:
SPSite site = new SPSite("http://sitenamehere/");
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Shared Documents"];
//SPListItem item = list.GetItemById(18);
SPListItem item = list.GetItemByUniqueId(new Guid("5300d16e-94f8-4338-8206-4a57ab7c369b"));
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["TaskStatus"] = "#";
//ht["ows_TaskStatus"] = "Approved";
//ht["FormData"] = SPWorkflowStatus.Completed;
//ht["Outcome"] = "Approved";
//task.ModerationInformation.Status = SPModerationStatusType.Approved;
web.AllowUnsafeUpdates = true;
SPWorkflowTask.AlterTask((task as SPListItem), ht, true);
}
+1對於有用的鏈接 – 2011-02-01 12:51:22