Utworzony przepływ pracy to program SharePoint Designer i skojarzony z listą. Przepływ pracy tworzy proces zatwierdzania, dlatego program SharePoint tworzy zadanie na liście Zadania, aby użytkownik mógł je zatwierdzić lub odrzucić.Zatwierdzanie zadania przepływu pracy programu SharePoint za pomocą usług sieci Web programu SharePoint/Model obiektu
Co muszę zrobić, to zatwierdzić lub odrzucić zadanie bez otwierania zadania na liście zadań. Po pewnych badaniach uznałem, że mogę korzystać z usług SharePoint Web Services. Jednak czuję się zagubiony, ponieważ nie wiem, która usługa, np. Lists.asmx i która metoda, np. UpdateListItems, aby zadzwonić.
Czy ktoś może mnie poprowadzić przez:
1- Czy możliwe jest zatwierdzenie przepływu pracy SharePoint Web Services?
2- Możesz pokazać mi przykład zatwierdzania zadania, np. która usługa i metoda wywoływania i jakie powinny być parametry?
Aktualizacja
Używam następujący kod XML, aby ustawić przepływ pracy, aby zakończyć:
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>";
Zadaniem lista pozycja jest aktualizowana, ale WorkflowOutcome pozostaje pusta, a przepływ pracy nie przesunie się do Następny krok.
Czego jeszcze brakuje?
Aktualizacja # 2
Podejrzewam ExtendedProperties elementu listy zadań. W przypadku elementu, który został ukończony przy użyciu interfejsu użytkownika, ExtendedProperties wyświetla ws_TaskStatus = 'Approved'. Jednak element zatwierdzony za pomocą kodu ws_TaskStatus nie istnieje.
Aktualizacja # 3
Z postu MSDN, powiedziano mi używać Workflow.asmx zamiast Lists.asmx.
Użyłem następujący kod:
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 używam zatwierdzić zadanie jest
<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>
Ale znowu zadanie zostało zaktualizowane, ale przepływu pracy nie iść do przodu.
Aktualizacja # 4
zrobiłem jedną ostatnią próbę z obiektowego modelu serwera SharePoint jednak ponownie, zadanie jest aktualizowana, ale przepływu pracy nie posuwa się naprzód.
Oto mój kod:
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 za pomocne linki –