天天看點

關于ABAP流程處理的一些指令的說明(stop,exit,return,check,reject)

Stop 指令

使用該指令的程式位置

INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中

處理說明

1、 當在INITIALIZATION事件執行該指令,系統将直接觸發應用伺服器和用戶端螢幕元素的發送;

2、 在其他事件中将直接觸發END-OF-SELECTION事件的執行,如果不想執行END-OF-SELECTION,請使用RETURN或者 DO和其他處理子產品中(event block, dialog module, procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT

處理說明

1、 循環進行中,EXIT隻跳出目前的循環;

2、 在START-OF-SELECTION, GET, END-OF-SELECTION事件中,将直接觸發List輸出,将不執行END-OF-SELECTION事件;如果沒有List輸出,系統将直接傳回選擇螢幕;

3、 對于procedure系統傳回調用處;

注意事項

Sap推薦EXIT隻是用于循環處理,對于處理子產品請使用Return。

OF-SELECTION.

  return.

  'start of selection'.

OF-SELECTION.

  'end of selection'.

*&      Form  frm_test

*       text

{FORM frm_test.

  5 IF sy-2.

      不管存在多少層次的循環,将不直接退出目前處理子產品,循環進行中,EXIT隻跳出目前的循環執行DO 以外'END'.)

      'IF STATEMENT'.

    WRITE: index.

  WRITE / ENDFORM.   

結果:

DO          1

END

}

RETURN指令

使用該指令的程式位置

用于處理子產品中(event block, dialog module, procedure (function module, method, subroutine))

處理說明

1、 對于procedure ,RETURN将無條件退出目前的處理子產品,不影響後續子產品的執行;

2、 對于START-OF-SELECTION, GET, END-OF-SELECTION事件中,将直接觸發List輸出,将不執行END-OF-SELECTION事件;如果沒有List輸出,系統将直接傳回選擇螢幕;

注意事項

RETURN不管存在多少層次的循環,将直接退出目前處理子產品,這一點和EXIT不同

{

  OF-SELECTION.

  return.

  'start of selection'.

OF-SELECTION.

  'end of selection'.

*&      Form  frm_test

*       text

FORM frm_test.

  5 IF sy-2.

      .(不管存在多少層次的循環,将直接退出目前處理子產品,這一點和EXIT不同)

      'IF STATEMENT'.

    WRITE: index.

  WRITE / ENDFORM. 

結果:

DO          1

}

CHECK指令

使用該指令的程式位置

用于循環和程式子產品中:DO和其他處理子產品中(event block, dialog module, procedure (function module, method, subroutine))...ENDDO,WHILE...ENDWHILE,LOOP...ENDLOOP,SELECT...ENDSELECT

處理說明

1、 循環進行中,CHECK隻是不執行本次循環的後續處理,繼續調到下一次循環;

2、 在START-OF-SELECTION, GET, END-OF-SELECTION事件中,隻是中斷本事件内的後續代碼的執行 ,不影響其他後續子產品的處理,這和EXIT,RETURN是不同的;

3、 對于沒有循環procedure系統傳回調用處;

4、 對邏輯資料庫的GET事件,系統退出本次紀錄和子節點的讀取處理,将繼續下一條紀錄的處理;

注意事項

Sap推薦CHECK隻是用于循環處理,對于處理子產品請使用Return。

Constants ss 'x'.

START-PERFORM frm_test.

  WRITE / END-WRITE / *&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*

DO TIMES.

    'x'.(CHECK隻是不執行本次循環的後續處理,繼續調到下一次循環)

    index = WRITE ENDIF.

    'DO', sy-ENDDO.

  'END'.

結果 END

Constants ss 'x'.

START-PERFORM frm_test.

  WRITE / END-WRITE / *&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*

DO TIMES.

    index = WRITE ENDIF.

    'DO', sy-ENDDO.

  CHECK(exit return) SS <> 'x'.(三種效果一樣都跳到下個PERFORM frm_test)

  'END'.

差別:在LOOP 中 check 隻是不執行本次循環的後續處理,繼續調到下一次循環;

               EXIT隻跳出目前的循環繼續執行loop外的語句。

               return 跳出怎麼form了

     在form 中 三種效果一樣都跳到下個PERFORM frm_test

    在事件中 CHECK  在START-OF-SELECTION, GET, END-OF-SELECTION事件中,隻是中斷本事件内的後續代碼的執行 ,不影響其他後續子產品的處理

START-  CHECK SS <> WRITE / END-WRITE /

  結果: end of selection     

      在事件中 exit return  在START-OF-SELECTION, GET, END-OF-SELECTION事件中,将直接觸發List輸出,将不執行END-OF-SELECTION事件;如果沒有List輸出,系統将直接傳回選擇螢幕;

REJECT指令

使用該指令的程式位置

用于邏輯資料庫的GET處理事件中

處理說明

REJECT的處理類似CHECK,但和CHECK不同的是:REJECT如果在循環内也同樣退出本次的處理,而CHECK隻是退出循環,不退出處理。

繼續閱讀