定义
DATA:gt_event TYPE slis_t_event WITH HEADER LINE.
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.
INCLUDE zrpp_001_clc.
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
加载include
*&---------------------------------------------------------------------*
*& 包含 ZRPP_001_CLC
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Class lcl_event_receiver
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Class (Implementation) lcl_event_receiver
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
* PERFORM refresh.
DATA stbl TYPE lvc_s_stbl.
break sapfy.
LOOP AT gt_out INTO gw_out.
READ TABLE gt_out_temp_001 INTO gw_out_temp_001 WITH KEY zno = gw_out-zno.
IF sy-subrc EQ 0 AND gw_out-apply > gw_out_temp_001-apply.
DATA:l_string TYPE string.
CLEAR:l_string.
CONCATENATE '行项目' gw_out-zno '应发数量不能超过需求数量-已领数量' INTO l_string.
MESSAGE l_string TYPE 'E'.
ELSE.
MODIFY gt_out FROM gw_out TRANSPORTING apply zremark.
ENDIF.
ENDLOOP.
* 稳定刷新
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "lcl_event_receiver
ALV新增事件
gt_event-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件 调用来获取ALV对象并注册回车事件
gt_event-form = 'FM_BUTTON'.
APPEND gt_event .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = g_repid
i_bypassing_buffer = 'X'
i_save = 'A'
is_layout_lvc = l_layout
i_callback_pf_status_set = 'SET_PF'
i_callback_user_command = 'USER_COM'
it_fieldcat_lvc = lt_fieldcat[]
i_default = 'X'
it_events = gt_event[]
TABLES
t_outtab = gt_out[]
EXCEPTIONS
program_error = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
最后新增button事件
*&---------------------------------------------------------------------*
*& Form fm_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
e_grid = ref_grid
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
* CALL METHOD ref_grid->check_changed_data.
* 设置enter事件
CALL METHOD 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_modify FOR ref_grid.
ENDFORM. "FM_BUTTON