我正在构建一个基于 crm 的系统,该系统将被大约 10 个用户同时使用。
如果同一记录已被其他用户打开,那么防止打开、使用和保存同一记录的最佳方法是什么。
我试图在几秒钟内打开用户 2 覆盖用户 1 更改的机会场景。
我正在构建一个基于 crm 的系统,该系统将被大约 10 个用户同时使用。
如果同一记录已被其他用户打开,那么防止打开、使用和保存同一记录的最佳方法是什么。
我试图在几秒钟内打开用户 2 覆盖用户 1 更改的机会场景。
我看到了几种方法:
1)只需将时间戳列添加到您的数据库并将其发布在隐藏字段中的表单上。一旦有人在编辑后保存记录 - 您可以将从客户端收到的时间戳值与数据库中当前可用的时间戳值进行比较。如果它们相等 - 保存更改并更新时间戳列。否则(有人刚刚编辑了该记录) - 不要保存更改并以某种方式处理这种情况。这里的问题是您需要从数据库中获取时间戳值并进行比较。在此期间(在您请求一个值但尚未保存更改之后)有人可能会更新记录。那个时间范围只有几毫秒,因此我认为它可以被忽略。
我没有机会做这样的事情,但我记得,数据库通常可以以某种方式锁定一行。因此,任何读取尝试都将停止,直到锁定未被删除。假设,这样你可以避免我上面提到的问题。
2)如果您可以控制会话状态,则可以在有人打开记录进行编辑后将其标记为正在编辑。该标记可以包含编辑器的会话 ID。编辑完成后 - 您将删除该标记(任何人都可以再次编辑它)。但是有人可能会开始编辑并打开页面。因此,您需要检查会话是否仍然存在。一旦它死了 - 标记要编辑的记录。