Abapteur Note
ALV EDIT 모드 전환 본문
ALV EDIT 모드에 관한 포스팅이다.
ALV는 보통 DISPLAY와 EDIT 모드를 정한다.
말 그대로 DISPLAY 모드는 조회용 화면이고, EDIT 모드는 수정용 화면이다.
1. 필드 카탈로그의 EDIT 필드에 체크해준다.
FORM SET_ALV_FIELDCAT_0100 .
REFRESH GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'NAME'.
GS_FIELDCAT-COLTEXT = '이름'.
GS_FIELDCAT-OUTPUTLEN = '15'.
GS_FIELDCAT-JUST = 'C'.
GS_FIELDCAT-KEY = ABAP_ON.
GS_FIELDCAT-EDIT = ABAP_ON.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'AGE'.
GS_FIELDCAT-COLTEXT = '나이'.
GS_FIELDCAT-OUTPUTLEN = '3'.
GS_FIELDCAT-JUST = 'C'.
GS_FIELDCAT-EDIT = ABAP_ON.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'MAJOR'.
GS_FIELDCAT-COLTEXT = '전공'.
GS_FIELDCAT-OUTPUTLEN = '15'.
GS_FIELDCAT-JUST = 'C'.
GS_FIELDCAT-EDIT = ABAP_ON.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'ADRESS'.
GS_FIELDCAT-COLTEXT = '주소'.
GS_FIELDCAT-OUTPUTLEN = '30'.
GS_FIELDCAT-JUST = 'C'.
GS_FIELDCAT-EDIT = ABAP_ON.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = 'SKILL'.
GS_FIELDCAT-COLTEXT = '스킬'.
GS_FIELDCAT-OUTPUTLEN = '20'.
GS_FIELDCAT-JUST = 'C'.
GS_FIELDCAT-EDIT = ABAP_ON.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
2. SET_TABLE_FOR_FIRST_DISPLAY 메소드 이전에 미리 SET_READY_FOR_INPUT 활용
SET_READY_FOR_INPUT를 통해 수정모드를 열고 닫을 수 있다.
0 : INPUT 불가
1 : INPUT 가능
* SET_READY_FOR_INPUT을 미리 지정하지 않으면 필드 카탈로그의 EDIT 설정에 이해 수정 모드로 화면이 띄워진다.
FORM DISPLAY_ALV_0100 .
CALL METHOD GO_ALV_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 0. " Ready for Input Status
CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_VARIANT = GS_VARIANT " Layout
I_SAVE = GV_SAVE " Save Layout
I_DEFAULT = 'X' " Default Display Variant
IS_LAYOUT = GS_LAYOUT " Layout
CHANGING
IT_OUTTAB = GT_INFO " Output Table
IT_FIELDCATALOG = GT_FIELDCAT " Field Catalog
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
MESSAGE 'ALV GRID 메소드 호출 실패' TYPE 'W'.
ENDIF.
CALL METHOD GO_ALV_GRID->SET_TOOLBAR_INTERACTIVE.
ENDFORM.
3. USER COMMAND PAI에 체크값 지정
체크값을 통해 화면을 전환한다.
이를 통해 조회모드에서 열 추가를 못하게 한다거나, 조회 화면을 수정 화면으로 전환시킨다.
WHEN 'EDIT_MODE'.
IF GV_CHECK = ''.
GV_CHECK = 1.
ELSE.
CLEAR GV_CHECK.
ENDIF.
PERFORM EDIT_MODE.
4. 체크값을 통해 SET_READY_FOR_INPUT 다시 지정
FORM EDIT_MODE.
IF GV_CHECK = ''.
CALL METHOD GO_ALV_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 0. " Ready for Input Status
ELSE.
CALL METHOD GO_ALV_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1. " Ready for Input Status
ENDIF.
ENDFORM.
3번에 의하여 EDIT 버튼을 누름으로써 GV_CHECK에 값이 1로 들어온다.
GV_CHECK 1인 경우에는 수정 모드이니 SET_READY_FOR_INPUT을 이용하여 수정 모드가 가능하게 변경해준다.
EDIT 모드로 전환은 간단한 편이다.
다만, 이후에 포스팅할 저장에서 살짝 복잡해진다.
이 포스트의 EDIT 모드인 경우 데이터를 수정해도 인터널 테이블에는 곧바로 반영되지 않는다.
이를 해결하려면 ENTER을 누르거나 혹은 데이터가 수정되면 인터널 테이블에 반영되도록 해야하는데 이는 다음에 포스팅할 SAVE에서 다루겠다.
'SAP > ABAP' 카테고리의 다른 글
리스트 박스 (0) | 2024.06.07 |
---|---|
셀렉트 스크린 제어(SCREEN) (0) | 2024.06.07 |
컬럼 트리(Column 트리) (0) | 2024.02.01 |
심플 트리 (SIMPLE TREE) (2) | 2024.01.25 |
BDC (0) | 2023.12.31 |