이번에는 Class ALV 기준으로 Toolbar Button과 관련된 내용들을 살펴보고자 한다.
일반적으로 ALV Toolbar 의 버튼을 제어하기 위해 ALV Event 중 Event "TOOLBAR" 를 많이 사용한다.
Event TOOLBAR 호출시점
Event "HOTSPOT" 경우 Fieldcatalog의 Hotspot 필드에 설정이 된 필드를 클릭했을 때 수행되는 것처럼, Event "TOOLBAR"는 Method "SET_TABLE_FOR_FIRST_DISPLAY" 또는 Method "REFRESH_TABLE_DISPLAY" 를 사용하여 ALV (재)출력시에 내부적으로 Event "TOOLBAR"를 호출하게 된다. 또한 ALV Toolbar에 영향이 있는 Fieldcatalog나 Layout과 같은 요소들의 (재)설정시 ( Method "SET_FRONTEND_FIELDCATALOG" , Method "SET_FRONTEND_LAYOUT" 사용시) 에도 Event "TOOLBAR" 를 호출한다.
이렇게 특정 시점에 ALV 내부에서 자동 호출되는 것 외에 Method "SET_TOOLBAR_INTERACTIVE" 를 사용하여 원하는 시점에 Event "TOOLBAR"를 직접 호출할 수도 있다.
Event TOOLBAR 메커니즘
Event "TOOLBAR" 파라미터 중 "e_object" 객체의 "mt_toolbar" 속성(Attribute)값에는 현재 ALV Toolbar에 보여지는 버튼들의 Function Code를 가지고 있는데, Method "SET_TABLE_FOR_FIRST_DISPLAY" 를 통해 처음 ALV를 출력하였을 때 설정된 버튼을 기본 값으로 가지고 있다. 만약 "it_toolbar_excluding" 파라미터에 제외할 버튼을 설정했다면 그것을 제외한 버튼들이 기본 값이 되어 있을 것이다. 그리고 Event "TOOLBAR" 호출시마다 "e_object->mt_toolbar"의 데이터는 기존에 있던 기본 값으로 Reset이 되는 구조이다.
따라서 Event "TOOLBAR"에서 "e_object->mt_toolbar"에 신규로 버튼을 추가한 로직이 있다면, 이것은 한번 수행으로 영구적으로 생성된 것이 아니라, Event "TOOLBAR" 호출시마다 기본값으로 Reset이 되어 반복적으로 버튼이 추가되는 형태라고 볼 수 있다.
버튼 제어 - 생성/변경
그럼 ALV TOOLBAR Event를 사용하여 추가할 수 있는 버튼 유형에 대해 알아보자.
ALV Toolbar에서는 GUI-STATUS Toolbar와는 다르게 버튼에 Dropdown 기능을 넣어 버튼의 기능을 세분화할 수 있다.
추가된 부분을 보면 좌측부터 구분선(|), Dropdown 버튼(필터), Dropdown 버튼+기본 버튼(리플레쉬), 기본 버튼(리플레쉬) 이렇게 4가지 유형으로 추가된 것을 볼 수 있다.
위 두가지 Dropdown 버튼의 차이는 좌측은 누르면 Dropdown List가 나오고
우측은 기본 버튼과 Dropdown 버튼이 구분선으로 구분되어 2가지 기능을 함께 사용 가능한 버튼이다.
TOOLBAR Event Method 예제를 보면 버튼의 타입(BUTN_TYPE 필드)에 의해 버튼 유형이 정해지는 것을 확일할 수 있다.
- '3' = 구분선, '2' = Dropdown버튼, '1' = Dropdown 버튼 + 기본 버튼, '0' = 기본버튼
* Type-pools CNTB 선언시, 예제와 같이 상수로 선언이 가능하다
Dropdown 버튼 구현시 추가로 Event "MENU_BUTTON"을 활성화해야 한다. Event "MENU_BUTTON" 는 Dropdown 버튼을 누르면 호출되는 Event로 Event "TOOLBAR"에서 정의한 버튼의 Function Code를 받아 해당 버튼의 하위 기능들을 추가로 정의 하는 방식이다. 버튼의 수행 로직은 Event "USER_COMMAND"에서 앞에 정의된 Function Code (FCODE) 값으로 구분하여 제어한다.
변경은 "e_object->mt_toolbar" 에 들어가 있는 값을 수정하면 되므로 어렵지 않게 구현가능 하다. 실무에서는 버튼에 Toggle 기능을 구현할 때 많이 사용된다. ( 예. 수정과 조회 모드를 변경하는 버튼 : 누를 때 마다 ICON이 변경되도록 구현 ( ICON_CHANGE <-> ICON_DISPLAY ) )
버튼 제어 - 삭제(숨김)
- ALV LAYOUT의 NO_TOOLBAR 필드에 'X' 적용 - ALV Toolbar 전체 숨김 및 비활성화. Event "TOOLBAR" 에 구현된 버튼은 반영되지 않음.
- Method "SET_TABLE_FOR_FIRST_DISPLAY"의 파라미터 "it_toolbar_excluding"이용 - ALV Toolbar 기본 버튼의 Function Code 값을 해당 파라미터에 넣으면 Toolbar에서 제외, Function Code "CL_GUI_ALV_GRID=>MC_FC_EXCL_ALL"값을 넣으면 LAYOUT의 "NO_TOOLBAR" 필드와 효과는 동일하지만 Event "TOOLBAR"를 통해 구현된 버튼은 그대로 반영된다는 점이 다름.
- Event "TOOLBAR" 에서 "e_object->mt_toolbar"에 숨기고자 하는 버튼의 Function Code를 찾아 "DISABLE" 필드에 'X' 적용
'ABAP Working Lv. > ALV' 카테고리의 다른 글
|ALV| Column Optimize ( After ALV Refresh ) (1) | 2023.11.01 |
---|---|
|ALV| Event DATA_CHANGED와 DATA_CHANGED_FINISHED 차이 (3) | 2022.08.09 |
|ALV| EDIT 모드 (0) | 2022.07.25 |
|ALV| 개별 Cell 제어 ( feat. STYLE 필드 ) (1) | 2022.07.14 |
| ALV | GET_SELECTED_ROWS 선택 라인 추출 (Feat. (Sub)Total 라인) (2) | 2022.06.28 |