【问题标题】:How to Delete all the Items from SharePoint List without iteration using SharePoint Webservice如何使用 SharePoint Webservice 从 SharePoint 列表中删除所有项目而不进行迭代
【发布时间】:2011-11-20 10:52:06
【问题描述】:

我想使用 Lists Web 服务从 SharePoint 列表中删除所有项目, 我知道我们可以通过迭代所有项目来做到这一点,我的问题是,我的列表中有 25000 个项目,想一次性删除它,有没有办法做到这一点?

或者有没有办法获取列表的所有属性,然后删除列表并使用以前保存的属性重新创建列表。

提前致谢。

【问题讨论】:

    标签: sharepoint c#-4.0 sharepoint-2010


    【解决方案1】:

    您可以将列表另存为模板(列表设置 -> 将列表另存为模板),然后删除该列表,然后根据您保存的模板创建一个新列表。

    【讨论】:

    • 聪明的主意,真的 :) 创建模板时请确保不要选中包含内容复选框。
    • 那么我必须保存:ListName、所有列名及其类型和长度?还有什么我必须保存的。
    • @KhuzemaKamaal - 我不确定你的意思。您无需手动保存任何内容。将当前列表保存为模板后,您基于保存的模板创建的每个新列表都将与当前列表相同,但没有内容(相同的列、相同的字段定义、相同的列计算等...)
    【解决方案2】:

    您可以使用 Lists Web 服务的 UpdateListItems 方法,但是一次删除所有项目仍然需要很长时间。 试试下面的 sn-p -

    var batch = new StringBuilder();
    batch.Append("<Batch OnError='Continue' ListVersion='1' ListName='{GUID}'>");
    
    string itemTemplate = "<Method ID='1' Cmd='Delete'><Field Name='ID'>{0}</Field></Method>";
    
    for (int i = 0; i < 300000; i++)
        batch.Append(string.Format(itemTemplate, i));
    
    batch.Append("</Batch>");
    
    //query Lists service
    

    此代码假定您的项目 ID 范围是 0 到 300000 - 这将是您唯一的选择,无需迭代 所有项目(并获取他们的 ID)。然而,有了这么多的项目,即使是 StringBuilder 也会遇到性能问题 问题,更不用说 SharePoint。

    您最好的选择是删除该站点并按照 pmartin 的建议重新创建它。

    【讨论】:

      【解决方案3】:

      这是我们可以简单地做到这一点的方法:

      XmlNode listItems = SharepointUtilities.GetListItems(sharePointCredentials, sharePointCredentials.SharePointListName);
              var nodes = (from nd in listItems.ChildNodes.OfType<XmlNode>() where nd.NodeType.Equals(System.Xml.XmlNodeType.Element) select nd);
              var itemIDs = from nd in nodes.FirstOrDefault().ChildNodes.OfType<XmlNode>() where nd.NodeType.Equals(System.Xml.XmlNodeType.Element) select nd.Attributes["ows_ID"].Value;
              if (itemIDs.Count() > 0)
              {
                  Lists spSrv = GetSharepointListsService(sharePointCredentials);
                  XmlDocument doc = new XmlDocument();
                  XmlElement batchElement = doc.CreateElement("Batch");
                  batchElement.SetAttribute("OnError", "Continue");
                  string batchCommand = "<Method ID='1' Cmd='Delete'><Field Name='ID'>";
                  batchCommand += string.Join("</Field></Method><Method ID='1' Cmd='Delete'><Field Name='ID'>", itemIDs.ToArray());
                  batchCommand += "</Field></Method>";
                  batchElement.InnerXml = batchCommand;
                  spSrv.UpdateListItems(sharePointCredentials.SharePointListName, batchElement);
      
              }
      

      【讨论】:

        【解决方案4】:

        在 DataSheetView 中打开列表,选择所有记录 (ctrl+A) 并删除所有记录。 这是最短的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-16
          • 2014-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多