[SAP ABAP] selection screen에서 layout 불러오기, Layout Variant

성희·2025년 9월 2일
0

[SAP개발] ABAP

목록 보기
12/12
post-thumbnail

개요


selection screen에 parameters로 선언된 layout을 보게 되었다.
이게 도대체 무슨 의미인지 구글링을 해보았더니
사용자가 ALV 컬럼별 너비라던지, 순서 등을 커스텀하고 저장한 후 다음 이용시 그대로 LOAD하여 사용할 수 있도록 하는 기능이였다.


쉽게 말해 위의 기능을 구현하는 것이라고 생각하면 쉽다.
실무에서 자주 사용하는 기능이라고 하니 알아두면 좋을 것이라고 생각하였다.

그럼 이 기능을 selection screen에서 구현해보자!

구현(코드)

top

( 생략 ...)

"selection screen layout 관련
DATA : gs_layout TYPE salv_s_layout_info,
       gs_key    TYPE salv_s_layout_key.

( 생략 ...)

s01

( 생략 ...)

SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE TEXT-t02.

  PARAMETERS : pa_layo TYPE slis_vari.

SELECTION-SCREEN END OF BLOCK bl2.

TYPE이 slis_vari인 파라미터 생성

main

( ... 생략 )

INITIALIZATION.
  PERFORM load_layout.

( ... 생략 )

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_layo.
  PERFORM f4_layout.
  
( ... 생략 )

INITIALIZATION. 주기에서 레이아웃 정보를 불러오고
AT SELECTION-SCREEN ON VALUE-REQUEST에서 f4 이벤트 달아주기

로직은 FORM으로 뺏다.

f01

FORM load_layout .

  gs_key-report = sy-repid.
  gs_layout     = cl_salv_layout_service=>get_default_layout( s_key    = gs_key
                                                              restrict = '1'    ).

  pa_layo = gs_layout-layout.

ENDFORM.

FORM f4_layout .

  gs_key-report = sy-repid.
  gs_layout     = cl_salv_layout_service=>f4_layouts( s_key    = gs_key
                                                      restrict = '1'    ).

  pa_layo = gs_layout-layout.

ENDFORM.

FORM create_alv .

  CREATE OBJECT gcl_container
    EXPORTING
      container_name = 'GCL_CONTAINER'.

  CREATE OBJECT gcl_grid
    EXPORTING
      i_parent = gcl_container.

  SET HANDLER : lcl_event_handler=>handle_double_click      FOR gcl_grid,
                lcl_event_handler=>handler_changed_finished FOR gcl_grid.

  CALL METHOD gcl_grid->register_edit_event
    EXPORTING
      i_event_id = gcl_grid->mc_evt_modified.

  gs_variant-report  = sy-repid.
  gs_variant-variant = pa_layo.

  CALL METHOD gcl_grid->set_table_for_first_display
    EXPORTING
      is_variant           = gs_variant
      is_layout            = gs_alv_layo
      i_save               = 'A'
      it_toolbar_excluding = gt_exclude
    CHANGING
      it_outtab            = gt_data
      it_fieldcatalog      = gt_fcat.

ENDFORM.

f01에서 주의 깊게 봐야할 부분은 set_table_for_first_display를 호출하기 전 사용자가 선택한 variant를 담아두는 부분이다.
=> gs_variant-variant = pa_layo.

이렇게 기능 구현이 끝났다.

검증 및 확인

1. 레이아웃을 저장하기

기능 확인을 위한 레이아웃을 생성해보자!
쉽게 ALV 툴바의 Variant 버튼을 이용했다

save Layout 버튼을 누르면

위와 같은 창이 뜨는데, layout명과 설명을 입력 후 adopt 버튼을 클릭( 또는 Enter )

현재 ALV의 레이아웃이 저장된다.

2. 저장한 레이아웃을 잘 불러오는지 확인


서치헬프가 잘 붙어있는 모습을 확인 할 수 있었고

저장해 둔 레이아웃을 잘 가지고 오는 것도 확인할 수 있었다.

원하는 레이아웃을 선택하고 실행시키면

불러 온 레이아웃이 ALV에 잘 적용된 모습을 확인할 수 있다.

profile
ABAP 개발자로 성장하는 중

0개의 댓글