ABAP在程序退出时执行某些操作

时间:2018-09-28 06:57:57

标签: sql events sap abap

在我的ABAP程序中,我从头开始更新表tab1中的字段X,在一切正常的最后一步中,我正在反向进行此更新。在程序执行期间,字段X具有正确的值很重要。

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

enter image description here

关闭报告后是否可以执行一些代码?

2 个答案:

答案 0 :(得分:5)

“关闭窗口”按钮不能由程序控制(对于“外部模式”(即全屏窗口,这是正确的,这似乎是您的问题,但对于弹出窗口而言,是正确的) ,其关闭按钮可以控制)。

因此,SAP通过以下方式对其Dynpro应用程序进行了编程:

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

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

答案 1 :(得分:0)

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

如果您使用不同的方案;将用户和锁定时间的新列添加到同一表中,并检查用户是否在线,否则请删除锁定。

如果您不希望通过用户操作来删除锁定,则可以使用更新记录来启动新的后台作业5分钟。此作业可以检查用户并记录,如果用户从报告中注销(T代码SM04),则可以删除作业记录,否则可以自行重新计划。