CS Student’s SAP&Tech Journey✨

[SAP] ALV (3) 사용자별 레이아웃 저장 / Layout Variant 설정 (IS_VARIANT, I_SAVE) 본문

SAP/ALV

[SAP] ALV (3) 사용자별 레이아웃 저장 / Layout Variant 설정 (IS_VARIANT, I_SAVE)

인포마틱 2025. 3. 28. 14:21

SAP의 ALV는 기본적으로 표 형태로 데이터를 출력해주지만, 사용자마다 보고 싶은 뷰가 다를 수 있습니다. 어떤 사용자는 컬럼 순서를 바꾸고 싶고, 어떤 사용자는 특정 컬럼만 보고 싶어하기도 합니다.

이럴 때 사용하는 것이 바로 Layout Variant입니다.

Layout Variant는 사용자가 직접 구성한 뷰를 저장하고, 다음에도 그대로 불러와서 사용할 수 있도록 해주는 기능으로, SAP ALV에서 실무에서 가장 많이 쓰이는 옵션 중 하나입니다.

이번 포스팅에서는 SET_TABLE_FOR_FIRST_DISPLAY 메서드의 두 가지 핵심 파라미터인 IS_VARIANT와 I_SAVE 를 활용하여 사용자가 뷰를 저장하고 불러오는 기능을 구현해보겠습니다.

 


 

❓ Layout Variant란?

ALV에서 사용자가 설정한 컬럼 순서, 정렬, 필터, 숨김 컬럼 등을 저장해두고, 필요할 때마다 불러올 수 있도록 해주는 기능입니다. 실제 SAP의 표준 트랜잭션에서도 대부분 이 기능이 적용되어 있으며, ALV를 실무에 적용할 때 꼭 포함하는 편입니다.

 

 

클래스 CL_GUI_ALV_GRID의 메서드 SET_TABLE_FOR_FIRST_DISPLAY 파라미터 확인하기

SET_TABLE_FOR_FIRST_DISPLAY 메서드의 두 가지 핵심 파라미터인 IS_VARIANT와 I_SAVE를 확인하기 위해서 해당 파라미터들이 어떤 타입인지, 어떻게 전달되어야 하는지 확인합니다. 

 

1️⃣ SE24 → CL_GUI_ALV_GRID → 메서드 → SET_TABLE_FOR_FIRST_DISPLAY

 

2️⃣ Signature 탭에서 IS_VARIANTI_SAVE 확인

 

3️⃣ IS_VARIANT와 I_SAVE 타입 확인하기

IS_VARIANT TYPE DISVARIANT " 구조체
I_SAVE     TYPE CHAR01     " 문자 1자리

이처럼 직접 타입을 확인하면 선언 시 헷갈릴 일이 없습니다.

 

▶  TOP ( IS_VARIANT, I_SAVE 변수 선언)

DATA gs_variant TYPE disvariant.
DATA gv_save    TYPE char01.

TOP에 Variant 설정을 위한 구조체와 저장 옵션을 선언합니다.

 

▶  TOP :  화면에 사용자 레이아웃 이름을 입력받기

사용자가 불러올 Variant 이름을 직접 입력할 수 있도록 Selection Screen에 아래와 같은 파라미터를 추가합니다.

PARAMETERS pa_lay TYPE disvariant-variant.

 

사용자 Layout 정보를 ALV에 전달

SET_TABLE_FOR_FIRST_DISPLAY 호출 전에 아래처럼 Layout 정보를 채워서 넘겨줍니다.

MODULE init_control OUTPUT.

    GS_VARIANT-report = SY-CPROG. " 현재 프로그램 이름 (필수) "
    GS_VARIANT-variant = PA_LAY. "  화면에서 입력받은 사용자가 선택한 뷰 이름
    GV_SAVE = 'A'. "일단 A로 고정
    
ENDMODULE.

 

✔️ SAVE 저장 옵션 의미 정리

의미
U 만든 사람(본인)만 사용 가능
X 만든 사람 외 모든 사용자 사용 가능
A 만든 시점에 U 또는 X를 선택 가능하게 함 (✅ 가장 유연함)

 

▶ XXXXXO01(PBO) : ALV 호출 시 적용

MODULE init_control OUTPUT.
  IF GO_CON IS INITIAL. 
    CREATE OBJECT go_con
      EXPORTING
        container_name = 'MY_CON'.

    CREATE OBJECT go_alv
    EXPORTING
      i_parent = go_con.

    " display_control 모듈 "
    GS_LAYOUT-CWIDTH_OPT ='X'.
    CALL METHOD go_alv->set_table_for_first_display
      EXPORTING
        i_structure_name = 'SDYN_CONN'
        is_variant       = GS_VARIANT " is_variant 추가 "
        i_save           = GV_SAVE " i_save 추가 "
        is_layout        = GS_LAYOUT
      CHANGING
        it_outtab = gt_conn.



  ENDIF.
ENDMODULE.

 

▶ 뷰 저장 및 불러오기 화면

 ✔️내가 원하는 형태로 Layout 변경

 

✔️ ALV 우측 상단 'Layout 저장' 아이콘 클릭

 

✔️ 이름 입력 후 저장

 

✔️저장된 Layout은 다음 호출 시 불러올 수 있음