Как удалить все элементы из списка SharePoint без итерации, используя SharePoint Webservice - PullRequest
0 голосов
/ 19 сентября 2011

Я хотел удалить все элементы из списка SharePoint с помощью веб-службы Lists, я знаю, что мы можем сделать это путем итерации всех элементов, моя проблема в том, что у меня есть 25000 элементов в моем списке и я хочу удалить его за один раз, есть ли способ сделать это?

или есть способ получить все атрибуты списка, затем разделить список и заново создать список с ранее сохраненными атрибутами.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 19 сентября 2011

Вы можете сохранить список как шаблон (Настройки списка -> Сохранить список как шаблон), затем удалить список, а затем создать новый список на основе сохраненного вами шаблона.

0 голосов
/ 24 февраля 2014

Откройте список в DataSheetView, выберите все записи (ctrl + A) и удалите все записи.Это самое короткое решение.

0 голосов
/ 22 сентября 2011

Вот способ, которым мы можем сделать это просто:

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

        }
0 голосов
/ 20 сентября 2011

Вы можете использовать метод UpdateListItems веб-службы Lists, однако удаление всех элементов за один раз займет много времени. Попробуйте следующий фрагмент -

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

Этот код предполагает, что диапазон идентификаторов вашего предмета составляет от 0 до 300000 - это будет ваш единственный вариант без итерации все предметы (и их удостоверение личности). Однако с таким количеством элементов даже StringBuilder будет работать проблемы, не говоря уже о SharePoint.

Лучше всего удалить сайт и воссоздать его так, как предложил pmartin.

...