먼저 이 아이콘이나 셀 색깔, 줄색깔, 버튼 기능을 구현할때 값을 담아줄 변수들을 먼저 선언해준다.
<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.
'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 |
댓글