如何使用SharePoint Webservice从SharePoint列表中删除所有项目,而不需要迭代



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

或者是否有一种方法可以获得List的所有属性,然后删除列表并使用先前保存的属性重新创建列表。

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

您可以使用Lists web服务的UpdateListItems方法,但是一次删除所有条目仍然需要很长时间。试试下面的代码片段-

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建议的那样重新创建。

我们可以这样做:

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);
        }

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

最新更新