abap demon for oo alv, handle each event 注册alv的事件(data_changed_event.....)
主要了解,ALV界面的各种事件,如data_changed event
*&---------------------------------------------------------------------* *& Report Z_ALV_OO_TEST_KEN *& *&---------------------------------------------------------------------* *& *& test for oo event *&---------------------------------------------------------------------* REPORT Z_ALV_OO_TEST_KEN. TYPE-POOLS: slis. *&---------------------------------------------------------------------* *& Type define *&---------------------------------------------------------------------* TYPES: BEGIN OF ty_check_type, matnr TYPE char18, mtart TYPE char4, END OF ty_check_type, tt_check_type TYPE ty_check_type. DATA lt_check_type TYPE TABLE OF tt_check_typE. DATA lS_check_type TYPE TY_check_type. DATA: * ALV DEFINIE go_container TYPE REF TO cl_gui_custom_container, go_alv_grid TYPE REF TO cl_gui_alv_grid, lt_fieldcat TYPE lvc_t_fcat, lw_fieldcat LIKE LINE OF lt_fieldcat, lw_layout TYPE lvc_s_layo, i_grid_settings TYPE lvc_s_glay, GT_FIELDCAT TYPE LVC_T_FCAT, " 功能C: 设定fieldcat GS_FIELDCAT TYPE LVC_S_FCAT." 功能C: 设定fieldcat CLASS cl_event_receiver DEFINITION. PUBLIC SECTION. " 声明单击事件的方法 METHODS handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id. " 声明双击事件方法 METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column. " data change event METHODS handle_data_changed FOR EVENT data_changed of cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. CLASS cl_event_receiver IMPLEMENTATION. METHOD handle_hotspot_click. CONDENSE e_row_id NO-GAPS. CONDENSE e_column_id NO-GAPS. MESSAGE i001(00) WITH '单击事件->行号:' e_row_id '、列名:' e_column_id. ENDMETHOD. " 双击事件方法的实现 METHOD handle_double_click. CONDENSE e_row NO-GAPS. CONDENSE e_column NO-GAPS. MESSAGE i001(00) WITH '双击事件->行号:' e_row '、列名:' e_column. ENDMETHOD. "handle_HOTSPOT_CLICK " data chenged event METHOD handle_data_changed. PERFORM data_changed USING er_data_changed. ENDMETHOD. ENDCLASS. "cl_event_receiver IMPLEMENTATION DATA: event_receiver TYPE REF TO cl_event_receiver. *&---------------------------------------------------------------------* *& SELECTION-SCREEN *&---------------------------------------------------------------------* PARAMETERS:p_matnr TYPE char18 OBLIGATORY. *&---------------------------------------------------------------------* *& INITIALIZATION. *&---------------------------------------------------------------------* INITIALIZATION. *&---------------------------------------------------------------------* *& START-OF-SELECTION. *&---------------------------------------------------------------------* START-OF-SELECTION. *&---------------------------------------------------------------------* *& END-OF-SELECTION. *&---------------------------------------------------------------------* END-OF-SELECTION. SELECT matnr mtart FROM mara INTO TABLE lt_check_type WHERE matnr = p_matnr. IF sy-subrc <> 0. MESSAGE 'please input correct Material Number!' TYPE 'E'. EXIT. ENDIF. CALL SCREEN 981. INCLUDE z_alv_oo_test_ken_ini_alv. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0981 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_0981 INPUT. DATA ok_code TYPE ok_code. CASE ok_code. WHEN 'E' OR 'ENDE' OR 'CANCEL'. LEAVE PROGRAM. WHEN 'SPOS'. * PERFORM updat_FARR_D_DEFITEM_db. LOOP AT lt_check_type INTO LS_CHECK_TYPE. ENDLOOP. WHEN OTHERS. ENDCASE. ENDMODULE. " USER_COMMAND_0981 INPUT *&---------------------------------------------------------------------* *& Module USER_EXIT_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_EXIT_0100 INPUT. LEAVE TO SCREEN 0. ENDMODULE. " USER_EXIT_0100 INPUT *&---------------------------------------------------------------------* *& Form DATA_CHANGED *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_ER_DATA_CHANGED text *----------------------------------------------------------------------* FORM DATA_CHANGED USING P_ER_DATA_CHANGED TYPE REF TO cl_alv_changed_data_protocol. DATA : l_tabix TYPE sy-tabix . DATA : ls_row TYPE ty_check_type . DATA : ls_data TYPE ty_check_type . FIELD-SYMBOLS: <f_data> TYPE tt_check_type. FIELD-SYMBOLS: <f_value> TYPE lvc_s_modi-value . FIELD-SYMBOLS: <f_field> TYPE ANY . DATA : ls_modi TYPE lvc_s_modi . * here will handle the data changed LOOP AT p_er_data_changed->mt_good_cells INTO ls_modi . " save the value which you changed READ TABLE lt_check_type ASSIGNING <f_data> INDEX ls_modi-row_id . " save the default value ASSIGN ls_modi-value To <f_value> . ASSIGN COMPONENT ls_modi-fieldname OF STRUCTURE <f_data> TO <f_field> . IF sy-subrc EQ 0 . <f_field> = <f_value> . " if have changes , will save edit interal table directly ENDIF. ENDLOOP. ENDFORM.
lw_layout-zebra = abap_true. lw_layout-cwidth_opt = abap_true. lw_layout-sel_mode = 'D'. IF go_container is INITIAL. create OBJECT go_container EXPORTING container_name = 'CUS'. " Name of the Screen CustCtrl CREATE OBJECT go_alv_grid EXPORTING i_parent = go_container . " Parent Container lw_layout-edit = abap_true. lw_layout-zebra = abap_true. * lw_layout-stylefname = 'CT'. PERFORM prepare_fieldcatalog. "make chekbox for insert and delete CREATE OBJECT event_receiver. " 注册事件handler方法 * SET HANDLER event_receiver->handle_hotspot_click FOR go_alv_grid. * SET HANDLER event_receiver->handle_double_click FOR go_alv_grid. SET HANDLER event_receiver->handle_data_changed FOR go_alv_grid.
"以下两个方法达到的效果是:光标离开正在编辑的单元格时,
CALL METHOD go_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD go_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* CALL METHOD go_alv_grid->set_toolbar_interactive. CALL METHOD go_alv_grid->set_table_for_first_display EXPORTING * i_structure_name = 'ZKEN' is_layout = lw_layout i_default = abap_true i_save = 'A' * is_variant = ls_variant CHANGING it_fieldcatalog = GT_FIELDCAT it_outtab = lt_check_type. " Output Table *Set editable cells to ready for input initially CALL METHOD go_alv_grid->set_ready_for_input EXPORTING i_ready_for_input = 1. ELSE. CALL METHOD go_alv_grid->refresh_table_display. ENDIF.