我正在程序启动时实施一些检查,主要是授权,并且如果不允许用户执行程序,则希望中止程序。通过 SE93 进行显式身份验证对象分配不适合我,因为它缺乏灵活性。
LOAD-OF-PROGRAM我尝试通过两种方式做到这一点:
RETURN声明E两者都导致 dump Illegal interruption of the event LOAD-OF-PROGRAM,这确实对应于ABAP docu:
事件块必须完全执行,否则会出现运行时错误
这意味着可以指定退出事件块而不返回事件块的语句。
我解释这段话这意味着可以指定退出事件块的语句而不返回到事件块,因为该块中不允许使用任何退出语句。我的理解正确吗?
现在我在 INITIALIZATION 块中进行中止/验证:
INITIALIZATION.
IF do_validate( ) = abap_false.
MESSAGE 'You are busted!' TYPE 'E'.
ENDIF
Run Code Online (Sandbox Code Playgroud)
问题是我的程序有多个选择屏幕,并且INITIALIZATION块被触发多次。是的,我当然可以通过屏幕编号来区分它们,但这样做LOAD-OF-PROGRAM似乎更合乎逻辑,因为每个程序只执行一次。
问题:是否有某种方法可以在 LOP 事件或其他最佳实践中实现这一目标?为什么?
我不知道这是否是最佳实践,但可以使用 LEAVE PROGRAM 来实现此目标。
LOAD-OF-PROGRAM.
IF ...
LEAVE PROGRAM.
ENDIF.
Run Code Online (Sandbox Code Playgroud)
https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abapleave_program.htm
“语句 LEAVE PROGRAM 可以出现在任何处理块内的任何位置。它结束程序,无论它在哪个程序或对象中执行,或者在内部会话的哪个程序组中。”