问题:
自开发的 rap elements 用了一个自建悲观锁, 选择数据编辑并保存后也自动解锁了,但是编辑时直接关闭浏览器窗口,悲观锁一直存在,这种怎么解决?
我们现在碰到的现象,表面上是 Fiori elements 或移动端浏览器关闭之后没有执行解锁,深一层看,是同一张业务表被多个入口共同编辑时,锁生命周期没有从「前端页面生命周期」升级成「服务端租约生命周期」。保存后能自动解锁,说明正常路径没有问题。真正的问题出在异常路径,浏览器窗口被关闭、移动端 App 被系统杀掉、网络断开、用户锁屏、FLP 页面被强制刷新,这些动作都不保证给后端一次可靠的释放锁机会。MDN 对 beforeunload 的说明很明确,这个事件在移动端并不可靠,移动端用户切换到其他 App 后再从系统任务管理器关闭浏览器时,事件可能完全不会触发,并且现代浏览器只允许显示通用离开提示,不能由网页控制提示文案。(MDN Web Docs) 这和我们现在的业务场景高度吻合,所以这里不能再把「关闭浏览器时调用 releaseLock」当成主方案,只能把它当成锦上添花的辅助补救。
SAP 标准 draft 的设计思路其实已经给出了答案。SAP Fiori 的 draft 模式会在用户编辑时创建草稿,草稿用于防止数据丢失,也用于防止多个用户同时编辑同一个对象。Fio
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



