代码之家  ›  专栏  ›  技术社区  ›  Kit Menke

获取spweb进行spaudientry

  •  0
  • Kit Menke  · 技术社区  · 16 年前

    我目前正在构建一个应用程序,它将解析网站集中的所有审计条目,并向用户发送一封漂亮的电子邮件。

    我的问题是,这些电子邮件应该基于一个特定的网站(本质上是一封总结每个子网站所发生变化的电子邮件)。显然,SPAudientry对象中除了doclocation属性外,没有关于它来自的Web的信息。

    这意味着我可以获取以下任意文档位置(itemtype=document,event=update):

    • sites/mysitecollection/documents/这是一个test.doc
    • 网站/mysitecollection/reporting templates/audit.xml
    • 网站/mysitecollection/列表/报告元数据/1.000
    • 网站/mysitecollection/mysubsite1/lists/announcements/2.000
    • 网站/mysitecollection/mysubsite1/template documents/sampletesmail.doc

    我想如果有必要的话,我可以通过使用spsite.allwebs.names从URL中找到这个网站。

    问:我如何确定一个特定的spaudientry来自哪个spweb?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Colin    16 年前

    我可能有一些东西(非常粗糙),但它有点取决于你的子网嵌套的深度。它们的深度是否只有1级(即site/web1、site/web2或site/web1/web1_1等)。您是否查看了SPAudientry对象的eventData XML中是否有scopeid?找到一篇与您描述的类似的文章,该文章使用EventData XML中的scopeid进行一些匹配:

    Article

    另外,下面的文章描述了使用SPSiteDataQuery中的itemID(guid)来检索项目,然后使用结果数据(webid和listid)打开特定的Web/列表。一次检索一个项目可能有点效率低下,但它是…

    Post

        2
  •  0
  •   Kit Menke    16 年前

    我的解决方案以伪代码概述如下:

    1. 获取我的网站集中所有网站名称的集合: _allWebNames = site.AllWebs.Names;
    2. 因为我只关心站点内的顶级SPWeb,所以我解析spauditentry.doclocation以获取可能的Web名称。(例如:将返回“sites/mysitecollection/mysubsite1/lists/announcements/2.000”中的“mysubsite1”)。

      string webName = GetPossibleWebName(SERVER_RELATIVE_URL, docLocation);

    3. 然后搜索我的数组以查看Web名称是否匹配。

      index = Array.BinarySearch<string>(_allWebNames, webName, new ServiceSiteNameComparer());

    4. 如果我找到匹配,那么我可以使用 SPSite.OpenWeb(string) 打开网页并获取ID。
    推荐文章