我想删除所有项目从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)并删除所有记录。这是最短的解决方案。