找回密码
 立即注册

QQ登录

只需一步,快速开始

姚春阳
金牌服务用户   /  发表于:2023-12-29 21:12  /   查看:1640  /  回复:11
10金币
本帖最后由 姚春阳 于 2024-1-2 18:32 编辑

本demo的页面加载命令中有数据表操作命令,执行完页面加载命令后,会导致对当前行进行下一步数据表操作时报错,报错内容为“当前行已经被其他人编辑.....”。这个原因我知道是因为系统把页面加载命令中对数据表的更改判断为他人编辑。

问题1:页面加载的数据表操作命令中已经勾选了“调用成功后重新加载数据”,那么在命令执行完成后表格中的数据肯定是最新的了,为何还要判断为“已经被他人编辑......”?这是否属于一个小BUG呢?

问题2:如果以上不是BUG而是策略的话,我这个demo中的报错问题应该用何种办法解决?(备注:目前我在使用中是切换一下选择行,然后再点排序按钮,这样就不报错了,这样就是感觉比较low。另外也可以写一个服务端命令去操作数据表,在页面加载命令中调用服务端命令后,再执行排序命令就不会报错,但是这样感觉比较繁琐)



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

问题跟进: 您好,和开发同事沟通了一下,这个确实是因为活字格的并发控制策略导致的 并发控制的逻辑是这样的,比如有2个人分别都访问了ID=1的详情页面,用户1和用户2看到的详情信息是相同的,然后用户1修改了一些信息,然后点击更新。这时数据库中ID=1那一行的数据就已经变成用户1更改的数据了。但是用户2不知道数据被更新了,他也修改了信息,然后点击更新,这时就会提醒用户2,不可编辑数据,因为数据已被更新。 这个 ...

11 个回复

倒序浏览
最佳答案
最佳答案
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2023-12-29 21:12:55
来自 6#
问题跟进:

您好,和开发同事沟通了一下,这个确实是因为活字格的并发控制策略导致的

并发控制的逻辑是这样的,比如有2个人分别都访问了ID=1的详情页面,用户1和用户2看到的详情信息是相同的,然后用户1修改了一些信息,然后点击更新。这时数据库中ID=1那一行的数据就已经变成用户1更改的数据了。但是用户2不知道数据被更新了,他也修改了信息,然后点击更新,这时就会提醒用户2,不可编辑数据,因为数据已被更新。

这个情况是合理的。那么活字格是怎么控制并发这种情况呢?首先活字格并发控制的是当前行,就是说多个用户改的同一行,会有控制。实现就是用户访问时,都会将当前行记一个标记,比如上面那个情况,用户1和用户2都访问详情信息页时,都会有一个相同的标记,比如V1,当用户1修改数据,更新之后,数据库ID=1这一行标识就变成了另外一个,比如V2, 用户1由于更新了数据,页面上的标记也会同步更新成V2。注意,用户1中页面标识也会同步更新为V2,前提是更新数据,更新的是当前行。用户2进行更新数据时,会先进行标识比较,对比之后发现用户2的标识是V1,但是数据库中标识已经是V2, 说明用户2的已经是老数据,不能更新,所以会弹提示。

demo中,是同样的道理,弹出排序页面时,当前行标识是V1,但是页面加载命令中,循环了表格更新了特定行的数据,但是因为这里选择更新的是特定行的数据,数据库中当前行被更新了,标识是V2,但是页面标识并不会更新,因为更新的是特定行,不是当前行,页面不知道当前行也更新了。所以数据库中标识是V2, 页面上当前行标识依旧是V1, 就这导致点击排序按钮,再次执行更新数据库时,对比标识,就会报错。

逻辑原理就是上面的原因,所以加一设置当前行命令就好了,原因就是设置当前行之后,当前行会重新获取,页面上的标识也会变成最新的标识V2,这样后面再进行排序就没问题了。

或者也可以考虑在页面加载时命令中使用设置当前行命令+更新当前行去实现



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-1-2 11:14:02
2#
大佬,您是不是忘记上传demo了呢
您现在的业务需求是什么呢,当前行已被他人编辑是活字格做的一个并发控制,您可以描述一下您现在的业务需求,我们看看有没有其他的方案可以帮助到您哈
回复 使用道具 举报
姚春阳
金牌服务用户   /  发表于:2024-1-2 18:33:24
3#
本帖最后由 姚春阳 于 2024-1-2 18:34 编辑
Lay.Li 发表于 2024-1-2 11:14
大佬,您是不是忘记上传demo了呢
您现在的业务需求是什么呢,当前行已被他人编辑是活字格做的一个并发 ...

是的,刚刚把demo附件上传了,我这个没有他人编辑,都是自己编辑的也报这个错。你帮忙看下
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-1-3 10:29:37
5#
您好,这里可以试着在页面加载时命令中设置一下当前行,另外这里循环的时候最后不用刷新绑定数据,有可能造成循环的混乱。至于这个在页面加载时命令中已经重新加载了绑定数据,会什么还会触发当前行已被编辑的问题,这边儿和开发同事沟通一下,有什么结果及时给您反馈哈

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
姚春阳
金牌服务用户   /  发表于:2024-1-3 19:21:38
7#
Lay.Li 发表于 2024-1-3 16:23
问题跟进:

您好,和开发同事沟通了一下,这个确实是因为活字格的并发控制策略导致的

李工你讲的逻辑我看懂了,解决问题的办法也指明了。现在又多出来一个疑问:为什么我把页面加载时执行的数据操作命令,改成服务端命令,即在页面加载时去调用这个服务端命令执行数据表操作,这个时候就不会弹出“当前行已经被其他人编辑”的提醒。那么服务端命令操作数据表时,页面为什么就能知道当前行被更新了呢?
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-1-4 09:06:51
8#
您好,您的服务端命令是怎么写的呢,传入一个id和序号,使用特定行去更新吗
回复 使用道具 举报
姚春阳
金牌服务用户   /  发表于:2024-1-4 15:04:16
9#
本帖最后由 姚春阳 于 2024-1-4 15:06 编辑
Lay.Li 发表于 2024-1-4 09:06
您好,您的服务端命令是怎么写的呢,传入一个id和序号,使用特定行去更新吗

是的,我上传了一个demo你看下,此时用服务端命令操作数据表时,页面为什么就能知道当前行被更新了,并且自动更新了标记呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-1-4 18:24:45
10#
大佬,这个策略正在和开发同事确认,有结果及时给您回复哈
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2024-1-4 19:11:48
11#
问题跟进:

您好,这个问题和开发同事沟通了一下,前端页面的数据表操作,勾选重新加载绑定数据时,因为是在前端页面,程序很明确的知道是哪个表的数据需要重新加载,所以就只更新了相关表的数据,并没有更新当前行。而服务端命令的重新加载数据,由于没有页面的信息,不清楚是更新了那些表,所有服务端命令的重新加载绑定数据就会更新页面中的全部数据,包括当前行,所以调用服务端命令时就没有当前行已被他人编辑的提示了。

简单来说,就是服务端命令的重新加载数据和前端数据表操作的重新加载绑定数据是不一样的重新加载策略
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部