執行時動態呼叫子程式的例子
阿新 • • 發佈:2019-01-07
程式碼比較簡單,就沒有寫註釋。
處理邏輯就是要求使用者輸入一個子程式名,然後動態呼叫,並且用異常機制處理輸入的子程式不存在的情況。
當然,如果在 PERFORM 最後用 IF FOUND 就可以不用 TRY 結構了,但是對於子程式不存在的情況不會給出任何提示,用 sy-subrc 也追蹤不到異常返回碼。
關於更多異常,請參考 PERFORM 的 F1 聯機幫助。
*&---------------------------------------------------------------------*
*& Report ZQS2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zqs2.
PARAMETERS p_sub(40) TYPE c.
DATA fssub(40) TYPE c.
fssub = p_sub.
TRY.
PERFORM (fssub) IN PROGRAM zqs2. " IF FOUND.
CATCH cx_sy_dyn_call_illegal_form.
WRITE: 'The routine', p_sub COLOR 3, 'is not exist!'.
ENDTRY.
*&---------------------------------------------------------------------*
*& Form sub_a
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_a.
WRITE: 'Congratulation! I am routine SUB_A! '.
ENDFORM. "sub_a
*&---------------------------------------------------------------------*
*& Form sub_b
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_b.
WRITE: 'Congratulation! I am routine sub_b.'.
ENDFORM. "sub_b
處理邏輯就是要求使用者輸入一個子程式名,然後動態呼叫,並且用異常機制處理輸入的子程式不存在的情況。
當然,如果在 PERFORM 最後用 IF FOUND 就可以不用 TRY 結構了,但是對於子程式不存在的情況不會給出任何提示,用 sy-subrc 也追蹤不到異常返回碼。
關於更多異常,請參考 PERFORM 的 F1 聯機幫助。
*&---------------------------------------------------------------------*
*& Report ZQS2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zqs2.
PARAMETERS p_sub(40) TYPE c.
DATA fssub(40) TYPE c.
fssub = p_sub.
TRY.
PERFORM (fssub) IN PROGRAM zqs2. " IF FOUND.
CATCH cx_sy_dyn_call_illegal_form.
WRITE: 'The routine', p_sub COLOR 3, 'is not exist!'.
*&---------------------------------------------------------------------*
*& Form sub_a
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_a.
WRITE: 'Congratulation! I am routine SUB_A!
ENDFORM. "sub_a
*&---------------------------------------------------------------------*
*& Form sub_b
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_b.
WRITE: 'Congratulation! I am routine sub_b.'.
ENDFORM. "sub_b