SAP ABAP ALV (LVC) 의 사용자 정의 이벤트 (F4 도움말 이벤트, 리턴 ENTER 단추 이벤트) 의 실례
1.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED
*----------------------------------------------------------------------*
* LCL_EVENT_RECEIVER
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA gv_flg TYPE char01.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* lcl_event_receiver :
*----------------------------------------------------------------------*
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.
METHODS:
handle_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
DATA: lv_enter TYPE REF TO cl_gui_event,
lv_eventid TYPE i.
*
lv_enter = tem_grid->cur_event.
*
IF lv_enter IS NOT INITIAL.
lv_eventid = lv_enter->eventid.
ENDIF.
* [ ] , (19: )
IF lv_eventid = 19
AND sy-ucomm = ''.
IF p_mmvds = 'X'.
*
PERFORM set_name1_maktx.
* ,alv
PERFORM refresh_table_alv.
* ( )
PERFORM check_line_mmvds.
ELSEIF p_detail = 'X'.
* ( )
PERFORM check_line_dtdetail.
ELSEIF p_vds = 'X'.
* ( )
PERFORM set_name1_vds.
* ,alv
PERFORM refresh_table_alv.
* ( )
PERFORM check_line_vds.
ENDIF.
ENDIF.
* ,alv
PERFORM refresh_table_alv.
ENDMETHOD. "HANDLE_MODIFY
METHOD handle_f4.
*
IF p_vds = 'X'.
* f4
PERFORM f4_help_zsjcs USING e_fieldname
es_row_no.
* ,alv
PERFORM refresh_table_alv.
ENDIF.
ENDMETHOD. "HANDLE_F4
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
2. alv
**EVENT LAYOUT DATA: ls_events TYPE slis_alv_event, lt_event TYPE slis_t_event, ls_layout TYPE lvc_s_layo. ls_events-name = 'CALLER_EXIT'. ls_events-form = 'FM_BUTTON'. APPEND ls_events TO lt_event. ls_layout-stylefname = 'FIELD_STYL'. ls_layout-zebra = 'X'. ls_layout-box_fname = 'CHK_BOX'. ls_layout-cwidth_opt = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS_SET' i_callback_user_command = 'USER_COMMAND' is_layout_lvc = ls_layout it_fieldcat_lvc = gt_fieldcat_lvc i_save = 'X' it_events = lt_event TABLES t_outtab = pt_outdata EXCEPTIONS program_error = 1 OTHERS = 2.
3.
*&---------------------------------------------------------------------* *& Form FM_BUTTON *&---------------------------------------------------------------------* * enter *----------------------------------------------------------------------* * -->E_GRID text *----------------------------------------------------------------------* FORM fm_button USING e_grid TYPE slis_data_caller_exit. DATA: lv_event_receiver TYPE REF TO lcl_event_receiver, lt_f4 TYPE lvc_t_f4, ls_f4 TYPE lvc_s_f4. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = tem_grid. * enter CALL METHOD tem_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter EXCEPTIONS error = 1 OTHERS = 2. CREATE OBJECT lv_event_receiver. SET HANDLER lv_event_receiver->handle_modify FOR tem_grid. * f4 CHECK gv_flg IS INITIAL. gv_flg = 'X'. ls_f4-fieldname = 'ZSJCS'. " ( F4 ) ls_f4-register = 'X'. ls_f4-getbefore = 'X'. ls_f4-chngeafter = 'X'. INSERT ls_f4 INTO TABLE lt_f4. CREATE OBJECT lv_event_receiver. SET HANDLER lv_event_receiver->handle_f4 FOR tem_grid. CALL METHOD tem_grid->register_f4_for_fields EXPORTING it_f4 = lt_f4[]. ENDFORM. "FM_BUTTON
4. alv-status
*&---------------------------------------------------------------------* *& Form PF_STATUS_SET *&---------------------------------------------------------------------* * status *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM pf_status_set USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'STATUS_ALV'. ENDFORM. "PF_STATUS_SET
5. alv-comman
*&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* * USER COMMMAND *----------------------------------------------------------------------* * -->P_UCOMM text * -->PS_SELFIELD text *----------------------------------------------------------------------* FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA l_grid TYPE REF TO cl_gui_alv_grid. *------------ ALV ---------------------------------* CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = l_grid. CALL METHOD l_grid->check_changed_data. CASE ucomm. * [ ] WHEN 'CREATE'. * IF p_mmvds = 'X'. * ( ) PERFORM cteate_line_mmvds. * ELSEIF p_detail = 'X'. * ( ) PERFORM cteate_line_dtdetail. * ELSEIF p_vds = 'X'. * ( ) PERFORM cteate_line_vds. ENDIF. selfield-refresh = 'X'. " alv , * [ ] WHEN 'DELETE'. * IF p_mmvds = 'X'. * ( ) PERFORM delete_line_mmvds. * ELSEIF p_detail = 'X'. * ( ) PERFORM delete_line_dtdetail. * ELSEIF p_vds = 'X'. * ( ) PERFORM delete_line_vds. ENDIF. selfield-refresh = 'X'. " alv , * [ ] WHEN 'SAVE'. * IF p_mmvds = 'X'. * ( ) PERFORM save_data_mmvds. * ELSEIF p_detail = 'X'. * ( ) PERFORM save_data_dtdetail. * ELSEIF p_vds = 'X'. * ( ) PERFORM save_data_vds. ENDIF. ENDCASE. *------------ ALV ---------------------------------* CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = l_grid. CALL METHOD l_grid->check_changed_data. ENDFORM. "USER_COMMAND
6.
*&---------------------------------------------------------------------* *& Form REFRESH_TABLE_ALV *&---------------------------------------------------------------------* * ,alv *----------------------------------------------------------------------* FORM refresh_table_alv . DATA: stbl TYPE lvc_s_stbl. * stbl-row = 'X'." stbl-col = 'X'." CALL METHOD tem_grid->refresh_table_display EXPORTING is_stable = stbl. ENDFORM. " REFRESH_TABLE_ALV
*&---------------------------------------------------------------------*
*& Form F4_HELP_ZSJCS
*&---------------------------------------------------------------------*
* f4
*----------------------------------------------------------------------*
FORM f4_help_zsjcs USING p_fieldname TYPE lvc_fname
p_row_no TYPE lvc_s_roid.
DATA: lt_dtdetail TYPE STANDARD TABLE OF ztpp_dtdetail,
lt_return TYPE STANDARD TABLE OF ddshretval,
ls_return TYPE ddshretval.
CLEAR gw_vds.
READ TABLE gt_vds INTO gw_vds INDEX p_row_no-row_id.
IF p_fieldname = 'ZSJCS'.
SELECT *
INTO TABLE lt_dtdetail
FROM ztpp_dtdetail
WHERE werks = gw_vds-werks.
SORT lt_dtdetail BY werks zsjcs.
DELETE ADJACENT DUPLICATES FROM lt_dtdetail
COMPARING werks zsjcs.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZSJCS' "lt
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'ZSJCS' "
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_dtdetail "
return_tab = lt_return "
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE lt_return INTO ls_return INDEX 1.
gw_vds-zsjcs = ls_return-fieldval.
MODIFY gt_vds FROM gw_vds INDEX p_row_no-row_id
TRANSPORTING zsjcs.
ENDIF.
ENDFORM. " F4_HELP_ZSJCS
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.