개요
cl_gui_alv_grid 에서 필드 카탈로그를 통해 설정한 체크박스는 체크 후 새로고침해야 인터널 테이블에 해당 체크 값('X')이 저장됩니다. (새로고침 없이 체크박스 체크만 할 경우 인터널 테이블에 반영되지 않음)
이는 매우 불편하므로 DATA_CHANGED 이벤트를 통해 체크 시 바로 인터널 테이블에 반영되도록 만들어 보겠습니다.
전제
아래 구현 예제는 다음과 같이 전제합니다.
- alv를 구현하기 위해 필요한 일반적인 코드가 구현되어 있다. (아래 구현 예제는 이러한 코드가 모두 구현된 후에 추가해야 하는 코드만 서술합니다)
- 변수 ZCHECKBOX는 구조체 안에 TYPE C LENGTH 1 데이터 타입으로 선언되어 있다.
- 필드 카탈로그 내 ZCHECKBOX의 EDIT에는 'X' 값이 저장되어 있다.
- 사전에 REFRESH PERFORM 이 구현되어 있으며 코드는 아래와 같다.
▶ REFRESH PERFORM
단순히 해당 그리드에 REFRESH_TABLE_DISPLAY메소드를 호출한 것입니다.
FORM REFRESH .
DATA : LS_STABLE TYPE LVC_S_STBL.
CALL METHOD GC_GRID1->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE
.
ENDFORM.
구현
이벤트 클래스 정의부, 실행부에 DATA_CHANGED 핸들러를 작성해주세요.
▶ 이벤트 클래스 정의부
CLASS 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 EVENT IMPLEMENTATION.
...
METHOD HANDLER_DATA_CHANGED.
PERFORM ALV_HANDLER_DATA_CHANGED USING ER_DATA_CHANGED E_ONF4 E_ONF4_BEFORE E_ONF4_AFTER E_UCOMM.
ENDMETHOD.
ENDCLASS.
▶ 이벤트 핸들러 FORM 작성
FORM ALV_HANDLER_DATA_CHANGED USING P_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL
P_ONF4
P_ONF4_BEFORE
P_ONF4_AFTER
P_UCOMM.
DATA : LS_MODI TYPE LVC_S_MODI.
LOOP AT P_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MODI.
" 체크박스 업데이트
IF LS_MODI-FIELDNAME = 'ZCHECKBOX'.
CLEAR : GS_STUDENT.
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX LS_MODI-ROW_ID.
" 인터널 테이블 수정
MODIFY GT_STUDENT FROM GS_STUDENT INDEX LS_MODI-ROW_ID.
ENDIF.
ENDLOOP.
PERFORM REFRESH.
ENDFORM.
▶ 이벤트 객체 생성 및 핸들러 연결
PBO에서 grid 객체 생성 후 alv 출력 전 아래와 같은 PERFORM을 작성하여 호출해 주세요.
FORM CLASS_EVENT .
CALL METHOD GC_GRID1->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
.
CREATE OBJECT GO_EVENT.
...
SET HANDLER GO_EVENT->HANDLER_DATA_CHANGED FOR GC_GRID1.
ENDFORM.
참고 자료
'프로그래밍 > 기타 프로그래밍' 카테고리의 다른 글
[java] @Override 메소드 오버라이딩에 대한 이해 (0) | 2024.01.13 |
---|---|
[python] Firebase Admin SDK child path 활용 데이터 읽기 (0) | 2024.01.02 |
[C++] vector <queue<int>> 그리고 vector<pair<int,int>> (1) | 2023.11.20 |
[SAP/ABAP] RETURN과 EXIT의 차이 (0) | 2023.11.13 |
[SAP] client 입력 모드 변경 (insert / override) (0) | 2023.10.30 |