본문 바로가기

ABAP

[ABAP] Top-of-Page 예제

*-> 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.

 

반응형