*-> Class Definition
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS : HANDLE_TOP_OF_PAGE
FOR EVENT TOP_OF PAGE OF CL_GUI_ALV_GRID IMPORTING E_DYNDOC_ID.
ENDCLASS.
*->ALV 선언
DATA : GI_GUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "화면에 그린 컨테이너
GI_GRID TYPE REF TO CL_GUI_ALV_GRID, "데이터 출력해줄 그리드
GI_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER, "이벤트 선언
GI_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER, "컨테이너 반으로 나눠줄 스플릿
GI_TOP TYPE REF TO CL_GUI_CONTAINER, "위쪽
GI_BOTTOM TYPE REF TO CL_GUI_CONTAINER, "아래쪽
GI_DD_DOCUMENT TYPE REF TO CL_DD_DOCUMENT. "Top-of-Page 연결
*-> Class Implementation
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_TOP_OF_PAGE.
PERFORM ALV_TOP_OF_PAGE USING E_DYNDOC_ID.
ENDMETHOD.
ENDCLASS.
*-> ALV_TOP_OF_PAGE Perform문 생성
FORM ALV_TOP_OF_PAGE USING PV_DYNDOC_ID TYPE REF TO CL_DD_DOCUMENT.
DATA : DL_TEXT(255) TYPE C.
"회사코드(회사명) 들고오기
IF SO_BUKRS[] IS NOT INITIAL.
SELECT SINGLE BUKRS, "회사코드
BUTXT, "회사명
FROM T001
WHERE BUKRS EQ @SO_BUKRS-LOW
INTO @DATA(LS_BUKRS).
ENDIF.
"한 줄 띄기
CALL METHOD PV_DYNDOC_ID->NEW_LINE.
CLEAR : DL_TEXT.
DL_TEXT = |{ '회사 : ' } { SO_BUKRS-LOW } ({ LS_BUKRS-BUTXT })|. "회사코드와 회사명 이어붙이기
"텍스트 추가
CALL METHOD PV_DYNDOC_ID->ADD_TEXT
EXPORTING
TEXT = DL_TEXT.
CALL METHOD PV_DYNDOC_ID->NEW_LINE.
CALL METHOD PV_DYNDOC_ID->NEW_LINE.
CALL METHOD PV_DYNDOC_ID->NEW_LINE.
CLEAR : DL_TEXT.
DL_TEXT = |{ '성공 레코드 수 : ' } { GV_GREEN }|. "엑셀 데이터에 따라 반영되는 성공 건수
CALL METHOD PV_DYNDOC_ID->ADD_TEXT
EXPOR
TEXT = DL_TEXT.
CALL METHOD PV_DYNDOC_ID->NEW_LINE.
CLEAR : DL_TEXT.
DL_TEXT = |{ '오류 레코드 수 : ' } { GV_RED }|. "엑셀 데이터에 따라 변경되는 오류 건수
CALL METHOD PV_DYNDOC_ID->ADD_TEXT
EXPORTING
TEXT = DL_TEXT.
"위쪽에 추가한 텍스트 출력
CALL METHOD GI_DD_DOCUMENT->DISPLAY_DOCUMENT
EXPORTING
PARENT = GI_TOP.
*-> PBO 구성
"간단하게 Top-of-Page 부분으로만 예시
FORM CREATE_INSTANCE_0100.
"화면에 그린 컨테이너 객체 생성
CREATE OBJECT GI_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'C_ALV'.
"Top-of-Page 객체 생성
CREATE OBJECT GI_DD_DOCUMENT.
"스플릿 객체 생성 후 컨테이너 연결
CREATE OBJECT GI_SPLITTER
EXPORTING
PARENT = GI_CUSTOM_CONTAINER
ROWS = 2
COLUMNS = 1.
"위쪽 컨테이너에 GI_TOP 연결
CREATE METHOD GI_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = GI_TOP.
"아래쪽 컨테이너에 GI_BOTTOM 연결
CREATE METHOD GI_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = GI_BOTTOM.
"크기 조정
CREATE METHOD GI_SPLITTER->SET_ROW_HEIGHT
EXPORTING
ID = 1 "첫번째 ROW를
HEIGHT = 20. "높이 20으로
"데이터 출력해줄 그리드 GI_BOTTOM에 연결
CREATE OBJECT GI_GRID
EXPORTING
I_PARENT = GI_BOTTOM.
ENDFORM.
"이벤트 선언
CREATE OBJECT GI_EVENT_RECEIVER.
SET HANDLER GI_EVENT_RECEIVER->HANDLE_TOP_OF_PAGE FOR GI_GRID.
"성공, 오류 레코드 수의 실시간 반영을 위해 Perform문으로 만듦
FORM REFRESH_TOP_OF_PAGE.
IF GI_DD_DOCUMENT IS BOUND. "GI_DD_DOCUMENT가 이미 연결되어 있다면 타라
CALL METHOD GI_DD_DOCUMENT->INITIALIZE_DOCUMENT. "Top-of-Page 문서 초기화
CALL METHOD GI_GRID->LIST_PROCESSING_EVENTS "Top-of-Page 문서 출력
EXPORTING
I_EVENT_NAME = 'TOP_OF_PAGE' "List_Processing_Events를 더블클릭해서 들어가보면 명시되어 있음
I_DYNDOC_ID = GI_DD_DOCUMENT.
ENDIF.
ENDFORM.
반응형
'ABAP' 카테고리의 다른 글
[ABAP] 클래스로 간단하게 ALV 생성하기 (0) | 2023.03.29 |
---|---|
[ABAP] Excel Download 예제 (0) | 2023.03.27 |
[ABAP] 핸드폰 번호 오류검증(FIND REGEX 구문) (0) | 2023.03.09 |
[ABAP] 이메일 유효성 체크 (0) | 2023.03.09 |
[ABAP] 특수문자 제거 (0) | 2023.03.09 |