SharePoint, ¿cómo actualizar un elemento de lista del servicio web utilizando una cláusula Where?

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

  •  24-10-2019
  •  | 
  •  

Pregunta

Tengo un escenario en el que necesito actualizar un elemento de la lista, pero no conozco la identificación interna del elemento de la lista, por lo tanto, lo siguiente no funcionará para mí:

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

En su lugar, tengo otro campo en la lista llamado ProcessID:

Por lo tanto, me gustaría actualizar el estado de entrega donde ProcessId = x

¿Es esto posible utilizando los servicios web de SharePoint?

Una solución en la que estaba pensando es hacer una selección primero para la ID basada en ProcessId: luego actualizar en función de esta ID, pero esto parece una solución loca, seguramente los inventores de Moss Caml habrían proporcionado una forma de actualizar una lista ítem por algún medio de una cláusula Where, o usar otro campo para la filtración en lugar de simplemente una identificación antigua.

Gracias

¿Fue útil?

Solución

No creo que puedas hacer una actualización donde. Deberá obtener todos los elementos que coincidan con su procesamiento dado para obtener cada una de las ID de elemento individuales.

Dado que está utilizando servicios web, una forma de hacer que esto sea más eficiente es asegurarse de establecer la propiedad de visualización cuando realiza su selección para limitarlo solo a las columnas que está interesado (en este caso, ID).

Ejemplo:

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top