我正在使用SharePoint发布网站,我想“记录”SharePoint列表中用户所做的所有更改。
网上的一些搜索引导我进入EventReceiver。 但我的EventReceiver必须是通用的并附加到网站集中的所有列表。 “日志列表”有几列,例如发生事件的列表名称,修改项目的名称,旧值和新值。
有人可以指导我如何实现这个目标吗?
答案 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数据库之前无需捕获数据