Tôi đã tạo quy trình làm việc là SharePoint Designer và liên kết nó với một danh sách. Luồng công việc tạo ra một quy trình phê duyệt, do đó SharePoint tạo một tác vụ trong danh sách Nhiệm vụ để người dùng có thể chấp thuận hoặc từ chối.Phê duyệt tác vụ dòng công việc SharePoint bằng cách sử dụng Dịch vụ Web SharePoint/Mô hình Đối tượng
Điều tôi cần làm là phê duyệt hoặc từ chối tác vụ mà không cần mở nhiệm vụ trong danh sách nhiệm vụ. Sau một số nghiên cứu tôi đã tìm ra rằng tôi có thể sử dụng Dịch vụ Web SharePoint. Tuy nhiên tôi cảm thấy bị mất vì tôi không biết dịch vụ nào, ví dụ: Lists.asmx và phương thức nào, ví dụ: UpdateListItems, để gọi.
Ai đó có thể hướng dẫn tôi qua những điều sau đây:
1- Có khả thi để phê duyệt tác vụ quy trình làm việc Dịch vụ web SharePoint không?
2- Bạn có thể chỉ cho tôi một ví dụ về cách phê duyệt một tác vụ hay không, ví dụ: dịch vụ và phương thức nào để gọi và những thông số nào?
Cập nhật
tôi đã được sử dụng XML sau đây để thiết lập các quy trình làm việc để hoàn thành: danh sách
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>";
Nhiệm vụ mục được cập nhật nhưng WorkflowOutcome vẫn trống rỗng và các công việc không di chuyển đến bước tiếp theo.
Còn gì khác nữa?
Cập nhật # 2
Tôi đang nghi ngờ ExtendedProperties của mục danh sách công việc. Đối với một mục được hoàn thành bằng giao diện người dùng, các ExtendedProperties hiển thị ws_TaskStatus = 'Approved'. Tuy nhiên đối với một mục đã được phê duyệt bằng cách sử dụng mã ws_TaskStatus không tồn tại.
Cập nhật # 3
Từ bài đăng MSDN, tôi được yêu cầu sử dụng Luồng công việc.asmx thay vì Lists.asmx.
Tôi đã sử dụng đoạn mã sau:
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 Tôi đang sử dụng để phê duyệt nhiệm vụ là
<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>
Nhưng một lần nữa các nhiệm vụ đã được cập nhật nhưng công việc không di chuyển về phía trước.
Cập nhật # 4
Tôi đã thực hiện một thử nghiệm cuối cùng với mô hình đối tượng máy chủ SharePoint tuy nhiên, một lần nữa, nhiệm vụ được cập nhật nhưng luồng công việc không được chuyển tiếp.
Đây là mã của tôi:
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 cho các liên kết hữu ích –