我有一个url列表(内容类型使用url)。现在,内容类型被部署在web上,我需要循环这些内容类型并在每个列表中执行一些操作,但是打开新的SPWeb实例--每个循环都是资源密集型的。
是否有内置方法来告诉我这个URL是否属于某些SPWeb对象?
示例:
SPWeb可能是
使用内容类型使用链接,如:
如您所见,对于最初的3种用法,我不需要打开新的SPWeb
发布于 2010-03-18 13:52:24
您的代码将在什么上下文中运行?
我的意思是,看起来您想要编写一些代码,这些代码将作为部署过程的一部分运行,这意味着它只会偶尔运行。
如果是这样的话,您的代码是否优化以提高性能是否重要?在我看来,最好还是坚持一个简单的解决方案,打开每个SPWeb,而不是过多地担心性能。
如果您需要遍历数百个或数千个站点,这将需要一些时间。您的代码是否需要十分钟,还是十五分钟,这并不重要。
如果这将多次运行,而且经常运行,那么性能将更成问题。
发布于 2010-03-18 10:55:40
据我所知,这种事情没有内置的方法。
我建议您为此创建一个SPWeb扩展方法。
下面是让您开始工作的代码片段(未进行100%测试):
public static class SPWebExtensions
{
public static bool UrlBelongsToweb(this SPWeb web, string url)
{
Uri uriWeb = new Uri(web.Url);
if (uriWeb.LocalPath.ToLower() == url.ToLower())
return true;
if (!url.ToLower().StartsWith(uriWeb.LocalPath.ToLower()))
return false;
foreach (SPWeb subWeb in web.Webs)
{
Uri uriSub = new Uri(subWeb.Url);
if (url.ToLower().StartsWith(uriSub.LocalPath.ToLower()))
return false;
subWeb.Dispose();
}
return true;
}
}你可以用它来做这样的事情:
bool urlBelongsToWeb = web.UrlBelongsToweb("/web2/Lists/Documents");web是您当前的SPWeb对象的位置。
或者,如果您希望针对SiteCollection中的特定列表,请使用SPSiteDataQuery来获取它们,并对它们执行神奇的操作。
https://stackoverflow.com/questions/2468918
复制相似问题