ABAP 在程序退出时做一些事情

ABAP do something on program exit

在我的 ABAP 程序中,我在开头和最后一步更新 table tab1 中的字段 X,如果一切正常,我将撤消此更新。重要的是,在程序执行期间,字段 X 具有正确的值。

然而,当我使用关闭按钮而不是 SAP 取消按钮 (F12) 退出事务时,程序终止并且它不会转到程序末尾,因此不会撤消开始时所做的更新。

有没有办法让我在关闭报表后执行一些代码?

我认为您正在尝试添加锁定机制。 ABAP 有自己的对象锁定机制。如果用户注销、关闭报告或会话终止,系统将自动解锁。我更喜欢使用锁定机制,example.

如果你的工作场景不同;为用户和锁定时间添加新列到相同 table,并检查用户是否在线,否则移除锁定。

如果您不想通过用户操作解除锁定,您可以启动新的后台作业 5 分钟以更新记录。此作业可以检查用户和记录,如果用户从报告中注销(t-code SM04),作业删除记录,否则自行重新安排。

"close window"按钮不能被程序控制(这适用于"external modes"即全屏windows,似乎是你的问题,但不是弹窗,它的关闭按钮可以控制。

因此,SAP 以这种方式对其 Dynpro 应用程序进行编程:

  • SAP 在整个应用程序结束时更新数据库,当您保存时
  • 并且最终,如果屏幕的某些部分由 "external" 应用程序处理,则 SAP 通过 "update task" 记录中间更新(即它们被延迟,直到 COMMIT WORK 在结束时完成)应用)。请注意,SAP 也经常只在最后使用更新任务,但这只是为了获得更好的对话响应时间。

自定义应用程序应遵循相同的原则。