# SALV에 대해서
# SALV는 [ Simple ALV ]이며 ABAP에서 객체 지향 방식으로 ALV출력을 구현할 수 있도록 제공되는 프레임워크.
# 우선 간단하게 [ 조회 ]하는 것부터 시작해 보자.
# 01. 우선 조회하기 위해서는 [ 보여줄 인터널 테이블 ]과 [ 띄울 SALV ]가 필요하다. -> 간단하게 보자.

" 글로벌 데이터 "
DATA:
GT_LIST TYPE TABLE OF SCARR,
GS_LIST TYPE SCARR.
SELECT *
FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_LIST.
" SALV 관련 "
DATA:
GR_SALV TYPE REF TO CL_SALV_TABLE.
CL_SALV_TABLE=>FACTORY(
IMPORTING
R_SALV_TABLE = GR_SALV
CHANGING
T_TABLE = GT_LIST
).
# 02. 그다음 [ SALV ]을 실행시키기 위해서두 가지로 나누는데..!
1. 기본 화면에 SALV 보여주기

2. 팝업 화면으로 SALV 보여주기

상황에 맞춰서 설정하면 될 것 같다.
# 실행 화면 #

# 조회성 SALV 전체 로직을 보면?

# 사실 이렇게 보면 너무 안 이쁜 SALV가 되는데 이제 Class와 Method을 통해서 [ SALV ]을 꾸며보자.
속성을 시작하기 앞서, SALV을 하기 위해서 크게 두 가지로 나뉘어서 속성을 설정한다.
( 우리가 SALV을 쓸 때 Class을 보게 되면 다음과 같이 짝꿍으로 되어있다. )

- [ COLUMNS ]와 [ COLUMN ]으로 나누어져 있다.
# 우리는 이 두 개를 통해서 Class안에 있는 Method을 사용할 것이다.
그래서 Method을 쓰게 되면 [ 업캐스팅 ] or [ 다운캐스팅 ]이 사용되니 참고.
# 중요하게 봐야 하는 것은 항상 설정할 때는 다음과 같이 항상 [ SALV ]에서 [ GET_COLUMNS ] Method을 가져와야 한다.


또한, 참고해야 할 것은
[ CL_SALV_COLUMNS_TABLE ]을 써서 한 번에 컬럼과 테이블을 설정해도 되고
여기처럼 [ CL_SALV_COLUMNS_LIST ] or [ CL_SALV_COLUMNS ] 따로 설정해서
선언해도 되기 때문에 편한 거에 따라 설정하면 된다.
# SALV 속성들 -> Table 설정일 때
# Table을 설정할 때 기본적으로 있어야 하는 구문
이 부분 정의되어 있다고 생각하고 생략하겠다!

# [ SET_OPTIMIZE ] | 열 너비 최적화

*--------------------------------------------------------------------*
* 열 너비 최적화
*--------------------------------------------------------------------*
LO_COLUMNS_LIST->SET_OPTIMIZE( ).
# [ SET_COLOR ] | 열 색상 설정
# 컬럼을 설정할 때에는 다음과 같이 다운 캐스팅을 통해서 설정해야 한다.

*--------------------------------------------------------------------*
* 열 색상 설정
*--------------------------------------------------------------------*
LO_COLUMN_LIST ?= LO_COLUMNS_LIST->GET_COLUMN( 'CARRNAME' ).
DATA:
LS_COLOR TYPE LVC_S_COLO.
LS_COLOR-COL = 3.
LS_COLOR-INT = 0.
LS_COLOR-INV = 0.
LO_COLUMN_LIST->SET_COLOR( LS_COLOR ).
# [ SET_CELL_TYPE ] | CELL 타입 설정
# 상황에 맞춰서 Interface에 따라서 타입을 설정하면 된다.
# 버튼은 Method을 지원안 한다. 덤프가 뜬다..

# 01. 우선 해당하는 필드에 [ HOTSPOT ] 기능을 넣어보자.

*--------------------------------------------------------------------*
* 열 타입 설정
*--------------------------------------------------------------------*
LO_COLUMN_LIST ?= LO_COLUMNS_LIST->GET_COLUMN( 'URL' ).
LO_COLUMN_LIST->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ).
# 02. 이벤트 Class을 설정해 보자.
# ALV처럼 [ HOTSPOT ]으로 지정되어있지 않고, [ LINK ]으로 지정되어 있으니 참고 바란다.


CLASS LCL_EVENT DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_HOTSPOT_CLICK
FOR EVENT IF_SALV_EVENTS_ACTIONS_TABLE~LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW
COLUMN.
ENDCLASS.
CLASS LCL_EVENT IMPLEMENTATION.
METHOD HANDLE_HOTSPOT_CLICK.
ENDMETHOD.
ENDCLASS.
DATA:
GO_EVENT TYPE REF TO LCL_EVENT.
# 03. [ SET HANDLER ]을 통해서 이벤트 등록을 해보자.

DATA:
LO_EVENT_TABLE TYPE REF TO CL_SALV_EVENTS_TABLE.
CREATE OBJECT GO_EVENT.
LO_EVENT_TABLE = GR_SALV->GET_EVENT( ).
SET HANDLER GO_EVENT->HANDLE_HOTSPOT_CLICK FOR LO_EVENT_TABLE.
# 04. 간단하게 메시지 출력만 해보자.!


# SALV 속성들 -> Column 설정일 때
Column 또한?
# Column을 설정할 때 기본적으로 있어야 하는 구문
( 변경하고 싶은 [ Get_Column ]을 설정해서 속성 값을 설정하는 방법으로 이루어진다. )
이 부분 정의되어 있다고 생각하고 생략하겠다!

*--------------------------------------------------------------------*
* 공통 컬럼 설정
*--------------------------------------------------------------------*
DATA:
LO_COLUMNS TYPE REF TO CL_SALV_COLUMNS,
LO_COLUMN TYPE REF TO CL_SALV_COLUMN.
LO_COLUMNS = GR_SALV->GET_COLUMNS( ).
# [ SET_VISIBLE ] | 열 숨김 필드 설정

*--------------------------------------------------------------------*
* 열 숨김 필드 설정
*--------------------------------------------------------------------*
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'URL' ).
LO_COLUMN->SET_VISIBLE( IF_SALV_C_BOOL_SAP=>FALSE ).
# 다음과 같이 [ Column ]을 설정하기 위해서는 상위 클래스와 하위 클래스를 사용해서 [ Column ]을 설정해야 한다.

# [ SET_#####_TEXT ] | 필드 텍스트 설정

*--------------------------------------------------------------------*
* 필드 텍스트 설정
*--------------------------------------------------------------------*
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'CARRNAME' ).
LO_COLUMN->SET_LONG_TEXT( '항공사명' ).
LO_COLUMN->SET_MEDIUM_TEXT( '항공사명' ).
LO_COLUMN->SET_SHORT_TEXT( '항공사명' ).
# [ SET_ALIGNMENT ] | 필드 정렬 설정

*--------------------------------------------------------------------*
* 필드 정렬
*--------------------------------------------------------------------*
LO_COLUMN ?= LO_COLUMNS->GET_COLUMN( 'CARRNAME' ).
LO_COLUMN->SET_ALIGNMENT( IF_SALV_C_ALIGNMENT=>RIGHT ).

등등.. 나머지는 해당 Class의 Method을 확인해 보자.

끝..!
다음과 같이 SALV에서 여러 Class을 통해서 Method을 활용할 수 있다..!
더 궁금한 Method 있으시면 댓글로 알려주세요!
'.ABAP > ..ALV' 카테고리의 다른 글
| SAP Screen Layout 입출력 필드 0 없애기 (0) | 2025.08.22 |
|---|---|
| SAP ALV Toolbar Exclude( 삭제 ) 정리 (3) | 2025.08.04 |
| SAP ALV Dropdown( 드롭다운 ) List 정리 (0) | 2025.05.15 |
| SAP ALV Split(화면 분할) 동적 정리 (0) | 2025.05.06 |
| SAP ALV 화면 작을 때( Size 설정 ) (2) | 2025.03.20 |