출처: 문바이님 블로그
https://blog.daum.net/rightvoice/783
CL_GUI_ALV_GRID [Event 정리]- Data_Changed
DATA_CHANGED. 타 프로그램에서 Data-Changed Event와는 달리 ALV에서는 어떠한 방식으로 수정 될 때 이벤트를 호출할지 등록해 주는 과정이 필요하다 만약 아무런 등록을 해주지 않는다면 이 event는 동
blog.daum.net
DATA_CHANGED.
타 프로그램에서 Data-Changed Event와는 달리 ALV에서는 어떠한 방식으로 수정 될 때 이벤트를 호출할지 등록해 주는 과정이 필요하다
만약 아무런 등록을 해주지 않는다면 이 event는 동작하지 않으므로 주의해야 한다
1) Class의 구성...
CLASS lcl_event DEFINITION.
PUBLIC SECTION.
METHODS :
handle_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 handle_data_changed.
PERFORM event_data USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
"er_data_changed->mt_good_cells (여기에 수정cell정보가 잇다)
ENDMETHOD.
ENDCLASS.
2) Enter에 의한변경
-> Cell에서 Data수정후 Enter키를 입력했을때만 수정된것으로 간주한다.
Enter에 의한변경 + F4(Possible Entry)에의한 변경.
->Cell를 수정하는 방법은 Key-in하는 방법과 F4(Possible Entry)를 선택하는 방법이 있다. 2두가지를 모두 수정으로 간주한다.
왜? 이렇게 2가지로 나누었을까? ALV에는 F4(Possible Entry)라는 특수기능이 있다. 또한 onF4라는 Event도 있다. 이를 분리해서 처리할경우를 대비하기 위함이다.
call method go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter. "Enter Key만을 수정으로 간주한다.
call method go_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "Enter Key + F4를 수정으로 간주한다
*=>만약에 윗쪽 구문들다 실행하지 않으면 어떤일이 발생할까?
*화면상의 [Screen Data]와 [Output Data(itab)]가 따로놀게 된다.
*따라서 반드시 편집이 가능한 [ALV]의 경우 이와같이 명령을 반드시 등록해 주어야 한다.
3) Event처리 서부루틴을 기술한다
작동순서
1) 내가 원하는 내용이 수정이 이루워졌는지 확인한다.
[er_data_changed 개체를 통해 확인가능하다]
2) 사용자가 입력한 내용을 바탕으로
수정내역을 작성한다.
3) 작성된 수정내역을 itab에 반영한다.
4) 작성된 수정내역을 ALV-Screen에 반영한다.
FORM event_data USING er_data_changed type 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.
CASE ls_mod_cells-FieldName.
WHEN 'USER_ID'.
"---데이타 가공(itab)
gt_display-user_nm = '홍길동'.
gt_display-user_dept = '관리부'.
modify gt_display.
"---데이타 가공(Screen)
CALL METHOD er_data_changed->modify_cell
EXPORTING
I_ROW_ID = lv_idx
I_FIELDNAME = 'USER_NM'
I_VALUE = '홍길동'.
CALL METHOD er_data_changed->modify_cell
EXPORTING
I_ROW_ID = lv_idx
I_FIELDNAME = 'USER_DEPT'
I_VALUE = '관리부'.
ENDCASE.
ENDLOOP.
ENDFORM. " event_data
'SAP > ABAP ALV' 카테고리의 다른 글
| (ABAP ALV) ALV SIMPLE TREE - TBU (0) | 2021.10.21 |
|---|---|
| (ABAP ALV) 필드카탈로그 및 SORT (0) | 2021.08.23 |
| (ABAP ALV) Field Catalog 정리 (0) | 2021.07.10 |
| (ABAP ALV) CL_GUI_ALV_GRID Event (0) | 2021.07.04 |
| (ABAP ALV) Field Catalog (0) | 2021.07.04 |