SharePoint, come aggiornare un elemento della lista dal servizio Web utilizzando una clausola in cui?

StackOverflow https://stackoverflow.com/questions/2967625

  •  24-10-2019
  •  | 
  •  

Domanda

Ho uno scenario in cui ho bisogno di aggiornare un elemento della lista, ma non so l'ID interno della voce di elenco - da qui il seguente non funziona per me:

batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" +
            "<Field Name='ID'>" + id + "</Field>" + 
            "<Field Name='DeliveryStatus'>" + newStatus.ToString() + "</Field></Method>";

Invece ho un altro campo nella lista chiamata ProcessID:

Quindi vorrei aggiornare lo stato di consegna in cui ProcessID = X

Questo è possibile utilizzando i servizi Web di SharePoint.

Una soluzione che stavo pensando di è quello di fare prima un selezionare per l'ID in base alla ProcessID - quindi aggiornare sulla base di questo ID, ma questa sembra una soluzione pazza, sicuramente gli inventori di MOSS CAML avrebbero fornito un modo per aggiornare un elemento della lista da parte di alcuni mezzi di una clausola in cui, o utilizzando un altro campo per la filtrazione, piuttosto che semplicemente vecchio ID?

Grazie

È stato utile?

Soluzione

Non credo che si può fare un UPDATE WHERE. Avrete bisogno di ottenere tutti gli elementi corrispondenti alla data ProcessID al fine di ottenere ciascuno dei ID singolo elemento.

Dal momento che si sta utilizzando i servizi web, un modo per rendere questo più efficiente è quello di assicurarsi di impostare la proprietà ViewFields quando si esegue la vostra selezione al fine di limitare al solo le colonne a cui è interessato (in questo caso, ID).

Esempio:

XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

ndQueryOptions.InnerXml = "<ViewAttributes Scope='Recursive' />";
ndViewFields.InnerXml = "<FieldRef Name='ID' />";
ndQuery.InnerXml = query;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top