본문 바로가기
ABAP

ALV 4 (Layout)

by clode 2023. 2. 16.
728x90
반응형

먼저 이 아이콘이나 셀 색깔, 줄색깔, 버튼 기능을 구현할때 값을 담아줄 변수들을 먼저 선언해준다.

<TOP>

 DATA: icon(4),      "필드앞에 값대신 아이콘으로
       checkbox(1),
       linecolor(4) TYPE c,      "줄 색상 지정 필드
       cellcolor TYPE lvc_t_scol,     "셀 색상 지정 필드
       cellbutton  TYPE lvc_t_styl,  "셀 버튼
       button(1), "버튼 정보 담을 변수

ICON 신호등


실행화면에서 아이콘은 따로 COLUMN이 존재한다. 그러므로 필드 카탈로그 구성하는 FORM문에서 아이콘 COLUMN을 추가해준다.

FORM make_fieldcat .
  gs_fieldcat-fieldname = 'ICON'.
  gs_fieldcat-coltext = '신호등'.
  gs_fieldcat-just = 'C'.
  gs_fieldcat-icon = 'X'.
  gs_fieldcat-key = 'X'.
  APPEND gs_fieldcat TO gt_fieldcat.  CLEAR: gs_fieldcat.

어떤 ROW 값일때 어떤 아이콘을 표시해줄건지 지정해준다. SELECT 로 인터널 테이블에 값을 가져온후에 지정해줘야한다.

    LOOP AT gt_tab INTO gs_tab.
      IF gs_tab-erdat > '20200101'.
        gs_tab-icon = '@5C@'.   "2020년 이전 데이터는 빨간색아이콘
       APPEND ls_cellcolor TO gs_tab-cellcolor.
       CLEAR ls_cellcolor.
      ELSE.
        gs_tab-icon = '@5B@'. "초록색아이콘
       APPEND ls_cellcolor TO gs_tab-cellcolor. 
       CLEAR ls_cellcolor.
      ENDIF.

CHECK BOX

체크박스도 따로 COLUMN이 존재한다. 그러므로 필드 카탈로그 구성하는 FORM문에서 체크박스 COLUMN을 추가해준다. 편집모드로 열어주려면 EDIT필드를 사용하면 된다.

  gs_fieldcat-fieldname = 'CHECKBOX'.
  gs_fieldcat-coltext = '체크박스'.
  gs_fieldcat-just = 'C'.
  gs_fieldcat-checkbox = 'X'.
  APPEND gs_fieldcat TO gt_fieldcat.  CLEAR: gs_fieldcat.

신호등에서 초록색 아이콘일때만 체크박스에 체크를 하고 빨간색 아이콘일땐 체크되지 않도록 아이콘을 입력했던 로직 밑에 체크박스 로직을 넣어준다.

    LOOP AT gt_tab INTO gs_tab.
      IF gs_tab-erdat > '20200101'.
        gs_tab-icon = '@5C@'.   "빨간색아이콘
        gs_tab-checkbox = ''.
       APPEND ls_cellcolor TO gs_tab-cellcolor.
       CLEAR ls_cellcolor.
      ELSE.
        gs_tab-icon = '@5B@'. "초록색아이콘일때
        gs_tab-checkbox = 'X'.    "체크박스에 값이 들어간다
       APPEND ls_cellcolor TO gs_tab-cellcolor. 
       CLEAR ls_cellcolor.
      ENDIF.

COLUMN COLOR

필드카탈로그에 추가

LS_FIELDCAT-EMPHASIZE     = 'C700'.     " Red

ROW COLOR

레이아웃을 제어하는 FORM문에서 행에 색을 지정해주겠다는 로직을 추가해준다.

FORM layo .
  gs_layo-info_fname = 'LINECOLOR'. "줄 색깔
ENDFORM.

색을 지정할 행의 이름과 색상을 입력한다.

    CASE gs_tab-auart.
      WHEN 'ZOR'.
        gs_tab-linecolor = 'C100'.
*        WHEN 'ZKE1'.
*          gs_tab-linecolor = 'C300'.
*        WHEN 'ZKE2'.
*          gs_tab-linecolor = 'C500'.

여러 행에 색상 줄수 있다. 색이 너무 복잡해져서 하나만 넣었다.


COLUMN BUTTON

셀버튼은 버튼을 눌렀을때 이벤트도 ALV 그리드 안에서 발생하는 이벤트가 되기 때문에 CLASS에서도 선언을 해줘야한다.

CLASS lcl_event DEFINITION.
  PUBLIC SECTION. 
    METHODS: handle_button_click
                  FOR EVENT button_click OF cl_gui_alv_grid
      IMPORTING es_col_id es_row_no.
ENDCLASS.          


CLASS lcl_event IMPLEMENTATION. 
  METHOD handle_button_click.
    PERFORM button_click USING es_col_id es_row_no.
  ENDMETHOD.
ENDCLASS.                

DATA : g_application TYPE REF TO lcl_event.

버튼을 클릭했을때 버튼이 해당하는 행의 판매문서 번호와 클릭했다는 메세지를 출력해준다.

FORM button_click  USING    p_col_id TYPE lvc_s_col
                            p_row_no TYPE lvc_s_roid.

  READ TABLE gt_tab INTO gs_tab INDEX p_row_no-row_id.
  IF sy-subrc = 0.
    MESSAGE s000 WITH '(' gs_tab-vbeln ')클릭!'.
  ENDIF.
ENDFORM.

셀을 하나 추가 해야하기 때문에 아이콘이나 체크박스를 추가했을때처럼 레이아웃과 필드 카탈로그에 셀버튼을 추가해준다.

레이아웃 제어

FORM layo .
  gs_layo-stylefname = 'CELLBUTTON'. "셀 버튼
ENDFORM.

필드 카탈로그 구성
열 전체에 버튼을 생성해주려면 주석처리한 로직을 입력해주면 된다. 나는 앞에서 색상을 넣어준 오더유형의 'ZOR'에 해당하는 행에만 버튼을 넣어줄거기 때문에 주석처리한 로직을 넣지 않았다.

FORM make_fieldcat .
  gs_fieldcat-fieldname = 'BUTTON'.
* gs_fieldcat-style = cl_gui_alv_grid=>mc_style_button.
  gs_fieldcat-coltext = '버튼'.
  gs_fieldcat-just = 'C'.
  APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.
ENDFORM.

셀버튼 서식
앞에서 색상을 넣어준 오더유형의 'ZOR'에 해당하는 행에만 버튼을 넣어준다.

DATA: lt_cellbutton TYPE lvc_t_styl,
      ls_cellbutton TYPE lvc_s_styl.

CASE gs_tab-auart.
   WHEN 'ZOR'.
   gs_tab-linecolor = 'C100'.

 ls_cellbutton-fieldname = 'BUTTON'.
 ls_cellbutton-style = cl_gui_alv_grid=>mc_style_button.
        INSERT ls_cellbutton INTO TABLE gs_tab-cellbutton.

ALV안에서 일어나는 이벤트기 때문에 이벤트가 발생했다는 것을 감지하기 위해 핸들러를 등록한다.

  CREATE OBJECT g_application.
  SET HANDLER g_application->handle_button_click FOR g_alv.
728x90
반응형

'ABAP' 카테고리의 다른 글

ALV 6 (필드카탈로그 구성)  (0) 2023.02.16
ALV 5 (SPLIT)  (0) 2023.02.16
ALV 3 (Hotspot)  (0) 2023.02.16
ALV 2 (이벤트)  (0) 2023.02.16
ALV  (0) 2023.02.16

댓글