이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://www.samplecodeabap.com/web-dynpro-alv-code-part-1/

 

 

My Experiments with ABAP


Code to go with Web Dynpro ALV – Part 1

· · , · Leave a comment

웹딘프로아밥 ALV는 컴포넌트 SALV_WD_TABLE를 사용하여 만듭니다. 보통 ALV를 만든후 모양을 조정하는 코드를 넣습니다. 아래 샘플 코드는 ALV에서 자주 사용하는 옵션을 위주로 작성되었습니다. 도움이 되시길 바랍니다.

ALV의 모양을 조정하기 위해서는 ALV configuration model의 API를 사용하여 메소드 호출을 해야 합니다. ALV configuration model을 가져오는 방법은 보통 마법사를 이용합니다. 아래 그림처럼 웹딘프로아밥 코드 마밥사를 이용하여 ALV 컴포넌트의 GET_MODEL 메소드를 호출합니다.

Web Dynpro Code Wizard for ALV Configuration Model

ALV Configuration Model 은 여러 인터페이스를 구현하고 있습니다. 각 인터페이스는 디스플레이 세팅, 툴바 세팅, 컬럼 세팅 등을 담당합니다.

ALV Configuration Model

ALV Configuration Model 

더 자세한 내용은 공식 헬프 사이트 help.sap.com 링크를 참고하세요.


 

 

 

테이블 디자인을 줄무늬(Alternating, zebra)로 변경하기

기본값은 줄무늬(alternating)가 아니고 스탠다드 디자인 입니다. 아래는 줄무늬로 변경하는 코드 입니다.

METHOD set_alternating .
 
*--------------------------------------------------------------------*
* Call method GET_MODEL of used component
* Code using web dynpro code wizard
*--------------------------------------------------------------------*
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
* Method call to set alternating design (zebra)
  lo_config_table->if_salv_wd_table_settings~set_design(
                         cl_wd_table=>e_design-alternating ) .
 
ENDMETHOD.

 

줄무늬(alternating) 외에 사용 가능한 디자인 값은 아래와 같습니다.

cl_wd_table=>e_design-standard
cl_wd_table=>e_design-transparent
cl_wd_table=>e_design-transparent_with_grid


 

 

빈 테이블 안내문구 변경하기

표시할 줄이 없어서 빈 테이블인 경우 원하는 안내문구가 나타나게 변경할 수 있습니다.

lo_config_table->if_salv_wd_table_settings~set_empty_table_text(
    value = 'No Order selected' ) .

 


 

 

ALV 헤더 변경하기

아래 코드를 이용하면 ALV 헤더를 변경할 수 있습니다.

METHOD set_header .
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  DATA : lo_alv_header TYPE REF TO cl_salv_wd_header .
 
  lo_alv_header = lo_config_table->if_salv_wd_table_settings~create_header( ) .
 
  lo_alv_header->set_text( 'List of Sales Orders').
 
ENDMETHOD.

 


 

 

표시된 열(컬럼) 수 변경하기

기본적으로 ALV는 모든 컬럼을 표시하도록 동작합니다. 그래서 컬럼이 많은 경우 가로방향으로 계속 늘어나서 가로스크롤이 발생합니다. 오른쪽 끝에 있는 필터와 세팅이 보이지 않고 스크롤해서 찾아야 하는 불편함이 발생합니다. 이 문제를 해결하는 방법은 바로 표시된 열 옵션에 값을 지정하여 한번에 표시되는 열(컬럼)을 줄여서 스크롤이 발생하지 않도록 할 수 있습니다.

적당한 값을 얻기 위해서는 세팅 메뉴에서 값을 바꿔가며 테스트 해보세요.

image004

적당한 값을 찾았다면 이제 프로그램에 값을 고정하는 코딩을 추가 합니다.

METHOD set_width .
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  lo_config_table->if_salv_wd_table_settings~set_scrollable_col_count( 10 ).
   
ENDMETHOD.

 

적당한 값이란 화면에 가로 스크롤바가 생기지 않는 컬럼 수 입니다. 이제 스크롤바는 ALV안에 있습니다.

image005


 

 

표시된 행(라인) 수 변경하기

아래 코드로 한번에 표시되는 행(라인)의 수를 변경 할 수 있습니다.

lo_config_table->if_salv_wd_table_settings~set_visible_row_count( 5 ) .

 


 

 

컬럼 헤더 변경하기

컬럼 헤더는 연결된 데이터 엘리먼트의 레이블이 자동으로 표시됩니다. 컬럼 헤더를 변경하는 바람직한 방법은 데이터 엘리먼트의 레이블을 변경하는 것입니다. 만약 ALV에서만 직접 컬럼 헤더를 변경하고자 한다면 아래의 두가지 방법이 있습니다.

방법 1: 클래스 CL_SALV_WD_COLUMN_HEADER 의 SET_TEXT 메소드로 직접 텍스트를 입력합니다.

METHOD change_column_header.
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  DATA : lo_column TYPE REF TO cl_salv_wd_column .
  lo_column = lo_config_table->if_salv_wd_column_settings~get_column( 
                       'SD_DOC' ) .
 
  IF lo_column IS NOT INITIAL.
    DATA : lo_column_header TYPE REF TO cl_salv_wd_column_header .
    lo_column_header = lo_column->create_header( ) .
    lo_column_header->set_text( 'Sales Order' ) .
  ENDIF.
 
ENDMETHOD.

 

image006

방법 2: 컬럼 헤더에 다른 데이터 엘리먼트를 지정합니다.

클래스 CL_SALV_WD_COLUMN_HEADER 의 SET_PROP_DDIC_BINDING_ELEMENT 메소드로 헤더 텍스트를 위한 별도의 데이터 엘리먼트를 지정합니다.

METHOD change_column_header .
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  DATA : lo_column TYPE REF TO cl_salv_wd_column .
  lo_column = lo_config_table->if_salv_wd_column_settings~get_column( 'SD_DOC' ) .
 
  IF lo_column IS NOT INITIAL.
    DATA : lo_column_header TYPE REF TO cl_salv_wd_column_header .
 
    lo_column_header = lo_column->get_header( ) .
    lo_column_header->set_prop_ddic_binding_element(
             EXPORTING value = 'EBELN').
  ENDIF.
 
ENDMETHOD.

 

image007


 

 

컬럼 숨기기

METHOD hide_column .
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  DATA : lo_column TYPE REF TO cl_salv_wd_column .
  lo_column = lo_config_table->if_salv_wd_column_settings~get_column( 'MATERIAL' ) .
 
  IF lo_column IS NOT INITIAL.
    CALL METHOD lo_column->set_visible
      EXPORTING
        value = cl_wd_uielement=>e_visible-none.
  ENDIF.
ENDMETHOD.                    "change_column_header

 


 

 

컬럼 좌/우 고정

GUI ALV와는 다르게 웹딘프로아밥 ALV는 컬럼을 좌/우 양쪽 끝에 고정할 수 있습니다. 컬럼을 고정하기 위해서는 우선 SET_SCROLLABLE_COL_COUNT 메소드로 스크롤할 컬럼 수를 지정해야 합니다. 그런후 고정할 컬럼에 각자 SET_FIX_POSITION 메소드를 호출하여 고정시킵니다. 예를들어 이번 예제에서는 10 컬럼이 있고 이중 1 컬럼씩 좌/우 각각 고정하고자 합니다. 그래서 SET_SCROLLABLE_COL_COUNT 로 8을 지정하였습니다.

METHOD fix_columns .
 
  DATA lo_interfacecontroller TYPE REF TO iwci_salv_wd_table .
  DATA lo_config_table        TYPE REF TO cl_salv_wd_config_table.
 
  lo_interfacecontroller =   wd_this->wd_cpifc_order_salv( ).
  lo_config_table = lo_interfacecontroller->get_model( ).
 
  lo_config_table->if_salv_wd_table_settings~set_scrollable_col_count( 8 ) .
 
  DATA lo_column TYPE REF TO cl_salv_wd_column .
 
  lo_column = lo_config_table->if_salv_wd_column_settings~get_column( 'SD_DOC' ) .
  lo_column->set_fixed_position( cl_wd_abstr_table_column=>e_fixed_position-left ).
 
  lo_column = lo_config_table->if_salv_wd_column_settings~get_column( 'ITM_NUMBER' ) .
  lo_column->set_fixed_position( cl_wd_abstr_table_column=>e_fixed_position-right ) .
 
ENDMETHOD.

 

 

 

이글은 아래 링크의 원본 글에 대한 한글 번역 입니다

https://www.samplecodeabap.com/web-dynpro-alv-code-part-1/

+ Recent posts