SAP/ABAP

동적 인터널 테이블을 만들때 deep structure 로 생성하기

그녀는애교쟁이 2014. 4. 11. 16:46
반응형

개발을 하다 보면 동적으로 Internal Table 을 만들어야 할 때가 있다. 경우에 따라 컬럼의 갯수가 변경되는데 동적으로 테이블을 만들다보면 Deep Structure, 즉 Internal Table 에 Internal Table 이 들어가야 하는 경우가 생긴다. 예를 들면 ALV 에서 각 셀별로 색상을 지정해 줄 수 있는데, 안에 Internal Table 로 셀을 지정해야 하는 경우이다. ( 이 경우를 처리하기 위해 찾아보게 되었다. )


참조 URL : dynamic internal table with deep structure



먼저 전역 Structure 를 생성한다. (SE11 을 이용하여 ZZEXTEND_FIEDCAT 을 생성)




  
* 전역변수 선언 시작
  DATA : gt_fieldcatalog  TYPE lvc_t_fcat.
  DATA : gt_table TYPE REF TO data,
         gt_line  TYPE REF TO data,
  FIELD-SYMBOLS :  <gt> TYPE STANDARD TABLE,
                   <wa> TYPE ANY.
* 전역변수 선언 끝

  DATA : ls_field TYPE lvc_s_fcat,
         l_field(10) TYPE c,
         l_count(2),
         lines TYPE i.

  CLEAR : ls_field, lines, lt_field_base[].

  ADD 1 TO lines.
  ls_field-fieldname   = 'ACCOUNT'.
  ls_field-col_pos     = lines.
  ls_field-datatype    = 'CHAR'.
  ls_field-inttype     = 'C'.
  ls_field-intlen	   = '15'.
  ls_field-dd_outlen   = '20'.
  ls_field-scrtext_s   = 'USER ID'.
  ls_field-scrtext_m   = 'USER ID'.
  ls_field-scrtext_l   = 'USER ID'.
  ls_field-outputlen   = '12'.
  ls_field-just        = 'C'.
  ls_field-key         = 'X'.
  APPEND ls_field TO gt_fieldcatalog.
  CLEAR ls_field.

  ADD 1 TO lines.
  ls_field-fieldname   = 'NAME'.
  ls_field-col_pos     = lines.
  ls_field-datatype    = 'CHAR'.
  ls_field-inttype     = 'C'.
  ls_field-intlen	   = '15'.
  ls_field-dd_outlen   = '20'.
  ls_field-scrtext_s   = 'Name'.
  ls_field-scrtext_m   = 'Name'.
  ls_field-scrtext_l   = 'Name'.
  ls_field-outputlen   = '10'.
  ls_field-just        = 'C'.
  ls_field-key         = 'X'.
  APPEND ls_field TO gt_fieldcatalog.
  CLEAR ls_field.

  " ALV Color
  ADD 1 TO lines.
  ls_field-fieldname   = 'ZCOLOR'.
  ls_field-inttype     = 'C'.
  ls_field-datatype    = 'CHAR'.
  ls_field-ref_field   = 'COLOR'.              " ZZEXTEND_FIELDCAT FIELD 명
  ls_field-ref_table   = 'ZZEXTEND_FIELDCAT'.  
  ls_field-tabname     = 'ZZEXTEND_FIELDCAT'. 
  APPEND ls_field TO gt_fieldcatalog.
  CLEAR ls_field.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcatalog[]
    IMPORTING
      ep_table        = gt_table.

  ASSIGN gt_table->* TO <gt> .
  CREATE DATA gt_line LIKE LINE OF <gt>.
  ASSIGN gt_line->* TO <wa>.

- 끗 -