2011-01-27 15 views
6

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); }

Odpowiedz

4

Po wielu próbach i dochodzenia prostu miałem następujący kod roboczy zatwierdzić zadanie

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); 
} 

Podejrzewam, że jest to atrybut ht["TaskStatus"] = "Approved"; że go rozwiązać. W każdym razie spróbuję zawęzić zestaw właściwości, które należy zmienić.

3

Można użyć następującego kodu, który używa listach usługę internetową i metody UpdateListItems.Kluczem jest wykorzystanie CMD = „Średni”

public static XmlNode UpdateListItemApprove() 
{ 
      listservice.Lists listProxy = new listservice.Lists(); 


      string xml = "<Batch OnError='Continue'><Method ID='1' Cmd='Moderate'><Field Name='ID'/><Field Name='FileRef'>http://basesmcdev2/sites/tester1/approvals/KL022030.lic</Field><Field Name=\"_ModerationStatus\" >0</Field></Method></Batch>"; 

      XmlDocument doc = new XmlDocument(); 
      doc.LoadXml(xml); 

      XmlNode batchNode = doc.SelectSingleNode("//Batch"); 

      listProxy.Url = "http://basesmcdev2/sites/tester1/_vti_bin/lists.asmx"; 
      listProxy.UseDefaultCredentials = true; 

      XmlNode resultNode = listProxy.UpdateListItems("approvals", batchNode); 

      return resultNode; 


} 
3

Nie jestem pewien, czy rozwiązanie Madhur za prace nad powiązanego przedmiotu lub na zadaniu, ale aby zaktualizować spróbować zadanie:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<UpdateListItems 
xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
<listName>Tasks</listName> 
<updates> 
<Batch OnError="Continue" ListVersion="1"> 
<Method ID="1" Cmd="Update"> 
<Field Name="ID">199</Field> 
<Field Name="Outcome">Approved</Field> 
<Field Name="Status">Completed</Field> 
<Field Name="ows_TaskStatus">Approved</Field> 
</Method> 
</Batch> 
</updates> 
</UpdateListItems> 
</soap:Body> 
</soap:Envelope> 

Informacje o usłudze:

http://objectmix.com/sharepoint/800144-updatelistitems-web-service-does-not-update-field.html

informacji na polu zatwierdzonym:

http://social.msdn.microsoft.com/Forums/en/sharepointworkflow/thread/6712d379-2df6-4223-9a29-b2e60493f1b6

http://social.msdn.microsoft.com/Forums/en/sharepointworkflow/thread/3dc95190-cc61-4067-ac35-2d1a82fad499

+0

+1 za pomocne linki –

Powiązane problemy