分享一个常用的ABAP报表程序模板,通过一个本地的main class实现GUI相关的校验,然后预留start( )方法来启动真正的业务逻辑。
Report z_abc.
"------ part 1: constants & global data declaration --------
TYPE-POOLS icon.
CONSTANTS:
BEGIN OF gc_alv_icon,
light_green TYPE icon_d VALUE icon_led_green,
light_red TYPE icon_d VALUE icon_led_red,
END OF gc_alv_icon,
DATA gv_okcode_0100 TYPE syst-ucomm.
DATA gv_okcode_0101 TYPE syst-ucomm.
DATA go_global_controller TYPE REF TO lcl_global_controller ##NEEDED.
"------ part 2: Selection Screen etc --------
PARAMETERS p_bukrs TYPE bkpf-bukrs.
PARAMETERS p_belnr TYPE bkpf-belnr.
PARAMETERS p_gjahr TYPE bkpf-gjahr.
"------ part 3: Main Wrapper Class --------
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-DATA go_instance TYPE REF TO lcl_main READ-ONLY.
CLASS-METHODS class_constructor.
METHODS initialization.
METHODS at_output.
METHODS check_and_start.
PRIVATE SECTION.
METHODS check_screen_input.
METHODS start.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD class_constructor.
go_instance = NEW #( ).
ENDMETHOD.
METHOD initialization.
" authorization check etc
ENDMETHOD.
METHOD at_output.
" screen modification
" to hide or display some fields etc
ENDMETHOD.
METHOD check_and_start.
CHECK sy-ucomm = 'ONLI'.
check_screen_input( ).
start( ).
ENDMETHOD.
METHOD check_screen_input.
" screen input validation etc
ENDMETHOD.
METHOD start.
" actual business logic etc.
" this part could be handled in another global or local class
" go_global_controller = lcl_global_controller=>get( ).
" CALL SCREEN 0100.
ENDMETHOD.
ENDCLASS.
"------ part 4: handle GUI event --------
INITIALIZATION.
lcl_main=>go_instance->initialization( ).
AT SELECTION-SCREEN OUTPUT.
lcl_main=>go_instance->at_output( ).
AT SELECTION-SCREEN.
lcl_main=>go_instance->check_and_start( ).
"------ (optional) part 5: handle PBO/PAI if any custominzed screen. --------
" -------- better to have a seperate INCLUDE for this part --------
*PROCESS BEFORE OUTPUT.
* MODULE status_0100.
* MODULE fill_data_0100.
*PROCESS AFTER INPUT.
* MODULE user_command_0100.
*MODULE status_0100 OUTPUT.
* SET PF-STATUS '0100'.
* SET TITLEBAR '0100'.
*ENDMODULE.
*MODULE fill_data_0100 OUTPUT.
* go_global_controller->refresh_data( ).
*ENDMODULE.
*MODULE user_command_0100 INPUT.
* CASE gv_okcode_0100.
* WHEN 'EXIT' OR 'CANCEL'.
* LEAVE PROGRAM.
* WHEN 'BACK'.
* SET SCREEN 0.
* WHEN 'REFRESH'.
* go_global_controller->handle_okcode_refresh( ).
* ENDCASE.
* CLEAR gv_okcode_0100.
*ENDMODULE.
本博客专注于技术分享,干货满满,持续更新。 欢迎关注❤️、点赞👍、转发📣!