ABAP Custom Container ALV 생성
Updated:
1. ALV 생성 화면
Selection Screen
Screen 0100
2. ALV 생성 코드
ALV 생성에 대한 코드와 주석으로 달아놓은 설명 및 번호를 참조한다.
REPORT PROGRAM
*&---------------------------------------------------------------------*
*& Report Z_SL24_030
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZALV_00.
INCLUDE ZALV_00_TOP.
INCLUDE ZALV_00_B01.
INCLUDE ZALV_00_I01.
INCLUDE ZALV_00_F01.
* 10. EVENT BLOCK
INITIALIZATION.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM GET_DATA.
End-of-SELECTION.
CALL SCREEN 100.
SCREEN 0100
PROCESS BEFORE OUTPUT.
* 6. STATUS 생성
MODULE STATUS_0100.
* 12. ALV 생성
MODULE CREATE_ALV.
PROCESS AFTER INPUT.
* 8. PF-STATUS: BACK, EXIT, CANC 입력시 실행되는 모듈 생성
MODULE EXIT AT EXIT-COMMAND.
* MODULE USER_COMMAND_0100.
TOP
*&---------------------------------------------------------------------*
*& Include ZSL24_030_TOP
*&---------------------------------------------------------------------*
* 1. table, structure 선언
DATA GS_SCARR TYPE SCARR.
DATA: GT_ITAB1 TYPE TABLE OF SCARR,
GT_ITAB2 TYPE TABLE OF SCARR.
DATA GT_SPFLI TYPE TABLE OF SPFLI.
TABLES: SCARR.
* 2. Function code 받을 변수 선언
DATA OK_CODE TYPE SY-UCOMM.
* 5. parameter 입력
*parameters: pa_car3 type scarr-carrid.
* 11. Container 변수 선언
DATA GO_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
* 13. ALV grid 변수 선언
DATA GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
* 21. SET TABLE FOR FIRST DISPLAY METHOD 사용을 위한 변수 선언
DATA: GS_VARIANT TYPE DISVARIANT,
GV_SAVE TYPE C LENGTH 1.
* 26. LAYOUT 변수 설정
DATA: GS_LAYOUT TYPE LVC_S_LAYO.
* 3. Selection option 선언
SELECT-OPTIONS: SO_CAR1 FOR GS_SCARR-CARRID, //Search help 미포함
SO_CAR2 FOR SCARR-CARRID. //Search help 포함
* 24. 입력하는 값에 따라 다른 레이아웃을 가지도록 입력 변수 설정
PARAMETERS: pa_vari TYPE disvariant-variant.
PBO
*&---------------------------------------------------------------------*
*& Include ZSL24_030_O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
* 7. STATUS, TITLE 생성
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_ALV OUTPUT
*&---------------------------------------------------------------------*
MODULE CREATE_ALV OUTPUT. //선언된 변수를 INSTANCE로 만듦
* 19. 조건을 걸어보자
IF GO_CONTAINER IS INITIAL. //CONTAINER가 INITIAL인 경우에 생성하도록 조건 넣음
//없다면 계속해서 CONTAINER를 만들게 됨
PERFORM CREATE_OBJ.
* 22. SETTING, 제한 변수 설정
GS_VARIANT-REPORT = SY-CPROG. //현재프로그램명
GV_SAVE = 'A'. //x: 저장시 / 붙어서 GLOBAL LAYOUT 세팅
//U: 특정 사용자에 한해서 레이아웃 세팅
//A: U, X, 모두 가능
//'': 레이아웃 저장 안함, 저장 권한 주지 않음
* 25. 레이아웃 변수값 입력받은 것 할당
* 변수를 이용하면 사용자마다 다른 값 들어오게 가능
* 사용자에 따라 저장, 세팅 권한 설정 가능해짐
GS_VARIANT-VARIANT = PA_VARI.
PERFORM SET_LAYOUT.
PERFORM DISPLAY_ALV.
ELSE.
* 20. Pattern 사용: REFRESH_TABLE_DISPLAY
* 21. PATTERN에서 사용할 변수 선언: LVC_S_STBL 참조
DATA LS_STBL TYPE LVC_S_STBL.
LS_STBL-ROW = 'X'.
LS_STBL-COL = 'X'.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
* 데이터변경/SELECT재수행 시 ALV 오브젝트 생성않고 데이터만 다시 보여줌
EXPORTING
IS_STABLE = LS_STBL
I_SOFT_REFRESH = 'X'.
ENDIF.
ENDMODULE.
PAI
*&---------------------------------------------------------------------*
*& Include ZSL24_030_I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE EXIT INPUT.
* 9. EXIT, BACK, CANC 버튼 동작
CASE OK_CODE.
WHEN 'BACK'.
* 15. PERFORM 생성
PERFORM FREE_CONTROL_RESOURCE.
LEAVE TO SCREEN 0.
WHEN 'EXIT' OR 'CANC'.
* 17. PERFORM 생성
PERFORM FREE_CONTROL_RESOURCE.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
PERFORM
*&---------------------------------------------------------------------*
*& Include ZSL24_030_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* 16. 생성한 PERFORM - FORM 입력: 메모리 FREE
FORM FREE_CONTROL_RESOURCE.
CALL METHOD GO_ALV_GRID->FREE. //INSTANCE로 연결?된? 변수를 끊어냄
CALL METHOD GO_CONTAINER->FREE.
CLEAR: GO_ALV_GRID, GO_CONTAINER.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA .
* 4. DB에서 데이터 읽어오기
SELECT *
FROM SPFLI
INTO TABLE GT_SPFLI
WHERE CARRID IN SO_CAR1. //3번으로 입력시 사용: 범위 내에 있을 때
* WHERE CARRID = PA_CAR3. //5번으로 입력시 사용: 동일 값일 때
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_OBJ
*&---------------------------------------------------------------------*
FORM CREATE_OBJ .
* 12. Pattern 사용한 create object: create object / 변수명 / CL_GUI_CUSTOM_CONTAINER
CREATE OBJECT GO_CONTAINER
EXPORTING
CONTAINER_NAME = 'CONTROL_AREA'. //CUSTOM CONTROL 이름으로 연결
* 14. Pattern 사용한 create object: create object / 변수명 / CL_GUI_ALV_GRID
CREATE OBJECT GO_ALV_GRID
EXPORTING
I_PARENT = GO_CONTAINER. //CONTAINER 이름으로 연결
* 그 결과 CONTAINER, GRID 연결!
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
FORM SET_LAYOUT .
* 27. LAYOUT 값 설정
GS_LAYOUT-GRID_TITLE = 'LIST'(002).
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
* GS_LAYOUT-NO_TOOLBAR = 'X'.
* GS_LAYOUT-NO_HEADERS = 'X'.
GS_LAYOUT-TOTALS_BEF = 'X'. //작성시 상단에 표시됨, DEFAULT 값은 하단에 표시
* GS_LAYOUT-EDIT = 'X'. //수정 가능, 수정 툴바 생성
GS_LAYOUT-SEL_MODE = 'A'. //' ': B와 동일
//'A':
//'B': 행 하나만 선택 가능, 드레그 불가
//'C': 행 하나만 선택 가능, 드레그 가능
//'D': 복수 가능, 드레그 원하는 형태로 가능
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
FORM DISPLAY_ALV .
* 18. Internal table 값을 ALV에 보여주도록 설정
* 23. SETTING 하고 설정 추가
CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* FIELD CATALOG, DB의 SPFLI와 같은 구조임을 선언
I_STRUCTURE_NAME = 'SPFLI'
IS_VARIANT = GS_VARIANT //VARIANT LAYOUT 이름(?)
I_SAVE = GV_SAVE
I_DEFAULT = 'X' //VARIANT 레이아웃 DEFAULT 설정
IS_LAYOUT = GS_LAYOUT //레이아웃 설정
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = GT_SPFLI //해당 ITAB을 통해 보여줌
* IT_FIELDCATALOG =
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* OTHERS = 4
.
ENDFORM.