【问题标题】:Deleting list items via ProcessBatchData()通过 ProcessBatchData() 删除列表项
【发布时间】:2010-06-14 09:04:46
【问题描述】:

您可以构建一个批处理字符串以从 SharePoint 列表中删除所有项目,如下所示:

1: //创建新的StringBuilder 2:StringBuilder批处理字符串=新的StringBuilder(); 3: 4: //将正文添加到字符串生成器 5:batchString.Append(""); 6: 7://将每个项目添加到批处理字符串并给它一个命令删除 8:foreach(itemCollection中的SPListItem项) 9:{ 10: //创建一个新的方法部分 11:batchString.Append(""); 12: //插入listid以知道从哪里删除 13:batchString.Append("" + Convert.ToString(item.ParentList.ID) + ""); 14: //要删除的项目 15:batchString.Append("" + Convert.ToString(item.ID) + ""); 16: //设置你想要执行的动作 17:batchString.Append(“删除”); 18: //关闭方法部分 19:batchString.Append(""); 20:} 21: 22: //关闭批处理部分 23:批处理字符串。附加(“”); 24: 25: //执行批处理 26: SPContext.Current.Web.ProcessBatchData(batchString.ToString());

我能想到的唯一缺点就是你删除的所有项目都会被放入回收站。我怎样才能防止这种情况发生?

我还找到了如下解决方案:

// web 是您的列表所属的 SPWeb 对象 // 在开始删除之前 web.Site.WebApplication.RecycleBinEnabled = false; // 当你完成后重新启用它 web.Site.WebApplication.RecycleBinEnabled = true; 参考 [这里](http://www.entwicklungsgedanken.de/2008/04/02/how-to-speed-up-the-deletion-of-large-amounts-of-list-items-within-sharepoint/)

但该解决方案的缺点是只有将来的删除不会被发送到回收站,但它会删除所有现有的项目以及用户不想要的。有什么想法可以防止不删除现有项目?

非常感谢,

TQT

【问题讨论】:

    标签: sharepoint sharepoint-2007


    【解决方案1】:

    我认为使用批量更新无法绕过回收站,但是您可以将代码修改为类似的内容

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

    【讨论】:

    • 感谢您的评论,但是,当用户想要删除大量数据时,您的代码会出现大问题。这需要很长时间才能完成,所以性能很差。
    • 嗨,是的,我知道,但是您已经在实例化每个项目以获取 id 和父列表?可能对您有用的另一件事是运行提升的代码,以便项目不会在最终用户的回收站上,而是在系统的帐户上。只是想法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多