我需要有关处理对象的sharepoint日志的建议。
我在查看日志并找到了这些:
意外检测到对先前关闭的SPWeb对象使用SPRequest。 当你完成从它们获得的所有对象时,请关闭SPWeb对象,但不是之前。
Stack trace:
at Microsoft.SharePoint.SPFile.PropertiesCore(Boolean throwException)
at Microsoft.SharePoint.SPFile.get_CheckInComment()
...
Monitorable在此主题结束之前未处理SPRequest对象。
为避免浪费系统资源,请在使用完毕后立即处理此对象或其父对象(如SPSite或SPWeb)。现在将处理此对象。
This SPRequest was allocated at
at Microsoft.SharePoint.Library.SPRequest..ctor()
at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(SPSite site, String name, Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)
at Microsoft.SharePoint.SPWeb.InitializeSPRequest()
at Microsoft.SharePoint.SPWeb.GetFileOrFolderProperties(String strUrl, ListDocsFlags listDocsFlags, Boolean throwException, SPBasePermissions& permMask)
at Microsoft.SharePoint.SPFile.PropertiesCore(Boolean throwException)
at Microsoft.SharePoint.SPFile.get_CheckInComment()
...
我无法弄清楚这两个代码之间的主要区别是什么,因为我以相同的方式处理对象。
For循环有什么问题?
创建日志错误的代码:
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb())
{
string serverRelativeUrl = SPUrlUtility.CombineUrl(web.ServerRelativeUrl, listRelativeUrl);
SPList lst = web.GetList(serverRelativeUrl);
items = lst.Items;
if (items != null)
{
int nb = items.Count;
for (int i = nb - 1; i > -1; i--)
{
currItem =items[i];
if (currItem.File.CheckInComment.Equals(comment1) || currItem.File.CheckInComment.Equals(comment2))
{
publish = true;
}
if(publish)
{
//do stuff with currItem data
}
}
}
}
}
不会产生日志错误的代码:
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb())
{
string serverRelativeUrl = SPUrlUtility.CombineUrl(web.ServerRelativeUrl, listRelativeUrl);
SPList lst = web.GetList(serverRelativeUrl);
items = lst.Items;
if (items != null)
{
foreach(SPListItem currItem in items )
{
if (currItem.File.CheckInComment.Equals(comment1) || currItem.File.CheckInComment.Equals(comment2))
{
publish = true;
}
if(publish)
{
//do stuff with currItem data
}
}
}
}
}
我需要使用For循环,因为我需要删除枚举中的项目,我将无法使用foreach循环。
如果您有任何想法请帮助我。
感谢。
答案 0 :(得分:0)
我会在数字集合中捕获您要删除的项目的ID。数组或对象列表就足够了。
然后在你的foreach之后检查你的收藏是否包含任何ID。然后做你的
for(int i = 0, i < collection.count(), ++i){
#get your item
#delete your item
#call the correct update method on your list.
}
我无法告诉你为什么要处理处理问题。
干杯
Truez