阻止多个用户在sharepoint 2010中编辑同一列表项

时间:2011-05-11 19:44:14

标签: asp.net sharepoint sharepoint-2010

我们开发了一个带有多个控件的自定义webpart,并部署在sharepoint 2010网站上,该网站接受来自用户的输入,一旦用户点击提交按钮,所有值都存储在sharepoint列表中,其中一列是超链接。当用户点击此超链接时,通过查询字符串,他将再次重定向到同一表单。

我想知道用户是否点击此超链接为此表单制作版本,我们是否可以避免其他用户对此表单进行更改?

请分享您的想法。

3 个答案:

答案 0 :(得分:4)

如果我正确理解了您的问题,您希望阻止其他用户编辑列表项,如果有人正在编辑它。这可以使用某种锁来完成,可能存储在列表本身中,但该策略存在两个重要缺陷:

  • 考虑第一个用户点击链接切换到编辑模式,我们锁定列表项。如果用户只是关闭他的浏览器而没有继续进行(或者他的网络失败,或者他的系统崩溃,或者他的计算机死机),该项目将保持锁定其他所有人将被禁止编辑它,直到我们以某种方式释放它(通常在一些超时之后,或通过在网络部分之外修改它)。

  • 我们的Web部件将强制执行该锁定,但其他任何代码都不会执行此操作,包括SharePoint本身(通过其他Web部件或服务器端代码)和整个外部世界(通过客户端对象模型)。因此,当用户编辑它时,任何给定的列表项仍然容易发生变化,如果发生这种情况,SPListItem.Update()仍然会引发异常。

更好的策略是使用SharePoint自己的锁定机制,通过在第一个用户切换到编辑模式时签出项目,当然,仅在项目尚未签出时启用链接。

但是,这并不能解决延迟锁定问题(我们在用户关闭浏览器时检查项目的情况?)。此外,CheckOut()SPFile实现,而不是SPListItem,这意味着您必须使用文档库才能从该功能中受益。

总而言之,我不认为对您的问题有一个实际上用户友好的解决方案:您要么让您的用户同时编辑同一个项目并处理后果(只有其中一个获胜),或者你没有,你可能会留下陈旧的锁(每个人都输了)。

答案 1 :(得分:1)

使用结账和检查,然后有一个工作流程,清除锁定超过设定时间段的锁...

答案 2 :(得分:0)

您可以在SharePoint中使用签出/签入机制。