如果其他用户正在编辑,则锁定页面/实体编辑
Lock page / entity edits if another user is editing
我有一个 asp.net 页面来编辑实体。当另一个用户已经在该实体的编辑页面上时,通知和防止保存的最佳设计模式是什么。我希望锁在用户离开页面时过期。我还想显示锁定页面的用户名。
会话状态可以是 inproc 或 state server。
用户在尝试保存之前需要知道(例如禁用编辑页面上所有其他用户的保存按钮)
有很多不同的方法可以做到这一点,但总的来说它相当复杂。需要注意的一个挑战是您不知道用户何时离开页面,因为无法发出信号。
我见过几次使用的一种方法是执行以下操作:
- 添加一列以标识谁锁定了记录(例如将
Locked_User_ID
等添加到您的 table)
- 添加一列以标识 date/time 记录被锁定的内容。 (例如
Locked_Timestamp
)
- 定义一个全局常量(配置设置等)指定锁的有效期。
- 在 page/controller 加载时,检查有问题的记录是否被锁定,如果是,它是否最近被锁定(基于您的全局常量)以相信另一个用户仍在处理它.如果是这样,则不允许编辑并显示正在编辑的用户及其最后 activity(基于
Locked_Timestamp
和 Locked_User_ID
)。
- 如果它最近没有被锁定,或者根本没有被锁定,或者被你锁定,更新
Locked_User_ID
到当前用户和 Locked_Timestamp
到当前日期。
- 一旦用户点击back/cancel、保存等,解锁记录。 (这样它就不必等待基于全局常量的超时 - 但如果他们只是关闭浏览器等,超时将是故障安全)。
这个的另一个细微变化是有一个 "check-out" 或 "edit" button/functionality 来实现这个 - 这样用户就可以查看信息而无需自动获取信息锁,而且只有一次他们单击 "check-out" 或 "edit" 是否检查并获取锁。
希望对您有所帮助!
此致,
罗斯
我有一个 asp.net 页面来编辑实体。当另一个用户已经在该实体的编辑页面上时,通知和防止保存的最佳设计模式是什么。我希望锁在用户离开页面时过期。我还想显示锁定页面的用户名。
会话状态可以是 inproc 或 state server。
用户在尝试保存之前需要知道(例如禁用编辑页面上所有其他用户的保存按钮)
有很多不同的方法可以做到这一点,但总的来说它相当复杂。需要注意的一个挑战是您不知道用户何时离开页面,因为无法发出信号。
我见过几次使用的一种方法是执行以下操作:
- 添加一列以标识谁锁定了记录(例如将
Locked_User_ID
等添加到您的 table) - 添加一列以标识 date/time 记录被锁定的内容。 (例如
Locked_Timestamp
) - 定义一个全局常量(配置设置等)指定锁的有效期。
- 在 page/controller 加载时,检查有问题的记录是否被锁定,如果是,它是否最近被锁定(基于您的全局常量)以相信另一个用户仍在处理它.如果是这样,则不允许编辑并显示正在编辑的用户及其最后 activity(基于
Locked_Timestamp
和Locked_User_ID
)。 - 如果它最近没有被锁定,或者根本没有被锁定,或者被你锁定,更新
Locked_User_ID
到当前用户和Locked_Timestamp
到当前日期。 - 一旦用户点击back/cancel、保存等,解锁记录。 (这样它就不必等待基于全局常量的超时 - 但如果他们只是关闭浏览器等,超时将是故障安全)。
这个的另一个细微变化是有一个 "check-out" 或 "edit" button/functionality 来实现这个 - 这样用户就可以查看信息而无需自动获取信息锁,而且只有一次他们单击 "check-out" 或 "edit" 是否检查并获取锁。
希望对您有所帮助!
此致,
罗斯