728x90
반응형
사용자가 자재유형을 입력하고 엔터를 치거나 다른 곳을 클릭하면 자재번호와 자재유형명이 나오게 한다.
DATA_CHANGED
이 이벤트는 사용자가 ALV에서 값을 변경한다거나 어떤 행동을 한뒤 엔터를 치거나 다른 셀을 클릭하면 타는 이벤트이다.
클래스 정의
CLASS lcl_event DEFINITION.
PUBLIC SECTION.
METHODS : handler_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
METHOD handler_data_changed.
PERFORM data_changed USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
ENDMETHOD. "handler_data_changed
ENDCLASS.
이벤트 로직
FORM data_changed USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol
e_onf4 TYPE char01
e_onf4_before TYPE char01
e_onf4_after TYPE char01
e_ucomm TYPE sy-ucomm.
DATA: ls_mod_cells TYPE lvc_s_modi.
LOOP AT er_data_changed->mt_good_cells INTO ls_mod_cells.
기본적으로 이렇게 사용된다.
⭐ get_cell_value
CASE ls_mod_cells-fieldname.
WHEN 'MTART'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = ls_mod_cells-fieldname
IMPORTING
e_value = gs_tab-mtart.
get_cell_value는 변경된 값을 가져오는 메소드이다. 보통 이 메소드로 변경된 값을 가져오고, 변경된 값을 modify_cell 메소드를 사용해 ALV에 반영한다. 그래서 두개가 같이 사용되는 경우가 많다.
ls_mod_cells-row_id
변경된 행의 INDEX가 담긴다.ls_mod_cells-fieldname
변경된 열(필드)의 이름이 담긴다.e_value
변경된 값을 담는다.
⭐ modify_cell
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MATNR'
i_value = gs_tab-matnr.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MTBEZ'
i_value = gs_tab-mtbez.
ENDCASE.
ENDFORM.
(+)
PERFORM MODIFY_CELL USING LS_GOOD_CELL-ROW_ID
LS_GOOD_CELL-TABIX
LS_GOOD_CELL-FIELDNAME
PR_DATA_CHANGED
CHANGING GT_OUTTAB-KUNNR.
FORM MODIFY_CELL USING P_ROW_ID
P_TABIX
P_FIELDNAME
PR_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
CHANGING P_VALUE.
CALL METHOD PR_DATA_CHANGED->MODIFY_CELL
EXPORTING
I_ROW_ID = P_ROW_ID
I_TABIX = P_TABIX
I_FIELDNAME = P_FIELDNAME
I_VALUE = P_VALUE.
ENDFORM. "modify_cell
i_value
변경할 값을 말한다. gs_tab의 자재번호와 자재유형명에 담아준 값으로 변경된다.
핸들러 등록
다른 이벤트와 마찬가지로 핸들러를 등록해줘야 한다. 핸들러를 등록해주지 않으면 이벤트, 디버깅 아무것도 타지 않으니 주의하며 꼭!!!! 등록한다.
CREATE OBJECT g_application.
SET HANDLER g_application->handler_data_changed FOR g_alv.
데이터 변경시 바로 이벤트 타게함
alv display하기 전에 입력
CALL METHOD g_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
728x90
반응형
'ABAP' 카테고리의 다른 글
ALV Top-of-Page (0) | 2023.02.21 |
---|---|
ALV 특정 Cell EDIT (0) | 2023.02.21 |
ALV 툴바 버튼 Add & Exclude (0) | 2023.02.20 |
ALV 조회, 변경 mode (0) | 2023.02.20 |
유용한 날짜 function들 (0) | 2023.02.20 |
댓글