Ho creato un flusso di lavoro SharePoint Designer e l'ho associato a un elenco. Il flusso di lavoro crea un processo di approvazione, quindi SharePoint crea un'attività nell'elenco delle attività in modo che l'utente possa approvare o rifiutare.Approvare un'attività del flusso di lavoro SharePoint utilizzando SharePoint Web Services/Object Model
Quello che devo fare è approvare o rifiutare l'attività senza aprire l'attività nell'elenco delle attività. Dopo alcune ricerche ho capito che posso utilizzare SharePoint Web Services. Tuttavia mi sento perso perché non so quale servizio, ad es. Lists.asmx e quale metodo, ad es. UpdateListItems, per chiamare.
Qualcuno può guidarmi attraverso quanto segue:
1- È possibile approvare un'attività di flusso di lavoro Servizi Web di SharePoint?
2- Puoi mostrarmi un esempio di come approvare un'attività, ad es. quale servizio e metodo chiamare e quali dovrebbero essere i parametri?
Aggiornamento
Sono stato con il seguente codice XML per impostare il flusso di lavoro per completare:
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>";
L'operazione elemento elenco viene aggiornato ma il WorkflowOutcome rimane vuoto e il flusso di lavoro non si muove al passo successivo.
Cos'altro mi manca?
Aggiornamento # 2
sto sospettando le ExtendedProperties della voce elenco delle attività. Per un elemento che è stato completato utilizzando l'interfaccia utente, ExtendedProperties mostra ws_TaskStatus = 'Approvato'. Tuttavia, per un articolo che è stato approvato utilizzando il codice ws_TaskStatus non esiste.
Update # 3
Da un posto di MSDN, mi è stato detto di utilizzare la Workflow.asmx al posto del Lists.asmx.
Ho usato il seguente codice:
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);
}
L'XML che sto usando per approvare il compito è
<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>
Ma ancora una volta il compito è stato aggiornato, ma il flusso di lavoro non si mosse in avanti.
Aggiornamento # 4
Ho fatto un ultimo studio con il modello oggetto server SharePoint tuttavia, ancora una volta, il compito è aggiornato, ma il flusso di lavoro non è in movimento in avanti.
Ecco il mio codice:
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 per i collegamenti utili –