selection screen에 parameters로 선언된 layout을 보게 되었다.
이게 도대체 무슨 의미인지 구글링을 해보았더니
사용자가 ALV 컬럼별 너비라던지, 순서 등을 커스텀하고 저장한 후 다음 이용시 그대로 LOAD하여 사용할 수 있도록 하는 기능이였다.
쉽게 말해 위의 기능을 구현하는 것이라고 생각하면 쉽다.
실무에서 자주 사용하는 기능이라고 하니 알아두면 좋을 것이라고 생각하였다.
그럼 이 기능을 selection screen에서 구현해보자!
( 생략 ...)
"selection screen layout 관련
DATA : gs_layout TYPE salv_s_layout_info,
gs_key TYPE salv_s_layout_key.
( 생략 ...)
( 생략 ...)
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인 파라미터 생성
( ... 생략 )
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으로 뺏다.
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.
이렇게 기능 구현이 끝났다.
기능 확인을 위한 레이아웃을 생성해보자!
쉽게 ALV 툴바의 Variant 버튼을 이용했다
save Layout 버튼을 누르면
위와 같은 창이 뜨는데, layout명과 설명을 입력 후 adopt 버튼을 클릭( 또는 Enter )
현재 ALV의 레이아웃이 저장된다.
서치헬프가 잘 붙어있는 모습을 확인 할 수 있었고
저장해 둔 레이아웃을 잘 가지고 오는 것도 확인할 수 있었다.
원하는 레이아웃을 선택하고 실행시키면
불러 온 레이아웃이 ALV에 잘 적용된 모습을 확인할 수 있다.