SharePoint, comment mettre à jour un élément de liste de services Web en utilisant une clause where?

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

  •  24-10-2019
  •  | 
  •  

Question

J'ai un scénario où je dois mettre à jour un élément de liste, mais je ne sais pas l'ID interne de l'élément de la liste - d'où ce qui suit ne marchera pas pour moi:

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

Au lieu de cela, j'ai un autre champ dans la liste appelée ProcessID:

Je voudrais mettre à jour le statut de livraison où ProcessID = X

Est-ce possible en utilisant des services Web SharePoint.

Une solution que je pense est d'abord faire une sélection pour l'ID en fonction de la ProcessID - puis mise à jour en fonction de cet ID, mais cela semble être une solution fou, sûrement les inventeurs de MOSS CAML auraient fourni un moyen de mettre à jour un élément de liste par des moyens d'une clause where, ou en utilisant un autre domaine pour la filtration plutôt que tout simplement vieux ID?

Merci

Était-ce utile?

La solution

Je ne crois pas que vous pouvez faire une UPDATE WHERE. Vous aurez besoin d'obtenir tous les éléments correspondant à votre donnée ProcessID afin d'obtenir chacun des ID d'élément individuel.

Puisque vous utilisez les services Web, une façon de rendre plus efficace est de vous assurer que vous définissez la propriété ViewFields lorsque vous effectuez votre sélection afin de limiter uniquement les colonnes qui vous intéressent (dans ce cas, ID).

Exemple:

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top