我们有一个基于表单的web应用程序。不幸的是,当人们看到它时,它是可编辑的。所以两个人可以同时编辑并覆盖他们的更改。如何锁定表单(以及同一表单的任何多个部分,因为它被分解为多个页面),以便一次只有一个人可以编辑它?
我们只希望他们能够编辑半个小时的表单在一次拍摄(他们可以节省和继续增加更多的时间)。
我有一个解决办法,但我想看看别人是怎么想的。
在我的解决方案中,当用户第一次查看表单(或表单的任何部分,因为有多个部分都需要锁定)时,所有字段都是不可编辑的,直到它们单击“编辑”按钮。一旦他们按下编辑按钮,就会输入一个标志,并输入他们的用户id和开始时间。然后,它们被重定向到可编辑的相同形式。页面底部将有一个javascript计时器,让他们知道他们还有多少时间。完成后,他们按“保存和退出”按钮保存更改,为其他用户解锁表单,并返回不可编辑的表单。为了避免使用back按钮返回可编辑表单,我认为将使用包含javascript重定向的中间页面。因此,如果他们点击后退按钮,他们将被重定向回当前页面。
如果他们想编辑其中一个子表单(有按钮将它们从主窗体重定向到子窗体),他们可以在编辑模式下单击其中一个按钮,这将节省大窗体,更新时间再给它们半个小时,并将它们重定向到可编辑的子窗体。
当用户试图查看当前正在由另一个用户编辑的表单时,编辑按钮将变灰,当前用户的信息将随着应重新打开的时间而显示,但在保存和编辑子窗体时,用户可能会更改此时间。
这听起来像是可行的解决方案吗?如果要做同样的事情,请让我知道你解决问题的办法是什么?
发布于 2009-01-08 12:45:43
有许多方法来处理这种情况。第一种方法是锁定表单,每次只允许一个编辑。另一种方法是在保存和警告用户时检测冲突。
锁定对于具有高争用的资源是最有用的。如果预期会发生许多冲突,那么让用户单击一个编辑按钮效果最好。这应该将记录标记为锁定在您的数据存储中,并且应该只允许一个用户编辑它。当用户保存记录或用户取消时,需要解锁记录。在断开连接的情况下,就像在网页上一样,在一段时间后也应该有一个自动解锁。
冲突检测是通过记录修订编号或上次编辑的日期时间来完成的,并在客户端查看页面时将其传递给客户端。然后,当客户端单击save时将其传回给服务器,并根据数据库中的值对其进行检查。如果值已经更改,那么其他人已经编辑了记录,并且可以警告用户这一点。当资源不太可能在其他地方编辑时,这个系统对小编辑的工作效果要好得多(通常情况下,与活动用户的数量相比,有许多小记录)。
我发现检测碰撞效果更好,对web应用程序中的用户来说也不那么令人沮丧。只要他们输入的文本足够小。这是因为锁定资源的时间远远长于蜜罐,这是非常令人沮丧的。
发布于 2009-01-08 12:41:23
这是一个可行的解决方案,在可见的管理开销上有点重,但可能是最合适的解决方案,取决于您期望的工作流。
其他办法包括:
允许任何人编辑和提交表单,但如果其他人在表单最初打开后的两段时间内也提交了更改,则使用“冲突”错误进行响应。如果需要,可以显示这两组不同的更改,并允许用户选择要应用的更改,或者尝试合并更改。
让表单在没有保存按钮的情况下作为即时效果编辑器工作.让表单上所有打开的视图保持最新,使用XMLHttpConnection到服务器,这样当一个用户对任何字段进行更改时,它或多或少都会立即更新到其他任何人的表单副本上。
https://stackoverflow.com/questions/424066
复制相似问题