RETURN、STOP、EXIT、CHECK、LEAVE、REJECT

1.     RETURN

RETURN用来退出当前执行的程序块,例如一个FORMMETHOD报表事件块,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环(如果是在Form、METHOD中,只会退出Form、METHOD,不会退出Form、METHOD被调用所在的报表事件块,即退Form、METHOD后继续向被调用点后面执行)

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,这与直接在事件块中的效果是一样的;

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类似

4.      CHECK

CHECK跳转的前提是<expr>为假时。

l  CHECK只是跳出当前事件块,继续下一个事件块的处理,相当于方法的return;

l  另外,如果CHECK在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已

l  如果CHECK出现在循环以外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。

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} }

5.1.           REJECT

REJECT是用在逻辑数据库GET event blocks中,与EXIT和CHECK不一样的是(EXIT和CHECK如果是在循环中时,只是退出循环;如果是在FORM中,则只是退出当前FORM),REJECT可以从循环或者一个FORM中直接跳出所在的GET事件块

 

REJECT [<dbtab>].

REPORT ZTEST02.
DATA:GT_LIKP TYPE TABLE OF LIKP,
     GT_LIPS TYPE TABLE OF LIPS,
     GT_MARA TYPE TABLE OF MARA.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE @GT_LIKP
FROM LIKP
WHERE VBELN IN '0050074414','0050074415' ).
IF GT_LIKP IS NOT INITIAL.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE @GT_LIPS
    FROM LIPS
    FOR ALL ENTRIES IN @GT_LIKP
    WHERE VBELN = @GT_LIKP-VBELN.

  IF GT_LIPS IS NOT INITIAL.
    SELECT *
      INTO  CORRESPONDING FIELDS OF TABLE @GT_MARA
      FROM MARA
      FOR ALL ENTRIES IN @GT_LIPS
      WHERE MATNR = @GT_LIPS-MATNR.
  ENDIF.
ENDIF.
LOOP AT GT_LIKP INTO DATA(LS_LIKP).
  DATA(LV_VBELN= LS_LIKP-VBELN.
  LOOP AT GT_LIPS INTO DATA(LS_LIPS).
    IF LS_LIKP-VBELN NE LS_LIPS-VBELN.
*      RETURN.  "退出程序块
      EXIT.    "退出gt_lipsd的loop
    ENDIF.

  ENDLOOP.
  WRITE:'/'.
ENDLOOP.
WRITE:'/'.

posted @ 2022-03-24 11:28  下一詀110  阅读(73)  评论(0编辑  收藏  举报