5

我最近收到要求某人接收关于 SharePoint 网站内任何更改的每日摘要警报;每个站点都有一个负责其站点内容的所有者。

我们目前的工作方式是为站点内的每个列表/库自动设置警报。

// Get the Lists on this Site
SPListCollection siteLists = currentSite.Lists;
foreach (SPList list in siteLists)
{
    if (!list.ToString().Equals("Master Page Gallery"))
    {
        if (list.ReadSecurity == 1) // user has read access to all items
        {
            // Create an Alert for this List
            Guid alertID = currentUser.Alerts.Add(list, SPEventType.All, SPAlertFrequency.Daily);

            // Set any additional properties
            SPAlert newAlert = currentUser.Alerts[alertID];
        }
    }
}

这会产生两个问题:

  1. 用户创建了许多不同的警报。理想:只有一封包含每日摘要的电子邮件。
  2. 必须设置某种监视器来检查站点中的新列表或库,并自动为用户设置警报。

问:如何为站点中的所有更改创建每日摘要警报?

4

3 回答 3

6

我相信您正在寻找的解决方案可以通过审计框架获得。审计在 SP 中非常强大,不幸的是很容易被输出淹没。

Audit 是 SPSite、SPWeb、SPList 和 SPItem 属性上可用的属性。

使用此属性调整特定的审计标志(使用 .Audit.AuditFlags 属性)以满足您的需求(具体情况取决于您如何定义“更改”,但几乎任何您能想到的东西都可用)。

MSDN 上提供了有关SPAudi 对象的详细信息。

一旦您定义了要审核的内容/位置,您就必须将该信息返回给您的用户。

默认情况下,SP 会设置一些在网站集级别可用的漂亮报告([网站集的 URL]/_layouts/Reporting.aspx?Category=Auditing)。这些可能会满足您的需求。

您最初的解决方案提到了通过电子邮件向用户发送警报。鉴于大多数用户希望将他们的信息集中在电子邮件中(尽管他们的 MySite 是放置报告链接的好地方!),您将需要做更多的工作。

您可以使用SPAuditQuery 和SPAuditEntryCollection 对象通过对象模型提取所需的审计信息。同样,MSDN 提供了一些关于如何使用这些对象的信息。

我建议设置一个在一天结束时运行的自定义 SPJobDefinition,以通过电子邮件向用户发送其站点的审核报告。Andrew Connell在他的博客上对如何设置自定义作业进行了很好的解释。

总结一下:

  • 为有问题的 SPWeb 启用审核
  • 使用SPAuditQuery 和SPAuditEntryCollection 为每个SPWeb 创建报告
  • 创建一个每晚运行的 SPJobDefinition 以通过电子邮件将报告发送给每个 SPWeb 所有者
于 2009-06-11T14:31:02.630 回答
2

在站点上启用审核策略之前要考虑的一件事是您添加的性能开销。

我建议在这里尽可能少地保留足迹!

我的意思是,如果您只希望从某个内容类型或某个列表中获取此信息,请确保仅在这些 CT 或列表上启用信息策略!

还将日志记录保持在最低限度。例如,如果您只对视图感兴趣,而不是删除或恢复,则只记录这些事件!

在大型网站上,我已经看到审核非常垃圾的性能!

还要注意这里的一些注意事项:即使您可以对列表启用审核(如在非文档库中),许多事件(例如查看事件)并未专门针对列表项记录!这在任何地方都没有描述(事实上,我什至在 MSDN 文章中看到 Ted Pattison 提到项目级别审计),但我直接从 CSS 和产品团队那里得知,由于性能问题,项目级别审计在 SP2007 中没有实现。相反,您只需在日志中获得一个列表事件,指定该列表已被触及。

文档被跟踪得相当好,但是我发现在发布页面上审核视图事件(在 API 中被视为文档而不是列表项)存在问题,具体取决于审核的设置方式和位置(例如,如果审核策略是使用继承的CT 的)所以这是需要注意的。

[编辑:昨天围绕这个做了一些测试,更糟糕的是:事实上,只有在你设置了站点级别的审计策略时,才会跟踪发布页面!如果您对列表或内容类型(甚至是从具有策略的内容类型继承的内容类型)设置策略,则根本不会收到任何SPAudiItemType.Document 级别的事件。将其设置在站点上,您将获得太多审核!例如。视图将触发 x2 视图事件,更新也是如此,因此您最终会记录太多。它绝对看起来像一个错误,当策略被放在列表和 CT 上时,没有任何审计......]

这里的主要信息是:小心你记录的内容,因为它会影响你的网站性能测试你期望记录的内容是否真的被记录了!

安德斯拉斯克

于 2009-11-12T09:55:43.247 回答
0

Well, it is not a case that there is no item level auditing. The item level auditing is implemented but you have to turn it ON for specific item. If list item exists you can get its instance and turn ON auditing the same as you do this to lists. The problem is that how to turn it ON when the ListItem is created. Maybe workflow could help?

于 2012-03-13T09:47:22.743 回答