SAP ABAP OOALV F4事件/回车事件的注册和使用
*----------------------------------------------------------------------*
* DEFINE LOCAL CLASS
*----------------------------------------------------------------------*
CLASS lc_application DEFINITION.
************************************************************************
* CLASS NAME: LC_APPLICATION
* DESCRIPTION: RESPONSE EVENTS GENERATED BY USERS COMMANDS
************************************************************************
PUBLIC SECTION.
METHODS:
handle_onf4_help
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data.
METHODS handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "lc_application DEFINITION
*---------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lc_application IMPLEMENTATION.
*搜索帮助
METHOD handle_onf4_help.
PERFORM frm_handle_onf4_help USING e_fieldname
es_row_no
er_event_data.
er_event_data->m_event_handled = abap_true.
ENDMETHOD. "handle_on_f4 "handle_user_command
METHOD handle_data_changed.
PERFORM frm_handle_data_changed USING er_data_changed.
ENDMETHOD.
ENDCLASS. "lc_application IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form frm_display_data
*&---------------------------------------------------------------------*
* text:ALV显示
*----------------------------------------------------------------------*
FORM frm_display_data .
DATA:lt_event TYPE slis_t_event,
ls_event LIKE LINE OF lt_event.
ls_event-name = slis_ev_caller_exit_at_start.
ls_event-form = 'FRM_CALLER_EXIT'.
APPEND ls_event TO lt_event.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-stylefname = 'STYLE'.
* 载入ALV需要显示的列
PERFORM frm_append_col .
IF gt_list IS NOT INITIAL.
* 调用function module显示ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = gt_fieldcat[]
is_layout_lvc = gs_layout
i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
i_save = 'A'
it_events = lt_event[]
TABLES
t_outtab = gt_list
EXCEPTIONS
program_error = 1
OTHERS = 2.
ELSE.
MESSAGE '没有可执行的数据' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF..
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& text:ALV自定义工具栏设置
*&---------------------------------------------------------------------*
FORM frm_set_pf_status USING u_extab TYPE slis_t_extab.
DATA lt_func TYPE TABLE OF sy-ucomm.
IF p_radio2 EQ abap_true OR p_radio3 EQ abap_true.
APPEND 'EXECUTE' TO lt_func.
ENDIF.
SET PF-STATUS 'PF_1000' EXCLUDING lt_func.
* 注册f4事件
PERFORM frm_set_f4_event.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text:载入显示字段
*&---------------------------------------------------------------------*
FORM frm_user_command USING u_ucomm TYPE syucomm
u_self TYPE slis_selfield.
DATA(lv_ucomm) = u_ucomm.
DATA:lt_rows TYPE lvc_t_row WITH HEADER LINE.
DATA:ls_052 TYPE zmmt0052,
ls_list TYPE zqmt0114.
* 获取alv对象
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
** 判断用户操作
CASE lv_ucomm.
WHEN 'DATA_SAVE'.
WHEN OTHERS.
* Do nothing
ENDCASE.
PERFORM frm_ref_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM frm_caller_exit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_caller_exit USING u_exit TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
* 设置回车事件
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
CALL METHOD go_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
* 设置光标焦点移开被修改单元格后触发事件
CALL METHOD go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
ENDFORM. "CALLER_EXIT
FORM frm_set_f4_event .
DEFINE mcr_fillf4.
CLEAR gs_f4_event.
gs_f4_event-fieldname = &1.
gs_f4_event-register = abap_true.
* gs_f4_event-getbefore = abap_true.
gs_f4_event-chngeafter = abap_true.
gs_f4_event-internal = space.
INSERT gs_f4_event INTO TABLE gt_f4_event.
END-OF-DEFINITION.
CLEAR:gt_f4_event.
mcr_fillf4 'PONDERING_NO'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = go_grid.
IF go_application IS INITIAL.
CREATE OBJECT go_application.
ENDIF.
SET HANDLER go_application->handle_onf4_help FOR go_grid.
SET HANDLER go_application->handle_data_changed FOR go_grid.
CALL METHOD go_grid->register_f4_for_fields
EXPORTING
it_f4 = gt_f4_event.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_handle_onf4_help
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_FIELDNAME
*& --> ES_ROW_NO
*& --> ER_EVENT_DATA
*&---------------------------------------------------------------------*
FORM frm_handle_onf4_help USING u_fieldname TYPE lvc_fname
u_row_no TYPE lvc_s_roid
u_event_data TYPE REF TO cl_alv_event_data.
CASE u_fieldname.
WHEN ' '. "F4字段名称
PERFORM frm_f4_get_value USING u_fieldname
u_row_no
u_event_data.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_handle_data_changed
*&---------------------------------------------------------------------*