Abapteur Note
DATA_CHANGED METHOD 본문
ALV의 내용을 수정하여 인터널 테이블에 반영되기 전 유효성 검사 등을 하고 싶을 때 사용하는 메소드이다.
Example) 특정 셀의 내용을 수정하면 조건에 따라 다른 셀의 내용도 수정됨
CLASS LCL_HANDLE_TOOLBAR DEFINITION.
PUBLIC SECTION.
METHODS ADD_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT.
METHODS HANDLER_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
METHODS HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED.
ENDCLASS.
CLASS LCL_HANDLE_TOOLBAR IMPLEMENTATION.
METHOD ADD_TOOLBAR.
PERFORM ADD_TOOLBAR USING E_OBJECT.
ENDMETHOD.
METHOD HANDLER_USER_COMMAND.
PERFORM HANDLER_USER_COMMAND USING E_UCOMM.
ENDMETHOD.
METHOD HANDLE_DATA_CHANGED.
PERFORM DATA_CHANGED USING ER_DATA_CHANGED.
ENDMETHOD.
ENDCLASS.
FORM DATA_CHANGED USING P_ER_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
DATA LS_MOD_CELL TYPE LVC_S_MODI.
DATA LV_AIRPFROM TYPE SPFLI-AIRPFROM.
LOOP AT P_ER_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELL.
CLEAR GS_T01.
CASE LS_MOD_CELL-FIELDNAME.
WHEN 'AIRPFROM'.
SELECT SINGLE CITYFROM
FROM SPFLI INTO @DATA(LV_CITYFROM)
WHERE AIRPFROM EQ @LS_MOD_CELL-VALUE.
IF LV_CITYFROM IS NOT INITIAL.
CALL METHOD P_ER_DATA_CHANGED->MODIFY_CELL
EXPORTING
I_ROW_ID = LS_MOD_CELL-ROW_ID " Row ID
I_FIELDNAME = 'CITYFROM' " Field Name
I_VALUE = LV_CITYFROM. " Value
ELSEIF LV_CITYFROM IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = '데이터 유효성 검사' " Title of dialog box
TEXT_QUESTION = '유효한 값이 아닙니다.'. " Question text in dialog box
READ TABLE GT_T01 INTO GS_T01 INDEX LS_MOD_CELL-ROW_ID.
CALL METHOD P_ER_DATA_CHANGED->MODIFY_CELL
EXPORTING
I_ROW_ID = LS_MOD_CELL-ROW_ID " Row ID
I_FIELDNAME = 'AIRPFROM' " Field Name
I_VALUE = GS_T01-AIRPFROM. " Value
ENDIF.
ENDCASE.
READ TABLE GT_T01 INTO GS_T01 INDEX LS_MOD_CELL-ROW_ID.
ENDLOOP.
ENDFORM.
ALV 내용이 수정될 때마다 SELECT로 인해 DB에 매번 접속되니, 해당 부분은 수정하는 편이 좋음
Ex) 미리 인터널 테이블에 담아두고, 인터널 테이블에서 조회 등
FORM SET_HANDLER .
*
CREATE OBJECT GO_EVENT_RECEIVER.
*
SET HANDLER GO_EVENT_RECEIVER->ADD_TOOLBAR FOR GO_GRID.
SET HANDLER GO_EVENT_RECEIVER->HANDLER_USER_COMMAND FOR GO_GRID.
SET HANDLER GO_EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR GO_GRID.
CALL METHOD GO_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED " Event ID
.
ENDFORM.
REGISTER_EDIT_EVENT: 셀이 변경될 때마다 인터널 테이블에 반영
'SAP > ABAP' 카테고리의 다른 글
TOP OF PAGE (0) | 2024.10.23 |
---|---|
필드 카탈로그 자동 생성(REUSE_ALV_FIELDCATALOG_MERGE) (1) | 2024.06.23 |
문자열 다루기(SHIFT) (0) | 2024.06.18 |
리스트 박스 (0) | 2024.06.07 |
셀렉트 스크린 제어(SCREEN) (0) | 2024.06.07 |