[SAP] ABAP GRID ALV
본문 바로가기
IT/SAP S4 HANA

[SAP] ABAP GRID ALV

by DHan- 2020. 1. 10.
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/

 

OO ALV: Disable DELETE key on Keyboard in ALV Grid - ABAP Help Blog

Catch the event generated by DELETE-key on Keyboard & disable it in OO ALV using CL_GUI_ALV_GRIDFrom ABAP 6.20, SAP has provided many options with the ALV

zevolving.com

 

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

댓글