首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有内置方法来判断特定的SPWeb是否属于此SPWeb或其他SPWeb?

是否有内置方法来判断特定的SPWeb是否属于此SPWeb或其他SPWeb?
EN

Stack Overflow用户
提问于 2010-03-18 10:11:50
回答 2查看 247关注 0票数 0

我有一个url列表(内容类型使用url)。现在,内容类型被部署在web上,我需要循环这些内容类型并在每个列表中执行一些操作,但是打开新的SPWeb实例--每个循环都是资源密集型的。

是否有内置方法来告诉我这个URL是否属于某些SPWeb对象?

示例:

SPWeb可能是

  • http://server/web1
  • http://server/web2
  • http://server/web2/subweb1
  • http://server/web2/subweb2

使用内容类型使用链接,如:

  • /网页2/页
  • /web2 2/列表/任务
  • /web2 2/清单/文件
  • /web2 2/subweb1 1/列表/任务
  • ..。

如您所见,对于最初的3种用法,我不需要打开新的SPWeb

EN

回答 2

Stack Overflow用户

发布于 2010-03-18 13:52:24

您的代码将在什么上下文中运行?

我的意思是,看起来您想要编写一些代码,这些代码将作为部署过程的一部分运行,这意味着它只会偶尔运行。

如果是这样的话,您的代码是否优化以提高性能是否重要?在我看来,最好还是坚持一个简单的解决方案,打开每个SPWeb,而不是过多地担心性能。

如果您需要遍历数百个或数千个站点,这将需要一些时间。您的代码是否需要十分钟,还是十五分钟,这并不重要。

如果这将多次运行,而且经常运行,那么性能将更成问题。

票数 1
EN

Stack Overflow用户

发布于 2010-03-18 10:55:40

据我所知,这种事情没有内置的方法。

我建议您为此创建一个SPWeb扩展方法。

下面是让您开始工作的代码片段(未进行100%测试):

代码语言:javascript
复制
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;
  }
}

你可以用它来做这样的事情:

代码语言:javascript
复制
 bool urlBelongsToWeb = web.UrlBelongsToweb("/web2/Lists/Documents");

web是您当前的SPWeb对象的位置。

或者,如果您希望针对SiteCollection中的特定列表,请使用SPSiteDataQuery来获取它们,并对它们执行神奇的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2468918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档