Частенько у консультанта возникает желание сделать так, чтобы кнопка была стандартная и располагалась на своем обычном месте, но реакция на нажатие была несколько другоя. Особенно часто это касается кнопки выгрузки, то формуляр нужен немного другой, то какую-то постобработкку сделать и т.д. Для таких целей можно использовать событие before_user_command
Демо пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
REPORT ztest_pau. CLASS lcl_alv_table DEFINITION. PUBLIC SECTION. METHODS: constructor, show RETURNING VALUE(ro_me) TYPE REF TO lcl_alv_table. PRIVATE SECTION. DATA mo_grid TYPE REF TO cl_gui_alv_grid. DATA mt_sflight TYPE TABLE OF sflight WITH DEFAULT KEY. METHODS: get_fieldcat RETURNING VALUE(rt_fieldcat) TYPE lvc_t_fcat, handle_before_user_command FOR EVENT before_user_command OF cl_gui_alv_grid IMPORTING e_ucomm. ENDCLASS. CLASS lcl_alv_table IMPLEMENTATION. METHOD constructor. SELECT * FROM sflight INTO TABLE mt_sflight. CREATE OBJECT mo_grid EXPORTING i_parent = cl_gui_container=>default_screen EXCEPTIONS OTHERS = 1. SET HANDLER handle_before_user_command FOR mo_grid. IF sy-subrc <> 0. ENDIF. ENDMETHOD. METHOD get_fieldcat. CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING * I_BUFFER_ACTIVE = i_structure_name = 'SFLIGHT' * I_CLIENT_NEVER_DISPLAY = 'X' * I_BYPASSING_BUFFER = * I_INTERNAL_TABNAME = CHANGING ct_fieldcat = rt_fieldcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. WRITE ''. ENDMETHOD. METHOD show. DATA ls_layout TYPE lvc_s_layo. DATA(lt_fieldcat) = get_fieldcat( ). CALL METHOD mo_grid->set_table_for_first_display EXPORTING is_layout = ls_layout CHANGING it_fieldcatalog = lt_fieldcat it_outtab = mt_sflight. ro_me = me. ENDMETHOD. METHOD handle_before_user_command. Вот тут мы можем, например вызвать, свой вызов формуляра И дальше заглушить стандартную команду. mo_grid->set_user_command( EXPORTING i_ucomm = 'DUMMY' ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA(go_alv) = NEW lcl_alv_table( )->show( ). |