SharePoint,如何使用where子句从Web服务更新列表项?

时间:2010-06-03 15:54:05

标签: sharepoint moss wss

我有一个场景需要更新列表项,但我不知道列表项的内部ID - 因此以下内容对我不起作用:

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

相反,我在列表中有另一个名为ProcessID的字段:

所以我想更新ProcessID = X

的交付状态

使用SharePoint Web服务是否可行。

我想到的一个解决方案是首先根据ProcessID选择ID - 然后根据此ID进行更新,但这似乎是一个疯狂的解决方案,当然MOSS CAML的发明者会提供一种方法通过where子句的某种方式更新列表项,或使用其他字段进行过滤而不仅仅是普通的旧ID?

由于

1 个答案:

答案 0 :(得分:1)

我不相信你可以做一个UPDATE WHERE。您需要获取与给定ProcessID匹配的所有项目,以获取每个项目ID。

由于您正在使用Web服务,因此提高效率的一种方法是确保在执行select时设置ViewFields属性,以便仅将其限制为您感兴趣的列(在本例中, ID)。

示例:

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;