代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

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

  •  1
  • JL. Hans Passant  · 技术社区  · 14 年前

    我有一个场景需要更新列表项,但我不知道列表项的内部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 回复  |  直到 14 年前
        1
  •  1
  •   Kit Menke    14 年前

    我不相信你能在哪里更新。您将需要获取与给定processID匹配的所有项,以便获取每个项ID。

    由于您使用的是Web服务,因此提高效率的一种方法是确保在执行选择时设置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;
    
    推荐文章