Dynamic Table Create¶
목적¶
Table을 동적으로 생성하는 방법을 설명합니다.
주요 단계¶
1. Table Model 선언¶
1.1 출력할 Internal Table을 생성 (Public Section에 선언)¶
1.2 Combobox 데이터를 포함할 Internal Table도 생성¶
PUBLIC SECTION.
INTERFACES /U4A/IF_SERVER.
TYPES: BEGIN OF GTY_ROWS,
COL1 TYPE C LENGTH 1, " Checkbox
COL2 TYPE C LENGTH 1, " Radiobutton
COL3 TYPE STRING, " Text
COL4 TYPE STRING, " Input
COL5 TYPE STRING, " Label
COL6 TYPE STRING, " Combobox
COL7 TYPE STRING, " Icon
COL8 TYPE STRING, " Objectstatus
COL9 TYPE D, " Datepicker
COL10 TYPE STRING, " Textarea
END OF GTY_ROWS.
DATA: GT_ROWS TYPE TABLE OF GTY_ROWS.
" Combobox용 Internal Table
TYPES: BEGIN OF GTY_DDL,
KEY TYPE STRING,
VALUE TYPE STRING,
END OF GTY_DDL.
DATA: GT_DDL TYPE TABLE OF GTY_DDL.
2. UI Class 선언¶
DATA: LO_PAGE TYPE REF TO /U4A/CL_UO00389,
LO_TAB TYPE REF TO /U4A/CL_UO01139,
LO_COL TYPE REF TO /U4A/CL_UO01127,
LO_LABEL TYPE REF TO /U4A/CL_UO00319,
LO_ROW TYPE REF TO /U4A/CL_UO01131.
*-- TABLE FIELD OBJECT
DATA: LO_CHKBOX TYPE REF TO /U4A/CL_UO00253,
LO_RADIO TYPE REF TO /U4A/CL_UO00410,
LO_TEXT TYPE REF TO /U4A/CL_UO00452,
LO_INPUT TYPE REF TO /U4A/CL_UO00314,
LO_LABEL2 TYPE REF TO /U4A/CL_UO00319,
LO_COMBO TYPE REF TO /U4A/CL_UO00256,
LO_LISTITEM TYPE REF TO /U4A/CL_UO00887,
LO_ICON TYPE REF TO /U4A/CL_UO00879,
LO_OBJECTSTATUS TYPE REF TO /U4A/CL_UO00368,
LO_DATEPICKER TYPE REF TO /U4A/CL_UO00261,
LO_TEXTAREA TYPE REF TO /U4A/CL_UO00453.
3. UI Instance 가져오기¶
LO_PAGE ?= ME->AR_VIEW->GET_UI_INSTANCE( I_ID = 'PAGE' ).
CHECK LO_PAGE IS BOUND.
4. Table Object 생성¶
CREATE OBJECT LO_TAB
EXPORTING
ID = 'TABLE1'.
CHECK LO_TAB IS BOUND.
5. Page의 Content에 Table UI 추가¶
LO_PAGE->ADDCONTENT(
EXPORTING
CONTENT = LO_TAB ).
6. Table 속성 설정¶
CALL METHOD LO_TAB->SETVISIBLEROWCOUNT
EXPORTING
VISIBLEROWCOUNT = 8.
7. Column Object 생성 및 추가¶
CREATE OBJECT LO_COL
EXPORTING
ID = 'COLUMN1'.
CHECK LO_COL IS BOUND.
CALL METHOD LO_TAB->ADDCOLUMN
EXPORTING
COLUMNS = LO_COL.
8. Label Object 추가 및 텍스트 설정¶
CREATE OBJECT LO_LABEL
EXPORTING
ID = 'LABEL1'.
CALL METHOD LO_COL->SETLABEL
EXPORTING
LABEL = LO_LABEL.
CALL METHOD LO_LABEL->SETTEXT
EXPORTING
TEXT = 'Col1'.
9. Table에 추가할 Object 생성 (예시)¶
DO 10 TIMES.
CREATE OBJECT LO_COL
EXPORTING
ID = 'COLUMN' && SY-INDEX.
CALL METHOD LO_TAB->ADDCOLUMN
EXPORTING
COLUMNS = LO_COL.
CREATE OBJECT LO_LABEL
EXPORTING
ID = 'LABEL' && SY-INDEX.
CALL METHOD LO_COL->SETLABEL
EXPORTING
LABEL = LO_LABEL.
CALL METHOD LO_LABEL->SETTEXT
EXPORTING
TEXT = 'Col' && SY-INDEX.
CASE SY-INDEX.
WHEN 1. " CHECKBOX
CALL METHOD LO_COL->SETHALIGN
EXPORTING
HALIGN = 'Center'.
CALL METHOD LO_COL->SETWIDTH
EXPORTING
WIDTH = '80px'.
CREATE OBJECT LO_CHKBOX
EXPORTING
ID = 'CHECKBOX'.
LO_CHKBOX->BP00253_SELECTED = 'GT_ROWS-COL1'.
CALL METHOD LO_COL->SETTEMPLATE
EXPORTING
TEMPLATE = LO_CHKBOX.
WHEN 2. " RADIOBUTTON
CALL METHOD LO_COL->SETWIDTH
EXPORTING
WIDTH = '60px'.
CREATE OBJECT LO_RADIO
EXPORTING
ID = 'RADIOBUTTON'.
LO_RADIO->BP00410_SELECTED = 'GT_ROWS-COL2'.
CALL METHOD LO_COL->SETTEMPLATE
EXPORTING
TEMPLATE = LO_RADIO.
ENDCASE.
ENDDO.
10. Row 생성 및 Binding¶
CREATE OBJECT LO_ROW
EXPORTING
ID = 'ROW1'.
CHECK LO_ROW IS BOUND.
LO_ROW->MODEL = 'GT_ROWS'.
CALL METHOD LO_TAB->ADDROW
EXPORTING
ROWS = LO_ROW.
11. UI 확인¶

<사진 1> UI가 추가 되지 않은 구성 화면
12. 실행 결과¶

<사진 2> Table 동적 생성 결과 화면