728x90

# 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 있으시면 댓글로 알려주세요!

728x90