SPDocumentLibrary a supporto di item non visibili

Poco tempo fa ho trovato una lista con circa 300K di item, più nello specifico pagine, (non spiego per quale motivo c'erano tutti quegli elementi) di cui circa il 90% erano in Check Out e non visualizzabili nella lista, nè con l'interfaccia di SharePoint nè con l'utilizzo dell'object model (SPList), la cosa buffa è che ero Site Collection Administrator e che la count degli item mi forniva un valore diverso rispetto a quanto invece riuscivo a visualizzare. A questo punto avevo la necessità, sia per riorganizzare la lista che per riportare le performance al top, di cancellare tutti quegli item.

Come dicevo prima l'oggetto SPList era coerente solo con la count ma non con l'accesso ai dati quindi, navigando sulla rete, ho trovato un altro modo per riportare alla normalità la lista.

L'oggetto SPDocumentLibrary consente di accedere alla lista, diciamo a basso livello, vediamo nello specifico caso il codice da me utilizzato:

SPSecurity.RunWithElevatedPrivileges(delegate() {
      using (SPSite site = new SPSite(URL)) {
           using (SPWeb web = site.OpenWeb()) {
                 SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Pagine"];

                 StringBuilder sbDelete = new StringBuilder();
                 sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>               <Batch>");  
                 string command = "<Method><SetList Scope=\"Request\">" + docLib.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar><SetVar Name=\"owsfileref\">{1}</SetVar></Method>";

                  foreach (var item in docLib.CheckedOutFiles) {
                         item.TakeOverCheckOut();
                         sbDelete.Append(string.Format(command, item.ListItemId.ToString(), "/" + item.Url));
                  }

                  sbDelete.Append("</Batch>");
                  String results = web.ProcessBatchData(sbDelete.ToString());
                  docLib.Update();
           }
}}

Month List