我正在为Web应用程序上的漫长操作实现撤消按钮。由于撤消将在另一个请求中出现,我必须提交操作。
有没有办法在交易上发出提示,例如“也许回滚”?因此,在提交事务之后,如果需要,我仍然可以在其他进程中回滚。
否则撤销功能将与撤消操作一样复杂。
这可能吗?其他想法欢迎!
答案 0 :(得分:6)
您可能需要考虑的其他选项: 如果用户可以“撤消”操作,您可能希望实现一个'intent'表,您可以在其中存储挂起的操作。一旦完成应用程序流程,用户就需要接受或撤消操作,此时您只需运行挂起的事务并将其应用于您的数据库。
我们的网络应用程序中有一个类似的系统,用户可以提交交易进行处理,并且在计划运行的那天下午5点取消它。我们将其存储在意图表中,并处理在每日截止时间之后安排的当天的任何交易。在您的情况下,在初始“冗长操作”之后,您将需要用户明确的“接受”或“撤消”操作,这样会稍微改变您的过程。
希望这有帮助。
答案 1 :(得分:4)
在这种情况下的想法是记录每个操作 - 在特殊日志中执行相反操作的计数器操作,当您需要回滚时,实际运行您已记录的命令。
某些数据库具有闪回技术,您可以要求数据库返回特定日期和时间。但你需要了解它是如何工作的,并确保它只会影响你想要的数据而不影响其他工作人员......
我不认为在SQL服务器上有类似的技术,并且有一个SO答案说它没有,但SQL不断发展......
答案 2 :(得分:1)
我不确定你在这里使用什么技术,但肯定有更好的方法可以解决这个问题。您可以先将数据存储在会话中,然后在最终页面上进行提交。如今,许多框架还允许跨越多个请求的长时间运行的事务。
但是,您可能希望在每个页面的末尾提交,只需在进程完成时设置某种标记即可。这样一来,如果中间出现问题,用户就可以恢复并且一切都不会丢失。