728x90
ABAP에서 말하는 ALV의 의미는 ABAP List Viewer 입니다.
리스트 화면에서 데이터를 조회하거나 수정하는 등의 목적으로 사용됩니다.
예제 : GRID ALV 이벤트 - ALV 버튼생성 로직
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
***********************************************************************
" INCLUDE TOP - GRID ALV에 사용할 컨테이너 및 그리드 변수 선언 "
DATA : go_custom_container_0100 TYPE REF TO cl_gui_custom_container. //컨테이너 - 클래스
DATA : go_grid_100 TYPE REF TO cl_gui_alv_grid. //그리드 - 클래스
DATA : gt_fcat TYPE lvc_t_fcat.
DATA : gs_layout TYPE lvc_s_layo.
DATA : gt_excluding TYPE ui_functions.
" INCLUDE TOP - 이벤트에 사용할 변수 선언 "
CLASS lcl_event_handler DEFINITION DEFERRED.
DATA : go_ehandler TYPE REF TO lcl_event_handler.
***********************************************************************
" INCLUDE CLS - 클래스 정의 "
CLASS lcl_event_handler DEFINITION INHERITING FROM cl_gui_object.
// 이벤트가 발생했을떄 반응하기 위한 클래스 정의와 메서드 선언
PUBLIC SECTION.
DATA : gv_object_text(30).
METHODS: constructor.
METHODS: handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS: handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
METHODS: handle_button_click
FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id
es_row_no.
* METHODS: handle_double_click
* FOR EVENT double_click OF cl_gui_alv_grid
* IMPORTING e_row
* e_column
* es_row_no.
* METHODS: handle_hotspot_click
* FOR EVENT hotspot_click OF cl_gui_alv_grid
* IMPORTING e_row_id
* e_column_id
* es_row_no.
ENDCLASS. "(LCL_EVENT_HANDLER DEFINITION)"
***********************************************************************
" INCLUDE CLS - 클래스 정의 "
CLASS lcl_event_handler IMPLEMENTATION.
// 발생된 이벤트에 의해 매서드가 실행된다.
// 선언된 메서드는 서브루틴에서 핸들러를 등록해야한다.
METHOD constructor.
CALL METHOD super->constructor.
* gv_object_text = e_object_text.
ENDMETHOD.
METHOD handle_toolbar.
IF GV_flag1 IS INITIAL. // 수정(C)과 조회(S) 사용을 위한 초기값을 지정.
GV_flag1 = gc_s.
ENDIF.
PERFORM toolbar USING gv_object_text e_object e_interactive.
ENDMETHOD.
METHOD handle_user_command.
PERFORM user_command USING gv_object_text e_ucomm.
ENDMETHOD.
METHOD handle_button_click.
ENDMETHOD.
* METHOD handle_double_click.
* ENDMETHOD.
* METHODhandle_hotspot_click.
* PERFORM hotspot_click USING
* gv_object_text e_row_id e_column_id es_row_no.
* ENDMETHOD.
ENDCLASS. "(LCL_EVENT_HANDLER IMPLEMENTATION)"
***********************************************************************
" INCLUDE F01 - 이벤트 핸들러 등록 "
CREATE OBJECT go_ehandler.
SET HANDLER go_ehandler->handle_toolbar FOR go_grid_100.
SET HANDLER go_ehandler->handle_user_command FOR go_grid_100.
***********************************************************************
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
***********************************************************************
" PERFORM toolbar USING gv_object_text e_object e_interactive. "
FORM toolbar USING pv_object_text
po_object TYPE REF TO cl_alv_event_toolbar_set
pe_interactive.
DATA : ls_toolbar TYPE stb_button.
IF sy-dynnr EQ 0200 AND pv_object_text EQ gc_obj1.
ELSE.
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO po_object->mt_toolbar.
CASE gv_flag1.
WHEN gc_s.
CLEAR ls_toolbar.
MOVE gc_chan TO ls_toolbar-function.
MOVE icon_change TO ls_toolbar-icon.
MOVE text-m02 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
WHEN gc_c.
CLEAR ls_toolbar.
MOVE gc_srch TO ls_toolbar-function.
MOVE icon_toggle_display_change TO ls_toolbar-icon.
MOVE text-m01 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
ENDCASE.
CLEAR ls_toolbar.
MOVE gc_add TO ls_toolbar-function.
MOVE icon_insert_row TO ls_toolbar-icon.
MOVE text-m03 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar.
MOVE gc_dele TO ls_toolbar-function.
MOVE icon_delete_row TO ls_toolbar-icon.
MOVE text-m04 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar.
MOVE gc_save TO ls_toolbar-function.
MOVE icon_system_save TO ls_toolbar-icon.
MOVE text-m05 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
ENDIF.
ENDFORM.
|
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
***********************************************************************
" PERFORM user_command USING gv_object_text e_ucomm. "
FORM user_command USING pv_object_text
pe_ucomm.
CASE sy-dynnr.
WHEN 0100.
CASE pe_ucomm.
WHEN 'SRCH'.
PERFORM search_flag USING gc_on gc_s.
PERFORM screen_set TABLES gt_alv_0040.
WHEN 'CHAN'.
PERFORM search_flag USING gc_on gc_c.
PERFORM screen_set TABLES gt_alv_0040.
WHEN 'ADD'.
PERFORM add_line TABLES gt_alv_0040 gt_temp_0040.
PERFORM screen_set TABLES gt_alv_0040.
WHEN 'DELE'.
PERFORM delete_line TABLES gt_alv_0040 gt_temp_0040
gt_del_temp1
USING go_grid gs_layo.
WHEN 'SAVE'.
PERFORM save_data TABLES gt_alv_0040 gt_temp_0040
USING go_grid gs_layo.
ENDCASE.
WHEN 0200.
CASE pe_ucomm.
WHEN 'SRCH'.
PERFORM search_flag USING gc_on gc_s.
PERFORM screen_set TABLES <ft_dy_alv1>.
WHEN 'CHAN'.
PERFORM search_flag USING gc_on gc_c.
PERFORM screen_set TABLES <ft_dy_alv1>.
WHEN 'ADD'.
PERFORM add_line TABLES <ft_dy_alv1> <ft_dy_alv2>.
PERFORM screen_set TABLES <ft_dy_alv1>.
WHEN 'DELE'.
PERFORM delete_line TABLES <ft_dy_alv1> <ft_dy_alv2>
<ft_dy_alv3>
USING go_grid2 gs_layo2.
WHEN 'SAVE'.
PERFORM save_data TABLES <ft_dy_alv1> <ft_dy_alv2>
USING go_grid2 gs_layo2.
ENDCASE.
WHEN 0300.
CASE pe_ucomm.
WHEN 'SRCH'.
PERFORM search_flag USING gc_on gc_s.
PERFORM screen_set TABLES gt_alv_0042.
WHEN 'CHAN'.
PERFORM search_flag USING gc_on gc_c.
PERFORM screen_set TABLES gt_alv_0042.
WHEN 'ADD'.
PERFORM add_line TABLES gt_alv_0042 gt_temp_0042.
PERFORM screen_set TABLES gt_alv_0042.
WHEN 'DELE'.
PERFORM delete_line TABLES gt_alv_0042 gt_temp_0042
gt_del_temp3
USING go_grid gs_layo.
WHEN 'SAVE'.
PERFORM save_data TABLES gt_alv_0042 gt_temp_0042
USING go_grid gs_layo.
ENDCASE.
ENDCASE.
ENDFORM.
|
컨테이너 참조유형
- [ CL_GUI_CUSTOM_CONTAINER ] - 클래스 컨테이너를 생성하기 위한 참조유형 ( 스크린 페인터를 활용한 컨테이너. )
- [ CL_GUI_DIALOGBOX_CONTAINER BOX ] - 형태로 보이게하는 컨테이너의 클래스 참조유형
- [ CL_GUI_DOCKING_CONTAINER ] - 크기조절이 가능한 컨테이너의 클래스 참조유형
- [ CL_GUI_SPLITTER_CONTAINER ] - 컨테이너를 분리하여 사용하는 컨테이너의 클래스 참조유형
- [ CL_GUI_EASY_SPLITTER_CONTAINER] - 분리된 영역을 상하 좌우로 한번더 분리컨테이너의 클래스 참조유형
메소드
- [ SET_TABLE_FOR_FIRST_DISPLAY ALV ]- 생성간 반드시 설정해야하는 메소드
- [ GET_FRONTEND_LAYOUT ] - 현재 설정된 ALV GRID의 레이아웃 정보를 가져온다
- [ GET_SELECTED_CELLS ] - 현재 선택된 복수의 셀 정보를 LVC_T_CELL 타입의 테이블로 변환한다. 즉 현재 선택된 셀들의 필드명, 인덱스 등의 정보를 가져온다
- [ GET_SELECTED_COLUMNS ] - 선택된 칼럼들의 정보를 LVC_T_COL 타입의 테이블로 변환한다
- [ GET_SELECTDE_ROWS ] - 선택된 멀티 라인의 정보를 LVC_T_ROW 타입의 테이블로 변환한다
- [ REFRESH_TABLE_DISPLAY ] - 이미 조회된 ALV의 아웃풋 테이블을 다시 조회한다
- [ SET_FRONTEND_LAYOUT ] - ALV GRID 레이아웃을 변경한다. 이 메서드를 호출하고 REFRESH_TABLE_DISPLAY메서드를 호출하면 변경된 레이아웃이 적용된다
- [ LVC_T_FCAT ] - 필드 카탈로그를 생성하기 위한 참조유형
- [ LVC_S_LAYO ] - 레이아웃을 생성하기 위한 참조유형
- [ LVC_S_SORT ] - 정렬을 하기위한 참조유형
SET PF-STATUS를 사용하지 않고 버튼을 생성할때 사용되는 로직
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
32
33
34
35
36
37
38
39
40
41
42
43
|
IF sy-dynnr EQ 0200 AND pv_object_text EQ gc_obj1.
ELSE.
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO po_object->mt_toolbar.
CASE gv_flag1.
WHEN gc_c. " 조회 - 값이 C 일경우 호출."
CLEAR ls_toolbar.
MOVE gc_srch TO ls_toolbar-function.
MOVE icon_toggle_display_change TO ls_toolbar-icon.
MOVE text-m01 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
WHEN gc_s. "수정 - 값이 S 일경우 호출."
CLEAR ls_toolbar.
MOVE gc_chan TO ls_toolbar-function.
MOVE icon_change TO ls_toolbar-icon.
MOVE text-m02 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
ENDCASE.
CLEAR ls_toolbar. " 추가."
MOVE gc_add TO ls_toolbar-function.
MOVE icon_insert_row TO ls_toolbar-icon.
MOVE text-m03 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar. " 삭제."
MOVE gc_dele TO ls_toolbar-function.
MOVE icon_delete_row TO ls_toolbar-icon.
MOVE text-m04 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
CLEAR ls_toolbar. " 저장."
MOVE gc_save TO ls_toolbar-function.
MOVE icon_system_save TO ls_toolbar-icon.
MOVE text-m05 TO ls_toolbar-text.
APPEND ls_toolbar TO po_object->mt_toolbar.
ENDIF.
|
ABAP ALV EDIT mode
ALV의 편집기능을 사용하기 위해서는 fcat 선언부에 edit 'X'를 추가해야합니다.
[ SET_READY_FOR_INPUT ]는 ALV의 편집과 조회상태값을 관리할때 사용됩니다.
ABAP LIST에서 DELETE 버튼 제거 : http://zevolving.com/2008/10/oo-alv-disable-delete-key-on-keyboard-in-alv-grid/
728x90
'IT > SAP S4 HANA' 카테고리의 다른 글
[SAP] ABAP 개발자와 컨설턴트 (0) | 2020.04.21 |
---|---|
[SAP] SAP GUI 단축키 및 트랜잭션 (1) | 2020.04.21 |
[SAP] ABAP Development Tip 03 (0) | 2019.11.25 |
[SAP] ABAP Development Tip 02 (0) | 2019.11.25 |
[SAP] ABAP Development Tip 01 (0) | 2019.11.25 |
댓글