SAP ABAP ALV 두개로 분할해서 띄우기
상단의 사진처럼 필요에 따라 화면을 두개로 분할하여 사용할 수 있다.
DATA :
GR_DOCKING1 TYPE REF TO CL_GUI_DOCKING_CONTAINER, " docking container 생성
GR_SPLIT1 TYPE REF TO CL_GUI_SPLITTER_CONTAINER, "스플릿 컨테이너 생성
GR_TOP TYPE REF TO CL_GUI_CONTAINER, " 두개로 분할한 도킹 스플릿트에 연결할 컨테이너
GR_BOTTOM TYPE REF TO CL_GUI_CONTAINER,
GR_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
GR_GRID2 TYPE REF TO CL_GUI_ALV_GRID.
GR_DOCKING1 TYPE REF TO CL_GUI_DOCKING_CONTAINER, " docking container 생성
GR_SPLIT1 TYPE REF TO CL_GUI_SPLITTER_CONTAINER, "스플릿 컨테이너 생성
GR_TOP TYPE REF TO CL_GUI_CONTAINER, " 두개로 분할한 도킹 스플릿트에 연결할 컨테이너
GR_BOTTOM TYPE REF TO CL_GUI_CONTAINER,
GR_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
GR_GRID2 TYPE REF TO CL_GUI_ALV_GRID.
화면을 분할하고 ALV를 띄우기 위해 선언해야할 부분이다.
IF gr_grid1 is not BOUND.
PERFORM create_container. " 컨테이너 연결하기
PERFORM create_grid1.
PERFORM set_fieldcatalog.
PERFORM set_layout.
PERFORM display_grid1.
PERFORM display_grid2.
ENDIF.
PERFORM create_container. " 컨테이너 연결하기
PERFORM create_grid1.
PERFORM set_fieldcatalog.
PERFORM set_layout.
PERFORM display_grid1.
PERFORM display_grid2.
ENDIF.
PBO부분에 ALV를 생성하기 위한 로직을 적어준다.
기준이 될 ALV를 1번 그리드로 잡고 1번 그리드에 ALV가 뿌려져 있지 않을때만 로직이 실행되도록 한다.
gr_grid1 IS NOT BOUUND 나 IS INITIAL로 조건을 걸어놓으면
로직이 수정되고 이벤트 실행되어 GRID를 리프레시 해줄때 다시 PBO를 타게 되어 변경된 화면이 조회되도록해준다.
CREATE OBJECT GR_DOCKING1 "docking object 생성, 연결해주기.
EXPORTING
REPID = sy-REPID
EXTENSION = 3000. " 크기 : 최대 3000
CREATE OBJECT GR_SPLIT1
EXPORTING
PARENT = GR_DOCKING1 " Parent Container
ROWS = 2 " 2개로 분할
COLUMNS = 1 "
EXPORTING
REPID = sy-REPID
EXTENSION = 3000. " 크기 : 최대 3000
CREATE OBJECT GR_SPLIT1
EXPORTING
PARENT = GR_DOCKING1 " Parent Container
ROWS = 2 " 2개로 분할
COLUMNS = 1 "
.
" -> 2개로 분할한 split에 2개의 컨테이너를 각각 연결, 컨테이너에 grid 두개를 각각 연결해 주기
call METHOD GR_SPLIT1->GET_CONTAINER
EXPORTING
ROW = 1 " Row 상단 alv
COLUMN = 1 " Column
RECEIVING
CONTAINER = GR_TOP " Container
.
call METHOD GR_SPLIT1->GET_CONTAINER
EXPORTING
ROW = 2 " Row 하단 alv
COLUMN = 1 " Column
RECEIVING
CONTAINER = GR_BOTTOM " Container .
" -> 2개로 분할한 split에 2개의 컨테이너를 각각 연결, 컨테이너에 grid 두개를 각각 연결해 주기
call METHOD GR_SPLIT1->GET_CONTAINER
EXPORTING
ROW = 1 " Row 상단 alv
COLUMN = 1 " Column
RECEIVING
CONTAINER = GR_TOP " Container
.
call METHOD GR_SPLIT1->GET_CONTAINER
EXPORTING
ROW = 2 " Row 하단 alv
COLUMN = 1 " Column
RECEIVING
CONTAINER = GR_BOTTOM " Container .
CREATE OBJECT GR_SPLIT1 에서 ROWS에 2를 넣으면 상단, 하단으로 두개로 분할 한다는 뜻이고
COLUMNS에 2를 넣으면 좌우로 두개를 분할 한다는 뜻이다.
그리고 CALL METHOD를 통해 SPLIT로 나눠놓은 공간에 각각의 컨테이너를 할당해준다.
create OBJECT GR_GRID1
EXPORTING
i_parent = GR_TOP. "
create OBJECT GR_GRID2
EXPORTING
i_parent = GR_BOTTOM.
EXPORTING
i_parent = GR_TOP. "
create OBJECT GR_GRID2
EXPORTING
i_parent = GR_BOTTOM.
상단에는 기준이 될 GRID1을 생성해주고 하단에는 GRID2를 생성해준다.
call METHOD gr_grid1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'GS_DATA1' " Internal Output Table Structure Name
CHANGING
IT_OUTTAB = GT_DATA1 " Output Table
IT_FIELDCATALOG = GT_FCAT1 " Field Catalog
.
EXPORTING
I_STRUCTURE_NAME = 'GS_DATA1' " Internal Output Table Structure Name
CHANGING
IT_OUTTAB = GT_DATA1 " Output Table
IT_FIELDCATALOG = GT_FCAT1 " Field Catalog
.
call METHOD gr_grid2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'GS_DATA2' " Internal Output Table Structure Name
CHANGING
IT_OUTTAB = GT_DATA2 " Output Table
IT_FIELDCATALOG = GT_FCAT2 " Field Catalog
.
EXPORTING
I_STRUCTURE_NAME = 'GS_DATA2' " Internal Output Table Structure Name
CHANGING
IT_OUTTAB = GT_DATA2 " Output Table
IT_FIELDCATALOG = GT_FCAT2 " Field Catalog
.
각각에 DISPLAY해줄 인터널테이블을 연결한다.
여기서 주의해야할 점은 각각 보여줄 필드카타로그를 설정해야 제대로 조회가 된다는 점이다.
Tags:
SAP ABAP