alv-event相关事件

回车、双击、数据更改、button

DATA :  gt_events       TYPE slis_t_event.
DATA  ls_events  TYPE slis_alv_event .
"选择屏幕之后
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
"button
    METHODS:
      handle_button_click
                  FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING es_col_id es_row_no.
"data change
  METHODS:
      handle_data_changed
                  FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.
"data change
  METHODS HANDLE_MODIFY
                  FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
      IMPORTING E_MODIFIED ET_GOOD_CELLS.
"回车
    METHODS:
      handle_enter
                  FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells.
"双击
    METHODS:
      handle_double_click
                  FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row
                  e_column
                  es_row_no.
ENDCLASS.
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .

CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_button_click.
    PERFORM button_click USING es_col_id es_row_no.
  ENDMETHOD.                    
  METHOD handle_data_changed.
    PERFORM frm_handle_data_changed CHANGING er_data_changed.
  ENDMETHOD.                    "HANDLE_CHANGED_DATA
  METHOD HANDLE_MODIFY.

    LOOP AT   IT_TAB INTO WA_TAB .
     *要处理的逻辑*
      MODIFY IT_TAB FROM WA_TAB.

    ENDLOOP.

    IF E_MODIFIED = 'X'.
      STBL-ROW = 'X'." 基于行的稳定刷新
      STBL-COL = 'X'." 基于列稳定刷新
      CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE = STBL.
    ENDIF.
  ENDMETHOD.
*--DATA_CHANGED_FINISHED(ENTER)
  METHOD handle_enter.
    PERFORM frm_handle_enter.."直接写代码
  ENDMETHOD.
*--Double Click
  METHOD handle_double_click.
    PERFORM frm_display_message."直接写代码
  ENDMETHOD.

ENDCLASS.


  ls_events-name = 'CALLER_EXIT'.   "slis_ev_caller_exit_at_start事件
  ls_events-form = 'DATA_CHANGE'.
  APPEND ls_events TO gt_events.

FORM data_change USING e_grid TYPE slis_data_caller_exit .

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = cl_ref_grid.

* Set data changed evententer
  CALL METHOD cl_ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.

* Set enter event
  CALL METHOD cl_ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.


  CREATE OBJECT gt_event_receiver.
  SET HANDLER   gt_event_receiver->handle_button_click FOR cl_ref_grid.
  SET HANDLER   gt_event_receiver->handle_data_changed FOR cl_ref_grid."光标移动触发
  SET HANDLER   gt_event_receiver->HANDLE_MODIFY FOR cl_ref_grid.
  SET HANDLER   gt_event_receiver->handle_enter        FOR cl_ref_grid.
  SET HANDLER   gt_event_receiver->handle_double_click        FOR cl_ref_grid.
ENDFORM.                    "FM_BUTTON

FORM button_click  USING    p_col
                            p_row TYPE lvc_s_roid.."button
  CLEAR gt_mess1.
  READ TABLE gt_tab INTO gs_tab INDEX p_row-row_id.
  IF sy-subrc = 0.
   
  ENDIF.
ENDFORM.

FORM frm_handle_data_changed CHANGING er_data_changed TYPE REF TO cl_alv_changed_data_protocol..
  FIELD-SYMBOLS: <f_so> LIKE LINE OF gt_so.
  DATA: ls_mod_cell TYPE lvc_s_modi.

  IF er_data_changed->mt_mod_cells IS NOT INITIAL.

    LOOP AT er_data_changed->mt_mod_cells INTO ls_mod_cell.
      CASE ls_mod_cell-fieldname .
        WHEN 'OLFMNG'. " 根据原因分析类型的变化提取对应的描述
          READ TABLE gt_so INTO gs_so INDEX ls_mod_cell-row_id .
          IF sy-subrc = 0.
            LOOP AT gt_so ASSIGNING <f_so> WHERE vbeln = gs_so-vbeln   AND uepos = gs_so-posnr.
              <f_so>-olfmng = ls_mod_cell-value.“更改过的值
            ENDLOOP.
          ENDIF.
      ENDCASE.
    ENDLOOP.


    CALL METHOD cl_ref_grid->refresh_table_display
      EXPORTING
        i_soft_refresh = 'X'.
  ENDIF.
ENDFORM.


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。