如何在 SharePoint 2013 中为特定列表项创建日志(历史记录)?





5.00/5 (2投票s)
创建列表项的历史版本
引言
假设你有一个名为 Employees
的列表,其中有一个名为 Department
的项,并且你想跟踪 Department
的每次更改。对于拥有 500 多名员工的公司来说,日志非常有用。
实现此目标的方法有很多种。一种方法如下:
- 创建一个名为
Departmentlog
的新列表列 - 创建另一个名为
worklog
的列表列 - 此列应为 多行文本 类型,并在设置底部启用 将更改附加到现有文本 - 打开 Visual Studio 并创建一个新项目,然后选择空的 SharePoint 项目
- 在解决方案中,单击添加并添加新项,然后选择事件接收器
- 你需要为所需的列表创建 2 个事件接收器。第一个事件接收器必须是“正在更新项”,第二个事件接收器必须是“项已更新”。
代码
对于第一个事件接收器,你必须具有以下代码
public override void ItemUpdating(SPItemEventProperties properties)
{
base.ItemUpdating(properties);
properties.AfterProperties["Departmentlog"] =
properties.ListItem["Department"].ToString(); //this one stores the old department.
base.EventFiringEnabled = false;
properties.ListItem.SystemUpdate(false);
base.EventFiringEnabled = true;
}
对于第二个事件接收器,你必须具有以下代码
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
string dep = properties.ListItem["Department"].ToString();
string loguDep = properties.ListItem["Departmentlog"].ToString();
if (loguDep == dep) { }
else if (loguDep != dep) // in this point we make sure that old department
// is not same as new department, because every updates
// that are applied same changes will be in log too
// this condition prevents from this mistake.
{
properties.ListItem["worklog"] = "Department was changed from: " +
properties.ListItem["Departmentlog"].ToString() + " To: " +
properties.ListItem["Department"].ToString();
}
base.EventFiringEnabled = false;
properties.ListItem.SystemUpdate(false);
base.EventFiringEnabled = true;
}
构建并部署它。这应该可以正常工作。