콘텐츠로 이동

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 동적 생성 결과 화면