我想使用Lists webservice从SharePoint列表中删除所有项目, 我知道我们可以通过迭代所有项目来做到这一点,我的问题是,我的列表中有25000个项目并希望一次性删除它,有没有办法做到这一点?
或者有没有办法获取List的所有属性然后删除列表并使用以前保存的属性重新创建列表。
先谢谢。
答案 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)并删除所有记录。 这是最短的解决方案。