ALG GRID 템플릿만들기
순서 1. 스크린 생성 및 스크린 설정하기.
순서 2. 데이터 선언.
순서 3. PBO 및 ALV 세팅하기.
순서 4. PAI 설정.
순서 5. 필요 데이터 가지고 오기.
스크린 생성 및 스크린 설정하기.
▪프로그램 생성 후 먼저 스크린 100번을 생성을 해주고. 스크린 페인터를 통해 Custom Control을 그려준다.
▪ Custom Control의 이름은 사용자 임의로 정해줄수있으며 나는 'CON1'이라고 정해주었다. 이후 우측 하단에 Attribute에 Vertical과 Horizontal에 체크를 해주고 저장, Active해주면 된다.
화면의 최대 크기인 200 / 255로 설정해주기
Element list에서 TOP문에서 선언할 SY-UCOMM을 가지는 OK_CODE를 입력해준다.
메인 프로그램 세팅
REPORT Z_ALV_TEMPLETE .
INCLUDE Z_ALV_TEMPLETE_TOP.
INCLUDE Z_ALV_TEMPLETE_C01.
INCLUDE Z_ALV_TEMPLETE_PBO.
INCLUDE Z_ALV_TEMPLETE_PAI.
INCLUDE Z_ALV_TEMPLETE_F01.
INITIALIZATION.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM GET_DATA.
END-OF-SELECTION.
call screen 100.
Include 문을 만들어주고 반드시 순서는 TOP이 맨 첫번째로 오도록, 클래스를 관장하는 C01(지금은 사용하지 않지만)이 다음 순서로 오도록 설정해준다.
GET_DATA PERFORM문은 지금 입력하지않고 ALV 세팅을 다 완료한 후에 필요한 데이터를 가져오는데 사용한ㄷ.
TOP 문 세팅
DATA : BEGIN OF GS_DISP,
EBELN TYPE EKKO-EBELN,
BUKRS TYPE EKKO-BUKRS,
BSART TYPE EKKO-BSART,
END OF GS_DISP.
DATA : GT_DISP LIKE TABLE OF GS_DISP.
//ALV 그리드를 위한 객체참조변수 2가지 선언
DATA : CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : g_grid TYPE REF TO Cl_GUI_ALV_GRID.
//아이콘 기능을 위한 OK_CODE
DATA : OK_CODE TYPE SY-UCOMM.
//필드 카탈로그 선언 - 테이블과 스트럭쳐 둘다 타입을 잠조해서
DATA : gt_fieldcat TYPE lvc_t_fcat.
DATA : gs_fieldcat TYPE lvc_s_fcat.
//레이아웃 선언
DATA : gs_layout type lvc_s_layo.
▪템플릿을 위해 간단하게 EKKO에있는필드 3개만 가지는 Structure과 Table을 선언해주었다.
▪이후 ALV Grid를 그리기 위해 ABAP에서 제공하는 클래스를 참조하는 두 가지 객체참조변수를 선언해준다.
1. CL_GUI_CUSTOM_CONTANER을 참조하는 CON1_REF(스크린 페인터에서 설정한 Custom Control인 'CON1'을 사용)
2. CL_GUI_ALV_GRID를 참조하는 g_grid(CON_REF를 가지고 내가만든 그리드를 보여주기 위해 사용)
▪SY-UCOMM을 가지는 OK_CODE를 선언.(Srcreen Elemtents에서 사용하며 추후 아이콘에 역할을 주기 위해서 사용)
▪필드 카탈로그에서 필요한 데이터 구조 선언
CL_CUI_ALV_GRID의 메소드 중 < set_table_for_first_display>의 파라미터를 보면 FIELDCATALOG 이 존재하는데 FIELDCATALOG의 Associated TYPE을 참조하는 테이블과 Structure선언을 해준다.
▪레이아웃 설정
필드 카탈로그와 마찬가지로 CL_CUI_ALV_GRID의 메소드 중 <set_table_for_first_display>의 파라미터를 보면 LAYOUT이 존재하는데 이를 참고하여 layout 설정을 위한 Structure을 선언해준다.
SCREEN 100 PBO/ PAI 설정
SCREEN 100 PBO
1. status_100 설정 -> 스크린테 표현될 버튼(아이콘)에 대해서 설정을 하는 부분.
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
2. ALV 세팅
FORM setting_alv_100 .
IF G_GRID IS INITIAL.
//인스턴스 생성
PERFORM CREATE_OBJECT.
//필드카탈로그 생성
PERFORM SET_FIELDCATALOG.
//레이아웃 세팅
PERFORM SET_LAYOUT.
//ALV 호출
PERFORM DISPLAY_ALV.
ELSE.
//G_GRID가 초기값이 아닐 경우 REFRESH"
PERFORM REFRESH_DATA.
ENDIF.
ENDFORM.
▪IF G_GRID IS INITIAL
->G_GRID IS INITIAL. 처음 ALV를 만드는 것이라면 이후 작업을 띄어라 라는 의미. 만약 ALV에서 작업이 수정된다면 6번의 REFRESH로 넘어갈 수 있도록 하기 위해서 사용.
▪인스턴스 생성
FORM create_object .
//CONTAINER 오브젝트 생성
//CTRL + F6 / 인스턴스 : CON1_REF / 클래스 : CL_GUI_CUSTOM_CONTAINER.
CREATE OBJECT CON1_REF
EXPORTING
CONTAINER_NAME = 'CON1'.
//G_GRID OBJECT 생성
//CTRL + F6 / 인스턴스 : g_grid / 클래스 : Cl_GUI_ALV_GRID.
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = CON1_REF.
ENDFORM.
▪필드 카탈로그 생성
FORM set_fieldcatalog.
//I_STRUCUTRE_NAME을 쓰는 것보다는 CATALOG를 사용하는 것이 더 편할 수 있음.
//요구사항에 따라서 그때그때 다르게 사용하기
//먼저 CLEAR 해주기.
CLEAR : gs_fieldcat.
CLEAR : gT_fieldcat.
GS_FIELDCAT-FIELDNAME = 'EBELN'.
GS_FIELDCAT-COLTEXT = '구매문서넘버'.
GS_FIELDCAT-KEY = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR : gs_fieldcat.
GS_FIELDCAT-FIELDNAME = 'BUKRS'.
GS_FIELDCAT-COLTEXT = '회사코드'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR : gs_fieldcat.
GS_FIELDCAT-FIELDNAME = 'BSART'.
GS_FIELDCAT-COLTEXT = '문서유형'.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.
▪레이아웃 설정
FORM set_layout .
CLEAR GS_LAYOUT.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'A'.
GS_LAYOUT-SEL_MODE = 'D'. "LAYOUT의 셀모드 중 D의 의미 - GRID 상에서 DRAG가 가능하기 때문에 사용"
ENDFORM.
▪ALV 출력
FORM display_alv .
//CTRL + F6 / CALL_METHOD 클릭.
//인스턴스 : G_GRID / 클래스 : Cl_GUI_ALV_GRID. / METHOD : set_table_for_first_display/
CALL METHOD G_GRID->set_table_for_first_display
EXPORTING
is_layout = gs_layout
CHANGING
it_outtab = GT_DISP
it_fieldcatalog = gt_fieldcat.
ENDFORM.
▪REFRESH ALV 설정
FORM refresh_data.
//CTRL + F6 / CALL_METHOD 클릭.
//인스턴스 : G_GRID / 클래스 : : Cl_GUI_ALV_GRID. / METHOD : REFRESH_TABLE_DISPLAY.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.
ENDFORM.
여기까지 진행하면 PBO 단계에서 스크린의 버튼 설정과 ALV를 출력할 세팅이 완료된다.
SCREEN 100 PAI
MODULE exit_100 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
▪PAI 설정에서 PBO의 STATUS에서 입력한 3가지 버튼에 대해서 어떠한 역할을 할지에 대해서 설정해주었다.
▪각각 LEAVE PROGRAM, LEAGE TO SCREEN 0와 같이 역할을 다양하게 줄 수 있지만 템플릿이므로 간단하게 LEAVE PROGRAM으로 설정해주었다.
데이터 가져오기
▪SCREEN / PBO / PAI 설정이 끝났으므로 ALV 상에서 보여줄 데이터를 가져오는 작업을 진행한다.
템플릿이므로 간단하게 데이터를 가져오는 구문을 적어주고 잘 나오는지만 확인하자.
▪메인프로그램의 get_data PERFORM문을 완성.
FORM get_data .
CLEAR GT_DISP.
SELECT MATNR ERSDA ERNAM
INTO CORRESPONDING FIELDS OF TABLE GT_DISP
FROM MARA UP TO 10 ROWS. //템플릿이므로 최대 10개 까지만 가져오겠다"
ENDFORM.
출력
잘 나오는 것을 확인 가능!
이렇게 간단히 탬플릿을 만들어놓고 이후 기본 세팅은 이 템플릿을 이용하면 쉽다.
추가적인 EVENT에 관련된 선언이나 필드카탈로그의 다양한 역할등에 대해서는 추후 올릴 ALV 프로젝트에서 다루도록 하겠다.
'SAP ABAP 개발 및 설명 > ALV GRID' 카테고리의 다른 글
CL_GUI_ALV_GRID 기타 메소드 (0) | 2020.08.24 |
---|---|
ALV GRID - 기타 파라미터 (0) | 2020.08.24 |
ALV GRID 레이아웃 (0) | 2020.08.23 |
ALV GRID 필드 카탈로그 (0) | 2020.08.23 |
필드 카탈로그 - lvc_s_fcat 역할정리 (0) | 2020.08.22 |