STYLE 필드는 ALV에서 Cell 개별로 효과를 주기 위해 사용하는 필드 중 하나이다.

Strucutre Type은 "LVC_S_STYLE", Table Type로는 "LVC_T_STYLE" 를 사용한다.

 

 

구현 방법은 다음과 같다. 

  1. ALV output 인터널 테이블에 STYLE 용도로 사용할 필드를 Table Type인 LVC_T_STYLE으로 선언한다.
    ( 필드이지만 내부적으로는 인터널 테이블 갖는 구조임 ) 
  2. ALV output 인터널 테이블에서 효과를 주고 싶은 행의 Style필드에 효과를 주고 싶은 필드명과 그 필드에 주고자 하는 효과 값을 APPEND 한다. ( 한 행에 여러 건 입력 가능 ) 
  3. ALV Layout 의 "STYLEFNAME" 필드에 STYLE 필드로 사용될 필드명 반영한다.

 

이때, Table Type "LVC_T_STYLE" 은 Sorted Table Type 이므로 데이터 입력 시 APPEND 구문은 정렬 문제로 Dump의 우려가 있으니 INSERT 구문으로 데이터를 넣도록 하자. Key Field는 "FIELDNAME"으로 지정되어 있으므로 "FIELDNAME"에는 동일한 데이터 값이 중복되어 존재할 수 없다. 

< Table Type : LVC_T_STYL >

 


실무에서 주로 Style 필드는 Cell별로 Edit 모드를 제어하거나 Push button을 구현할 때 많이 사용된다. 

ALV output 인터널 테이블에 데이터를 다음과 같이 입력했을 경우, 

< Style 필드가 선언된 Output 인터널 테이블의 구조 및 입력된 예제 데이터 >

다음과 같은 ALV 결과 화면을 볼 수 있다. 

< STYLE 필드가 반영된 ALV 결과 화면 >

입력 데이터 예제와 같이 "STYLE" 필드에 효과를 줄 수 있는 상수 값들은 ALV CLASS "CL_GUI_ALV_GRID"의 Attribute에 "MC_STYLE_*" 로 정의되어 있어 필요시 찾아서 사용하면 된다. 

< STYLE 필드에 입력 가능한 상수값 >

 

만약 하나의 필드에 여러 효과를 동시에 주고자 할 때는 다음 예제와 같이 "+" 기호를 이용해 구현이 가능하다.

< Style 필드에 동시 효과 구현 예제 >

다음은 예제를 이용해서 Edit모드에서 특정 Cell에 Edit 모드와 기본 F4버튼을 동시에 비활성화한 화면(우측)이다. 

< Airline = 'AC' 에 EDIT 모드와 F4 버튼을 동시에 비활성화 >

하나의 셀에 여러 효과를 반영시 그 효과들이 무조건 다 반영되는 것은 아니며, 논리적으로 맞지 않거나 또는 표준 내부적으로 서로 동시에 허용되지 않은 효과들에 대해서는 일부 구현이 안될 수도 있다. 

 


번외로 혹시나 ALV Cell에 좀 더 투머치(?)한 효과를 주고자 한다면... 

INCLUDE <CL_ALV_CONTROL> 선언하여 사전에 정의되어 있는 더 많은 ALV Style 상수들을 활용할 수 있다. ( 폰트의 타입이나 색, 강조 효과, 정렬 등)

< INCLUDE Program <CL_ALV_CONTROL> >

ALV Style 상수 값이 정의된 INCLUDE Program <CL_ALV_CONTROL> 을 보면 주석에 "* Style 1" ~ "* Style 4" 까지 나누어져 있는 것을 확인할 수 있는데, 이는 STYLE 구조에서 사용되어야 할 필드명을 가리킨다. STYLE 구조 ( "LVC_S_STYL", "LVC_T_STYL" )의 필드를 보면 "STYLE" 필드 외에도 "STYLE2", "STYLE3", "STYLE 4"필드가 추가로 존재한다. ) 예를 들어 주석 "* Style 2" 하위에 선언된 상수는 Style 구조의 Field "STYLE2"에 반영하면 그 효과를 볼 수 있다. ALV Bolder를 제어하는 "STYLE2" 필드를 활용한다면 다음과 같은 ALV 화면도 구현 가능하다.

 

< ALV Grid 에서 STYLE 2 필드 활용하여 Cell의 Bolder를 제어한 예시 >

 

+ Recent posts