Monday, November 12, 2012

Delete All Items from List or Library Programmatically

At times, we may have to delete all items from SharePoint list or library. We can get it done by going to "Manage Content and Structure" option as in my another article How to Remove All responses from SharePoint Survey

There may be situations, where we've to delete all items from SharePoint list programmatically. Here are the code snippets to achieve the same.

Delete All Items from SharePoint List or Library using PowerShell:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue 

$url = "http://sharepoint.crescent.com/"

<# for MOSS 2007 Compatibility use:
$site = new-object Microsoft.SharePoint.SPSite($URL)
$web = $site.OpenWeb()  
#>

#Get the web object
$web = Get-SPWeb $url

#Get the List
$list = $web.Lists["Tasks"]

#Get All List Items
$listItems = $list.Items

# Delete All List Items - This will delete all items - including items from sub-folders.
$listItems | ForEach { $list.GetItemById($_.Id).Delete()  }  #ForEach can be replaced with %

<# Traditional Way of deleting Items from end to avoid: "Collection was modified" Error
for ($i=$listItems.Count-1;$i -ge 0; $i-–)
{
Write-Host("Deleted: " + $listItems[$i].name)
 $listItems[$i].Delete()
}
#>

Filter and Delete List Items:
We can filter the list items using CAML and perform the same delete operation. Here it goes:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue 

$url = "http://sharepoint.crescent.com/"

$web = Get-SPWeb $url

#Get the List
$list = $web.Lists["Tasks"]

#CAML Filter Query
$CAMLQuery="<Where><Eq><FieldRef Name='Status' /><Value Type='Choice'>Completed</Value></Eq></Where>"

$SPQuery=New-Object Microsoft.SharePoint.SPQuery
$SPQuery.ViewAttributes = "Scope='Recursive'"  #Get all items from Folders also!
$SPQuery.Query=$CAMLQuery
$SPQuery.RowLimit  = 10000; 

#Get the List items based on Filter 
$result=$list.GetItems($SPQuery)

#Delete the items from list
$result | % { $list.GetItemById($_.Id).Delete()  }
Delete All Items from SharePoint list Programmatically using C# Object Model:
Same code can be re-written in C# to delete list items programmatically.

           using (SPSite oSPsite = new SPSite("http://sharepoint"))
               {
                    using (SPWeb oSPWeb = oSPsite.OpenWeb())
                    {
                        oSPWeb.AllowUnsafeUpdates = true;

                        // Get the List
                        SPList oSPList = oSPWeb.Lists["Tasks"];

                        for (int i= oSPList.ItemCount-1; i >=0; i--)
                        { 
                            oSPList.Items[i].Delete(); 
                        }

                        oSPWeb.AllowUnsafeUpdates = false;

                    }
                }


Bulk Delete using ProcessBatchData:
   using (SPSite oSPsite = new SPSite("http://sharepoint"))
               {
                    using (SPWeb oSPWeb = oSPsite.OpenWeb())
                    {
                        // Get the List
                        SPList oSPList = oSPWeb.Lists["Tasks"];

                        StringBuilder batchString = new StringBuilder();
                        batchString.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");

                        foreach (SPListItem item in oSPList.Items)
                        {
                            batchString.Append("<Method>");
                            batchString.Append("<SetList Scope=\"Request\">" + Convert.ToString(item.ParentList.ID) + "</SetList>");
                            batchString.Append("<SetVar Name=\"ID\">" + Convert.ToString(item.ID) + "</SetVar>");
                            batchString.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
                            batchString.Append("</Method>");
                        }

                        batchString.Append("</Batch>");
                        oSPWeb.ProcessBatchData(batchString.ToString());

                    }
                }
PowerShell script to delete in Bulk from SharePoint list:
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

Function global:Get-SPWeb($url)
{
  $site= New-Object Microsoft.SharePoint.SPSite($url)
        if($site -ne $null)
            {
               $web=$site.OpenWeb();
        
            }
    return $web
}

$WebURL ="http://sharepoint.crescent.com/sites/operations/us/"
$ListName ="DSF_Transactions"
$BatchSize = 1000  #Lets delete 1000 items at a time

#Get the web object
$web = Get-SPWeb $WebURL
 
#Get the List
$list = $web.Lists[$ListName]


while ($list.ItemCount -gt 0)
{

    Write-host "Total Number of Items:"$list.itemcount
    
    $StringBuilder = New-Object System.Text.StringBuilder
    $StringBuilder.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>") > $null

    $BatchCount=0
    
    foreach($item in $List.Items)
    {
    $StringBuilder.Append("<Method><SetList Scope=`"Request`">$($list.ID)</SetList><SetVar Name=`"ID`">$($item.ID)</SetVar><SetVar Name=`"Cmd`">Delete</SetVar></Method>") > $null
    $BatchCount++
        if($BatchCount -ge $BatchSize) { break } #Break from this foreach loop
    } 

    $stringbuilder.Append("</ows:Batch>") > $null

    $web.ProcessBatchData($StringBuilder.ToString()) > $null
    $list.Update()
}
Don't forget to Add, when you are deleting from a library:
<SetVar Name=`"owsfileref`">$($item.File.ServerRelativeUrl)</SetVar>
Deleting SharePoint list items using ProcessBatchData method sends items to Recycle bin!
Delete Vs Recycle: Will the Deleted Items goes to Recycle bin?
No! Delete method doesn't send files to Recycle bin. But the Recycle Method does! So, call the Recycle method , if you want the deleted items to be sent to Recycle bin.

using (SPWeb web = siteColl.AllWebs["Sales"])
{
  SPList list = web.Lists["Tasks"];
  SPListItem item = list.Items[GUID];
  item.Recycle();
}
You can also: Save list as template (without content), Delete the list and Re-create from the list template! - Provided if there is no workflow/event receiver associated with the list.



You might also like:
SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Five Challenges in SharePoint Security
...And How to Solve Them. Free White Paper
*Sponsored


Check out these SharePoint products:

No comments :

Post a Comment

Please Login and comment to get your questions answered!

You might also like:

Related Posts Plugin for WordPress, Blogger...