본문 바로가기

SAP ABAP 개발 및 설명/ALV GRID

ALV GRID 필드 카탈로그

필드 카탈로그는 조회될 데이터의 타입 및 아웃풋 테이블의 구조를 결정해준다.

 

필드 카탈로그는 ALV에서 조회되는 칼럼들의 필드 정보를 포함하는 LVC_T_FACT 타입의 테이블 구조를 가진다.

ALV는 필드 카탈로그 정보를 저장하는 인터널 테이블을 이용해 필드 타입을 인식하게 된다.

 

예를 들어, 필드가 숫자 타입인지 문자 타입인지 구분하며, 화면에 보여줄 필드 길이를 지정, 체크박스-라디오 버튼으로 표현, 필드 수정이 가능하게 하는 등의 많은 역할을 수행할 수 있게 된다.

 

set_table_for_first_display 메서드에서는 I_STRUCTURE_NAME에 ABAP Dictionary 스트럭쳐를 이용해 아웃풋 테이블의 필드를 구성하여 제시할 수도 있으나 개발자가 직접 ABAP 코딩을 통해 직접 필드 카탈로그를 구성하여 GRID에 제시할 수도 있다.

 

필드 카탈로그를 활용하려면 set_table_for_first_display 메서드의 파라미터 IT_FIELDCATALOG를 이용하여 필드 카탈로그 정보를 ALV에 전송하게 된다.

 

CALL METHID g_grid->set_table_for_first_display

EXPORTING
  I_STRUCTURE_NAME = ‘SFLIGHT’

CHANGING
  IT_OUTTAB = GT_SFLIGHT.
CALL METHID g_grid->set_table_for_first_display

CHANGING
  IT_FIELDCATALOG = gt_catalog.
  IT_OUTTAB = gt_sflight.

필드카탈로그를 구성하는 방법


필드 카탈로그를 정의하는 방법은 3가지가 있다.

 

1.ABAP Dictionary 오브젝트를 이용

2.프로그램 내에서 스크립트로(수송으로) 구성

3.위 두가지 방법을 혼합하여 사용하는 방법

 

각각의 방법에 대해서 알아보도록 하자.


1. ALV 필드 카탈로그 생성 - ABAP Dictionary를 이용하는 방법


set_table_for_first_display 메서드의 I_STRUCTURE_NAME 파라미터를 이용하면 ABAP Dictionary 오브젝트를 ALV 아웃풋 테이블에 그대로 보여주게 된다.

 

I_STRUCTURE_NAME 파라미터로 사용할 수 있는 ABAP Dictionary는 다음과 같다.

Transparent Table / Structure / View / Append Structure / Cluster Table / Pooled Table

I단순히 데이터만 화면에 보여주려면 다음 구문과 같이 ALV 구조 정보와 인터널 테이블을 파라미터로 설정하여 set_table_for_first_display 메서드만 호출하면된다.

CALL METHOD <CL_GUI_ALV_GRID 참조 변수 G_GRID>->set_table_for_first_display
	EXPORTING
    	I_STRUCTURE_NAME = < string of type DD02L-TABNAME >
        IS_VARIANT		 = < structure of type DISVARIANT >
        I_SAVE		 	 = < var. of TYPE cHAR01 >
        I_DEFAULT		 = < var. of TYPE cHAR01 >
        IS_LAYOUT		 = < structure of type LVC_S_LAYO >
        IS_PRINT		 = < structure of type LVC_S_PRNT >
        IT_SPECIAL_GROUPS	= < internal table of type LVC_T_SGRP >
        IT_TOOLABAR_EXCLUDING	= < internal tabl of type UI_FUNCTIONS >
	CHANGING
    	IT_OUTTAB		 = < internal table >
        IT_FIELDCATALOG	 = < internal table of LVC_T_FCAT >
        IT_FIELTER		 = < internal table of LVC_T_FILT >

그러나 실무 프로그램에서는 대부분 여러 개의 테이블에서 데이터를 가져오기때문에 테이블 구조를 필드 카탈로그에 그대로 사용할 수 있는 경우는 많지 않다. 이때는 ABAP Dictionary 레벨에서 Structure을 생성하여 인터널 테이블을 Structure를 참고하여 정의하게 된다. 그러나 하나의 프로그램에서만 필요한 Structure이라면 ABAP Dictonary Structure를 생성할 필요는 없다. 이럴때에는 인터널 테이블 구조를 그대로 필드 카탈로그로 정의할 수 있다.


2. ALV 필드 카탈로그 생성 - 필드 카탈로그를 수동으로 구성하는 방법


IABAP Dictionary의 모든 필드를 필드 카탈로그로 보여주고 싶지 않은 경우가 있다. 이럴 때는 스크립트(수동으로)로 필요한 필드만 카탈로그로 정의할 수 있다. 그리고 생성된 필드 카탈로그 인터널 테이블의 속성을 변경하여 비가시 속성을 설정할 수도 있다.

 

그러나 개별 필드 이름, 타입 등을 스크립트로 모두 정의하여야 하므로 프로그램 수정(유지/보수)에 많은 시간이 소요되는 단점이 있다.

 

필드 카탈로그를 이용하려면 set_table_for_first_display 메서드의 IT_FIELDCATALOG 파라미터를 이용하여 ALV를 호출하게 된다.

CALL METHID <CL_GUI_ALV_GRID 참조하는 g_grid> -> set_table_for_first_display
	EXPORTING		
		IS_VARIANT = < structure of type DISVARIANT >
		I_SAVE	= < var. of TYPE cHAR01 >
		I_DEFAULT = < var. of TYPE cHAR01 >
		IS_LAYOUT = < structure of type LVC_S_LAYO >
		IS_PRINT = < structure of type LVC_S_PRNT >
		IT_SPECIAL_GROUPS = < internal table of type LVC_T_SGRP >
		IT_TOOLBAR_EXCLUDING = < internal table of type UI_FUNCTIONS >

	CHANGING
		IT_OUTTAB = < internal table >
		IT_FIELDCATALOG = <internal table of type LVC_T_FCAT >
		IT_SORT		= < internal table of type LVC_T_SORT >
		IT_FILTER = < internal table of type LVC_T_FILT >

 

아래 표는 필드 LVC_T_FACT 타입의 인터널 테이블을 구성할 때, ABAP Dictionary의 테이블과 필드의 속성을 상속받을 것인지 아니면 직접 속성(길이, 타입 등)을 정의할 것인지에 대해서 보여준다.

Dictionary를 참고할 때 Dictinary를 참고하지 않을 때 설명
FIELDNAME FIELDNAME 아웃풋 테이블의 필드 이름
REF_TABNAME - 참고할 Structure의 DDIC 이름
REF_FIELDNAME - 참고할 Structure의 DDIC 필드 이름
- INTTYPE 아웃풋 테이블의 DATA TYPE
- OUTPUTLEN 칼럼 길이
- COLTEXT 칼럼 헤더 텍스트
- SELTEXT Variant 조회 시 칼럼 내역

필드 카탈로그를 이용하면 아래와 같은 속성을 정의할 수 있다.

필드 위치 / 색상 / 필드명 / 텍스트 Currency 단위 / 칼럼 Output 속성 / 테이터 포맷 설정

 

아래 예제는 CARRID, CONNID, PRICE 3개의 필드를 카탈로그로 구성하여 화면에 보이도록 한다. 이전에 만들어논 템플릿을 수정하여 아래 구문을 추가하도록 하자.

DATA : gt_fieldcat Type lvc_t_fcat.
DATA : gs_fieldcat TYPE lvc_s_fcat.
--------------------------------------------

PERFORM setting_catalog.
FORM setting_catalog.

gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-coltext = 'Carrid ID'.
gs_fieldcat-just = 'L'.
gs_fieldcat-key = 'X'.
gs_fieldcat-outputlen = '2'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-coltext = 'Flight Number'.
gs_fieldcat-just = 'C'.
gs_fieldcat-key = 'X'.
gs_fieldcat-outputlen = '4'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'PRICE'.
gs_fieldcat-coltext = 'Airfare'.
gs_fieldcat-just = 'R'.
gs_fieldcat-key = ' '.
gs_fieldcat-outputlen = '15'.
APPEND gs_fieldcat TO gt_fieldcat.

CALL METHOD g_grid->set_table_for_first_display
	EXPORTING
    i_structure_name = 'SFLIGHT'
    i_save			 = 'A'
    is_variant		 = gs_variant
    i_default		 = ' '
    is_layout 		 = gs_layout
    it_toolbar_excluding = gs_toolbar
    CHANGING
    it_outtab	= gt_sflight
    it_fieldcatalog = gt_fieldcat
    it_sort	= gt_sort.

이 예제는 ABAP Dictionary를 참고하지 않고, GT_FIELDCAT 인터널 테이블에 필드 카탈로그의 필드 속성을 정의하여 추가하고 있다. 예제 이외의 필드 카탈로그 속성은 T-CODE : SE11에서 lvc_s_fcat를 조회하여 내역을 확인하여 어떠한 역할을 하는지 할 수 있다.

 

각 역할에 대해서는 이미 정리해 놓은 글을 참고

2020/08/22 - [ABAP 실습/ALV GRID] - 필드 카탈로그 - lvc_s_fcat 역할정리

 

필드 카탈로그 - lvc_s_fcat 역할정리

카탈로그 속성 내용 사용 목적 CFIELDNAME Currency 단위를 참고하는 필드 이름 단위와 함께 값을 보여준다 CHECKBOX 체크박스로 보여줌 칼럼 아웃풋 옵션 COL_POS 칼럼의 output 순서 칼럼 아웃풋�

abapta0903.tistory.com


3. ALV 필드 카탈로그 생성 - 스트럭쳐와 필드 카탈로그를 동시에 사용


앞서 생성한 예제를 통해 Structure와 필드 카탈로그 두가지를 혼합하여 사용하는 예시를 보여주겠다.

 

스트럭쳐의 필드 이외에 사용자가 정의하는 필드가 추가로 필요한 경우에 사용하기 적합하다. 이때 스트럭쳐와 필드 카탈로그에 같은 필드가 존재하게 되면, 필드 카탈로그에서 정의한 필드가 Structure보다 높은 우선 순위를 가지게 된다. 그리고 버전에 따라 다르지만, 데이터를 저장하는 인터널 테이블에 COMPANY 필드도 추가되어야 한다.

 

아래 코드를 이용해 아시아나, 대한항공과 같은 항공회사를 화면에 보여주기 위해 ‘COMPANY’필드를 추가해보자.

 

 

 

TYPES : BEGIN OF t_str.
		INCLUDE STRUCTURE sflight.
TYPES : company TYPE c length 6.   
TYPES : END OF t_str.

DATA : gt_sflight TYPE TABLE OF T_STR.

DATA : gt_fieldcat Type lvc_t_fcat.
DATA : gs_fieldcat TYPE lvc_s_fcat.
--------------------------------------------
PERFORM setting_catalog.
FORM setting_catalog.

CLEAR gs_fieldcat
gs_fieldcat-fieldname = 'COMPANY'.
gs_fieldcat-coltext = 'COMPANY INFO'.
gs_fieldcat-just = 'C'.
gs_fieldcat-key = 'X'.
gs_fieldcat-outputlen = '6'.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.

--------------------------------------------
CALL METHOD g_grid->set_table_for_first_display
	EXPORTING
    i_structure_name = 'SFLIGHT'
    i_save			 = 'A'
    is_variant		 = gs_variant
    i_default		 = ' '
    is_layout 		 = gs_layout
    it_toolbar_excluding = gs_toolbar
    CHANGING
    it_outtab	= gt_sflight
    it_fieldcatalog = gt_fieldcat
    it_sort	= gt_sort.

결과에서 COMPANY INFO 필드가 첫번째로 조회된 것은 필드 카탈로그가 Structure보다 우선 순위가 높기 때문.

그러므로 Structure에서 이미 선언된 필드를 변경하고 싶을 때는 필드 카탈로그에서 다시 선언하여 변경하면 된다.


 

반응형

'SAP ABAP 개발 및 설명 > ALV GRID' 카테고리의 다른 글

CL_GUI_ALV_GRID 기타 메소드  (0) 2020.08.24
ALV GRID - 기타 파라미터  (0) 2020.08.24
ALV GRID 레이아웃  (0) 2020.08.23
필드 카탈로그 - lvc_s_fcat 역할정리  (0) 2020.08.22
ALV GRID 템플릿만들기  (0) 2020.08.21