本文主要是介绍ABAP LEAVE用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LEAVE常用的语句:
CASE sy-ucomm."这个就是我们第七步中按钮的名字,也是第八步中定义的功能码变量的名字"WHEN 'BACK'."当功能码获取到的是BACK时"LEAVE TO SCREEN 0.""退回到屏幕0WHEN 'EXIT'. "当功能码获取到的是EXIT时"LEAVE PROGRAM."退出程序"WHEN OTHERS.ENDCASE.
LEAVE PROGRAM. 退出整个程序
LEAVE TO TRANSACTION ta
LEAVE LIST-PROCESSING. 从list processor回到dialog processor
LEAVE TO LIST-PROCESSING 控制权从dialog processor转交给list processor
LEAVE { SCREEN | {TO SCREEN dynnr} }
LEAVE TO LIST-PROCESSING 是退出其他屏幕后,到List输入的屏幕,例如:WRITE 语句输入的屏幕。
LEAVE LIST-PROCESSING是在其他屏幕退出,到List输入屏幕间的动作。
实例:
IF S_MATNR[] IS INITIAL AND S_WERKS[] IS INITIAL AND
S_BDTER[] IS INITIAL AND S_USNAM[] IS INITIAL AND
S_RSNUM[] IS INITIAL AND S_KOSTL[] IS INITIAL AND
S_AUFNR[] IS INITIAL.
MESSAGE S000(ZMM) WITH ‘取数条件不能全部为空’ DISPLAY LIKE ‘E’.
LEAVE LIST-PROCESSING.
ENDIF.
ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)
CHECK.(SAP官方推荐只在循环中使用)
1)CHECK 后面要跟一个表达式,当表达式值为假(false)时,CHECK发生作用,退出循环(LOOP)或处理程序(Processing Block)。
2)如果CHECK出现在循环中,则发生作用时,退出的是当前一次循环操作,程序会继续执行下一次循环操作,其作用类似于Continue
3)如果CHECK出现在循环以外,则发生作用时,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。
EXIT.
1) EXIT如果出现在循环中,退出的是整个循环操作,.程序会从循环结束处开始继续执行。
2)EXIT如果出现在循环之外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,其作用与RETURN类似。
RETURN.
RETURN用来退出当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环。
虽然ABAP中EXIT 和RETURN都可以用来实现退出当前执行的语句块(PROCESSING BLOCK),但SAP的帮助文件建议只在循环中使用EXIT ,其他情况下要退出当前执行进程,使用RETURN 。
LEAVE PROGRAM.
LEAVE PROGRAM. 直接退出主程序。
12.21.1. RETURN
RETURN用来退出当前执行的程序块,例如一个FORM、METHOD、报表事件块,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环(如果是在Form、METHOD中,只会退出Form、METHOD,不会退出Form、METHOD被调用所在的报表事件块,即退Form、METHOD后继续向被调用点后面执行)
12.21.2. STOP
l INITIALIZATION中的STOP会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;
l 如果STOP在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(STOP后面语句不执行而已),仅接着是显示选择屏幕;
l AT SELECTION-SCREEN [ON]…选择屏幕事件块中的STOP也只是退出当前事件块,继续后面的事件块;
l 另外,即使STOP在循环中,还是在FORM,METHOD,也是直接从被调用的点退出所在事件块,而不仅仅只退出当前循环、FORM、METHOD,这与直接在事件块中的效果是一样的;
12.21.3. EXIT
l INITIALIZATION中的EXIT会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;
l 如果EXIT在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(EXIT后面语句不执行而已),仅接着是显示选择屏幕;
l AT SELECTION-SCREEN [ON]…选择屏幕事件块中的EXIT也只是退出当前事件块,继续后面的事件块;
l 从START-OF-SELECTION开始往后的事件块,如果出现EXIT,则会开始listprocessor(列表处理),并跳转到相应的List输出界面(前提条件是要在退出前已经向屏幕输出内容了,否则也不会跳转);注:END-OF-SELECTION事件块也会被跳过
l 另外,如果EXIT在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已;
l 如果是在FORM,METHOD中,而非循环中,则退出当前的FORM、METHOD,其作用与RETURN类似
12.21.4. CHECK
CHECK跳转的前提是<expr>为假时。
l CHECK只是跳出当前事件块,继续下一个事件块的处理,相当于方法的return;
l 另外,如果CHECK在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已;
l 如果CHECK出现在循环以外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。
12.21.5. LEAVE
LEAVE PROGRAM. 退出整个程序
LEAVE TO TRANSACTION ta
LEAVE LIST-PROCESSING. 从list processor回到dialog processor
LEAVE TO LIST-PROCESSING 控制权从dialog processor转交给list processor
LEAVE { SCREEN | {TO SCREEN dynnr} }
12.21.5.1. REJECT
REJECT是用在逻辑数据库GET event blocks中,与EXIT和CHECK不一样的是(EXIT和CHECK如果是在循环中时,只是退出循环;如果是在FORM中,则只是退出当前FORM),REJECT可以从循环或者一个FORM中直接跳出所在的GET事件块:
REJECT [<dbtab>].
终结逻辑数据库当前节点数据行的处理
如果省略选项<dbtab>, 则逻辑数据库会自动读取同一节点的下一行数据,即同一节点的GET事件块会被触发。如果使用了<dbtab>选项,则逻辑数据库会读取节点<dbtab>的下一行数据,此时的<dbtab>节点必须是REJECT所在当前节点的上级节点。
区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
1,CALL SCREEN XXXX将在Screen调用栈(CALL STACK)上面添加一层调用(进栈),调用XXXX的PBO和PAI,如果XXXX的Next Screen不为0,那么将继续其Next Screen的PBO和PAI,如此继续~~~当最后碰到Next Screen为0时,该层调用将从调用栈中退出(出栈),然后系统将继续执行CALL SCREEN XXXX之后的语句。
2,SET SCREEN XXXX,设置调用栈当前层次的Next Screen为XXXX,它并不影响调用栈的层数,除非XXXX为0,那将导致调用栈退掉一层(出栈)。要注意的是,PAI中SET SCREEN XXXX后的语句,系统将照样执行。只有执行完毕该PAI整个逻辑后,才考虑Next Screen的PBO和PAI。
3,LEAVE TO SCREEN与SET SCREEN比较类似,所不同的是,LEAVE TO SCREEN XXXX将强行中断当前SCREEN的PAI,直接执行XXXX的PBO和PAI。换言之,PAI中LEAVE TO SCREEN XXXX后的语句,系统将不会执行到。
在ABAP中,CALL TRANSACTION和SUBMIT report_name AND RETURN语句,也都是在调用栈上添加一层调用,与CALL SCREEN有点类似。而LEAVE TO TRANSACTION以及SUBMIT report_name则是在调用栈当前层次的一个跳转,与LEAVE TO SCREEN类似。
这篇关于ABAP LEAVE用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!