2010-06-14 43 views
0

你可以建立一個批處理字符串從SharePoint列表這樣刪除的所有項目:刪除通過ProcessBatchData()列表中的項目

 
    1: //create new StringBuilder 
    2: StringBuilder batchString= new StringBuilder(); 
    3: 
    4: //add the main text to the stringbuilder 
    5: batchString.Append(""); 
    6: 
    7: //add each item to the batch string and give it a command Delete 
    8: foreach (SPListItem item in itemCollection) 
    9: { 
10: //create a new method section 
11: batchString.Append(""); 
12: //insert the listid to know where to delete from 
13: batchString.Append("" + Convert.ToString(item.ParentList.ID) + ""); 
14: //the item to delete 
15: batchString.Append("" + Convert.ToString(item.ID) + ""); 
16: //set the action you would like to preform 
17: batchString.Append("Delete"); 
18: //close the method section 
19: batchString.Append(""); 
20: } 
21: 
22: //close the batch section 
23: batchString.Append(""); 
24: 
25: //preform the batch 
26: SPContext.Current.Web.ProcessBatchData(batchString.ToString()); 

,我能想到的權唯一的缺點知道的是,所有的您刪除的項目將被放入回收站。我怎樣才能防止呢?

我也找到了解決方法如下圖所示:

 
// web is a the SPWeb object your lists belong to 

// Before starting your deletion 
web.Site.WebApplication.RecycleBinEnabled = false; 

// When your are finished re-enable it 
web.Site.WebApplication.RecycleBinEnabled = true; 

Ref [Here](http://www.entwicklungsgedanken.de/2008/04/02/how-to-speed-up-the-deletion-of-large-amounts-of-list-items-within-sharepoint/) 

但是該解決方案的缺點是,只有未來的缺失將不會被髮送到回收站,但它會刪除所有現有項目,以及哪些用戶做不想。任何想法,以防止不刪除現有的項目?

提前許多感謝,

TQT

回答

0

我不認爲有可能使用批量更新,但是你可以修改你的代碼是這樣的

foreach (SPListItem item in itemCollection) 
    { 
     item.Delete(); //this wont go to the recycle bin 
     //or if you need to send it to the recycle bin then you can use 
     item.Recycle(); 


    } 
+0

感謝繞過回收站對於你的評論, 但是,當用戶想要刪除大量數據時,你的代碼會遇到很大的問題。這將需要很長時間才能完成,因此這是糟糕的表現。 – 2010-06-17 03:38:45

+0

嗨,是的,我知道,但是你已經實例化每個項目以獲得id和父列表? 另一件可能適用於您的事情是運行提升的代碼,以便項目不會在最終用戶回收站中,而是在系統的帳戶上。只是想法:) – Renzo 2010-06-17 08:36:34