我目前正在构建一个应用程序,它将解析网站集中的所有审核条目,并向用户发送一封漂亮的电子邮件。
我的问题是电子邮件应该基于特定的网络(本质上是一封电子邮件,总结了每个子网站发生的变化)。显然,除了DocLocation属性之外,SPAuditEntry对象中没有关于它来自Web的信息。
这意味着我可以获得以下任何DocLocations(ItemType = Document,Event = Update):
我想如果必须的话,我可以通过使用SPSite.AllWebs.Names从URL中找出网页。
问:我如何确定特定SPAuditEntry来自哪个SPWeb?
答案 0 :(得分:0)
我可能有一些东西(非常粗糙),但它有点取决于您的子网的嵌套深度。它们只是1级深度(即站点/ web1,站点/ web2或站点/ web1 / web1_1等)。你看看SPAuditEntry对象的EventData xml中是否有ScopeId?找到一篇描述与您使用EventData xml中的ScopeId进行一些匹配的文章相同的文章:
此外,以下文章描述了使用SPSiteDataQuery中的ItemId(guid)来检索项目,然后使用结果数据(WebId和ListId)打开特定的Web /列表。一次检索一个项目可能有点低效,但它有点......
答案 1 :(得分:0)
我的解决方案概述如下:伪代码:
_allWebNames = site.AllWebs.Names;
由于我只关心站点内的顶级SPWeb,因此我解析了SPAuditEntry.DocLocation以获取可能的Web名称。 (例如:将从“sites / MySiteCollection / MySubSite1 / Lists / Announcements / 2_.000”中返回“MySubSite1”)
string webName = GetPossibleWebName(SERVER_RELATIVE_URL, docLocation);
然后搜索我的数组以查看网络名称是否匹配。
index = Array.BinarySearch<string>(_allWebNames, webName, new ServiceSiteNameComparer());
SPSite.OpenWeb(string)
打开网页并获取ID。