创建一个事件接收器,用于记录列表中用户所做的更改

时间:2010-02-26 13:12:39

标签: sharepoint

我正在使用SharePoint发布网站,我想“记录”SharePoint列表中用户所做的所有更改。

网上的一些搜索引导我进入EventReceiver。 但我的EventReceiver必须是通用的并附加到网站集中的所有列表。 “日志列表”有几列,例如发生事件的列表名称,修改项目的名称,旧值和新值。

有人可以指导我如何实现这个目标吗?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

听起来有可能。创建一个继承自SPItemEventReceiver的类并覆盖ItemUpdating。您可以使用以下代码获取列表:

    using (SPWeb web = properties.OpenWeb())
    {
        SPList list = web.Lists[properties.ListId];
    }

然后,您可以使用列表来获取列表的标题和URL。接下来,将properties.AfterProperties中的每个DictionaryEntry条目与properties.ListItem中的相应值进行比较,以获得您的差异。然后将其保存到您的日志列表中。诀窍是自动将事件接收器附加到每个新创建的列表。也许计时器工作会起作用。

那说......

在尝试任何此操作之前,请转到您网站集的“网站设置”。在“网站集管理”下,单击“网站集审核设置”。在“指定要审核的文档和项目事件”下,选中“编辑项目”。只有使用自定义解决方案才能满足您的需求。

答案 2 :(得分:1)

版本历史记录无法实现相同的功能吗?

您可以查看哪些字段由谁以及何时更改。虽然您必须逐个列表地查看。

如果要生成报告Web部件,还可以通过对象模型访问版本历史信息。

否则使用Janis Veinbergs链接关于如何将事件处理程序附加到所有列表和Rich Bennema方法以通用方式从更新项中获取值,尽管我会使用ItemUpdated,因为您不想更改数据已更新的仅将其复制到另一个位置,因此在将数据提交到SharePoint数据库之前无需捕获数据