일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 권한확인
- 권한제어
- REUSE ALV GRID
- ALV
- REUSE
- GUI Status 변경 안 됨
- SY-SUBRC
- ABAP SKIP
- SAP권한제어
- SAP권한확인
- Search Help 여러개 선택
- ABAP ORACLE HINT
- 월마지막날짜구하기
- GUI Status 활성화
- REUSE ALV
- ABAP권한제어
- abap alv row color
- ABAP Search Help 여러개 선택
- 1000번 화면 Search Help 여러개 선택
- SUBRC
- GUI Status
- sap
- 월종료일구하기
- GUI Status 변경 적용
- RP_LAST_DAY_OF_MONTHS
- ABAP WRITE
- abap
- ULINE
- ABAP ULINE
- ABAP권한확인
- Today
- Total
Irondol's Life
SAP ABAP ALV Toolbar 버튼 제거 / ABAP ALV Toolbar 버튼 추가 / ABAP ALV Toolbar 버튼 변경 / ABAP ALV Toolbar Function Code / ABAP ALV Grid Function Code 본문
SAP ABAP ALV Toolbar 버튼 제거 / ABAP ALV Toolbar 버튼 추가 / ABAP ALV Toolbar 버튼 변경 / ABAP ALV Toolbar Function Code / ABAP ALV Grid Function Code
irondol 2019. 12. 11. 12:47
SAP에서 ALV로 화면 구현을 할 때,
버튼을 구현하고자 하면 어디에 버튼을 달지 정해야 된다.
사실 위치는 현업이나 요청자의 기분에 따라 버튼의 위치가 바뀐다.
기존에 버튼이 줄줄이 달렸던 부분에 추가로 달리거나,
기존에 있던 버튼의 기능 대신 다른 기능을 넣어달라고도 한다.
특히 ALV Toolbar중 standard 버튼들의 기능 대신 다르게 넣어달라는 참신한 경우도 있다.
그냥 버튼을 새로 만들면 되는데...
꼭 기존 standard 버튼으로 해달라는 경우에도!!!
당황하지 않고 아래 부분을 잘 참조하여 적용하면 된다.
툴바 격파하러 꼬!
아래 캡쳐 기준
노란색 부분 툴바와 녹색 부분의 툴바는 로직 구현 방법이 다르다.
노란색 부분 툴바는 GUI Status에서 설정하는 부분이다.
노란색 부분은 일반적인 ALV Grid 화면에서 사용하는 GUI Status 중 Normal Screen에서 Application Toolbar에 해당한다.
노란색 부분에 버튼을 추가하고자 하면 GUI Status를 생성하여 버튼을 추가하고, 해당 화면 PBO에 생성한 GUI Status를 연결하고, PAI에 추가한 버튼의 Function Code(FCODE) 로직을 넣는다. PAI의 Function Code(FCODE)는 화면 Element list에 OK코드로 지정한 변수 ex)OK_CODE 를 통해서 전달된다.
녹색 부분 툴바 제외는 로직으로 구현하면 된다.
~TOP.
DATA : gt_exclude TYPE ui_functions. "ALV에서 제외할 Function Code
~F01. "제외 로직을 넣을 perform
DATA : ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_refresh. "refresh 제외
APPEND ls_exclude TO gt_exclude.
~C01. "ALV Grid 출력 로직
CALL METHOD grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
CHANGING
it_fieldcatalog = fieldcat[]
it_outtab = it_display[]
it_sort = gt_sort[].
SAP ALV Toolbar 버튼 Function Code / ALV Grid Function Code 내역은 다음과 같다.
위 로직 중 ls_exclude에 아래 정리된 툴바의 Function Code(Fcode)를 추가하면 화면에 보이지 않는다.
녹석 부분 툴바는 기본적으로 모든 툴바 버튼이 다 보이고, 제외하는 형식이다.
모두 다 안보이게 하고자 할때는 mc_fc_excl_all을 적용하면 된다.
* 만약 녹색 부분 툴바에 기존에 없는 버튼을 추가하거나 변경하고자 하면 다음과 같다.
* Event Handler Class
CLASS lcl_evt_handler DEFINITION. "DEFINITION
PUBLIC SECTION. "PUBLIC
* Event Handler Method
* toolbar
CLASS-METHODS : on_toolbar FOR EVENT toolbar
OF cl_gui_alv_grid
IMPORTING e_object.
* user_command
CLASS-METHODS : on_before_user_command FOR EVENT before_user_command
OF cl_gui_alv_grid
IMPORTING e_ucomm.
* user_command
CLASS-METHODS : on_user_command FOR EVENT user_command
OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS. "LCL_EVT_HANDLER DEFINITION
CLASS lcl_evt_handler IMPLEMENTATION. "IMPLEMENTATION
* toolbar
METHOD on_toolbar. "녹색 부분 툴바에 버튼 추가
DATA : lw_button TYPE stb_button.
CLEAR lw_button.
lw_button-function = 'BCANC'.
lw_button-icon = icon_incomplete.
lw_button-butn_type = 0.
lw_button-text = 'Cancel'.
APPEND lw_button TO e_object->mt_toolbar. "APPEND로 하면 ALV 툴바 맨 뒤에 생김.
* INSERT lw_button TO e_object->mt_toolbar index 1. "INSERT로 하면 ALV 툴바 index 자리로 생김. 1로 하면 맨 앞.
ENDMETHOD. "on_toolbar
* before_user_command
METHOD on_before_user_command. "녹색 부분 툴바 버튼이 다른로직 타게 변경
CASE e_ucomm.
WHEN cl_gui_alv_grid=>mc_fc_detail.
gr_alv->set_user_command('DETAIL_N').
ENDCASE.
ENDMETHOD. "on_before_user_command
* user_command
METHOD on_user_command.
DATA : lt_selected TYPE lvc_t_roid,
lw_selected LIKE LINE OF lt_selected,
ls_s_col TYPE lvc_s_col.
CASE e_ucomm.
WHEN 'BCANC'. "버튼 추가
MESSAGE 'Cancel Clicked!' TYPE 'I'.
WHEN 'DETAIL_N'. "버튼 변경
MESSAGE 'Hooked!!!' TYPE 'I'.
ENDCASE.
ENDMETHOD. "on_user_command
ENDCLASS. "LCL_EVT_HANDLER IMPLEMENTATION
* ALV 출력 전 Event Handler 활성화.
IF gr_container IS INITIAL.
CREATE OBJECT gr_container
EXPORTING
container_name = 'MY_CONTAINER'.
CREATE OBJECT gr_alv
EXPORTING
i_parent = gr_container.
* ALV = gr_alv에서 발생한 이벤트를 각각 받아서 처리하겠다라고 활성화
* toolbar
SET HANDLER lcl_evt_handler=>on_toolbar FOR gr_alv.
* before_user_command
SET HANDLER lcl_evt_handler=>on_before_user_command FOR gr_alv.
* user_command
SET HANDLER lcl_evt_handler=>on_user_command FOR gr_alv.
CALL METHOD gr_alv->set_table_for_first_display
EXPORTING
is_layout = ~~~
CHANGING
it_fieldcatalog = ~~~
it_outtab = ~~~
it_sort = ~~~.
ELSE.
gs_stable-row = 'X'. "가로 스크롤 고정
gs_stable-col = 'X'. "세로 스크롤 고정
CALL METHOD gr_alv->refresh_table_display
EXPORTING
is_stable = gs_stable
i_soft_refresh = 'X'.
ENDIF.
끝! 참 쉽죠?
'SAP > ABAP' 카테고리의 다른 글
SAP ABAP 권한 제어 확인 및 ABAP 권한 제어 로직 (0) | 2019.12.12 |
---|---|
SAP ABAP 월 마지막 날짜 구하기 / 월 종료일 구하기 (0) | 2019.12.12 |
SAP ABAP ORACLE HINT 적용 방법 (0) | 2019.12.11 |
SAP ABAP ALV ROW COLOR 행 색깔 넣기 (0) | 2019.12.11 |
SAP ABAP TRANSLATE 대문자/소문자 전환 (0) | 2019.12.11 |