如何使用SharePoint Web服务在不迭代的情况下从SharePoint列表中删除所有项目

时间:2011-09-19 17:31:22

标签: sharepoint c#-4.0 sharepoint-2010

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

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

先谢谢。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以使用列表网络服务的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建议的那样重新创建网站。

答案 2 :(得分:0)

以下是我们可以做到的方式:

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

        }

答案 3 :(得分:0)

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