Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Abapteur Note

DATA_CHANGED METHOD 본문

SAP/ABAP

DATA_CHANGED METHOD

아밥추어 2024. 10. 15. 17:52

ALV의 내용을 수정하여 인터널 테이블에 반영되기 전 유효성 검사 등을 하고 싶을 때 사용하는 메소드이다.

 

Example) 특정 셀의 내용을 수정하면 조건에 따라 다른 셀의 내용도 수정됨

출발공항 필드의 두번째 행을 수정
수정 후 ENTER 혹은 셀을 이동하면 출발도시의 내용이 자동으로 변경


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