SAP: 创建ALV GRID容器

SAP 创建ALV GRID容器

 

1、主程序

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
*&---------------------------------------------------------------------*
*& Report  Z15_12
*& 可执行程序
*&---------------------------------------------------------------------*
*&
*& 创建 ALV GRID 容器
*& 注意每个程序都需要激活方可执行
*&---------------------------------------------------------------------*
 
REPORT Z15_12.
 
 
DATA: CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER. " 定义容器, 参照 自定义控件"其中自定义控件命名为CON1
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.  "定义ALV变量,参照 CL_GUI_ALV_GRID类"
DATA: GS_VARIANT like DISVARIANT, "" 列表变量
      gs_cs_variant like disvariant.
DATA: GT_SFLIGHT TYPE TABLE OF SFLIGHT.  " 要显示在屏幕上的内表
DATA: gs_layout  type lvc_s_layo .
DATA: gt_toolbar TYPE  ui_functions .
DATA: gt_sort TYPE lvc_t_sort.  " 排序
 
PARAMETERS: p_var like disvariant-variant.  " 参数变量
 
 
*& 设置GRID布局
PERFORM setting_layout CHANGING gs_layout .
 
*& 根据用户显示或隐藏布局按钮
PERFORM setting_toolbar.
 
*& 排序
PERFORM setting_sort.
 
*& 显示检索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
*&
  gs_variant-report = sy-repid.
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
      IS_VARIANT    = gs_variant
*     I_TABNAME_HEADER          =
*     I_TABNAME_ITEM            =
*     IT_DEFAULT_FIELDCAT       =
      I_SAVE        = 'A'
*     I_DISPLAY_VIA_GRID        = ' '
    IMPORTING
*     E_EXIT        =
      ES_VARIANT    = gs_variant
    EXCEPTIONS
      NOT_FOUND     = 1
      PROGRAM_ERROR = 2
      OTHERS        = 3.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
    p_var = gs_variant-variant .
  ENDIF.
 
 
 
FORM setting_layout CHANGING p_layout type lvc_s_layo.
  p_layout-cwidth_opt = 'X' . "自动调节长度
  p_layout-grid_title = 'get_current_cell Method TEST'"标题栏"
  p_layout-sel_mode = 'D'" 选择模式:可选择多行"
  p_layout-zebra = 'X'.   "指定条纹(STRIPE)属性"
ENDFORM. " setting_layout.
 
 
*& 根据用户显示或隐藏布局按钮
FORM setting_toolbar.
  DATA : l_exclude TYPE UI_FUNC.
 
  l_exclude = cl_gui_alv_grid=>mc_fc_save_variant.
  APPEND l_exclude TO gt_toolbar.
 
  l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
  APPEND l_exclude TO gt_toolbar.
ENDFORM.  " SETTING_TOOLBAR
 
*& 排序 子程序
FORM setting_sort.
  DATA: ls_sort TYPE lvc_s_sort.
  ls_sort-spos = '1'" 排序顺序 ,整形数字
  ls_sort-fieldname = 'CARRID'.  " 排序字段名称
  ls_sort-up = 'X' . "  升序  或  LS_SORT-DOWN = 'X'  "降序
  ls_sort-subtot = 'X' .   " 显示合计
 
  APPEND ls_sort to gt_sort .
ENDFORM. " setting_sort.
 
 
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
  " 声明双击事件方法
    METHODS: handle_double_click
     FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
    IMPORTING e_row e_column.
ENDCLASS.
 
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_double_click. "双击事件方法的实现"
    LEAVE TO SCREEN 0 .
  ENDMETHOD.
ENDCLASS.      " LCL_event_receiver.
 
DATA: event_receiver type ref to lcl_event_receiver .
 
*CREATE OBJECT event_receiver.
* 注册事件Handler方法
*SET HANDLER event_receiver->handle_double_click FOR g_grid .
*&
 
 
*& 查询数据,然后调用屏幕100.
START-OF-SELECTION.
  SELECT * FROM SFLIGHT
    INTO TABLE GT_SFLIGHT UP TO 25 ROWS.
  CALL SCREEN 100.
 
  gs_variant-report = sy-repid.
  gs_variant-username = sy-uname.
 
*&
*& 创建 AVL控件
  INCLUDE Z15_12_PBO.
*INCLUDE Z15_11_PBO.
*  INCLUDE Z15_10_PBO.
 
*
 
MODULE user_command_0100 INPUT.
  DATA: l_row type i,
        l_value type c,
        l_col type i,
        ls_row type lvc_s_row,
        ls_col type lvc_s_col,
        ls_roid type lvc_s_roid.
 
  DATA: ls_scroll type lvc_s_stbl.
  ls_scroll-row = 'X'.
  ls_scroll-col = 'X'.
 
*& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= get_current_cell
  CALL METHOD G_GRID->GET_CURRENT_CELL
    IMPORTING
      E_ROW     = l_row
      E_VALUE   = l_value
      E_COL     = l_col
      ES_ROW_ID = ls_row
      ES_COL_ID = ls_col
      ES_ROW_NO = ls_roid.
 
*&   重新查询已经显示在ALV的输出表时使用的方法。
  CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE      = ls_scroll
      I_SOFT_REFRESH = 'X'
*    EXCEPTIONS
*     FINISHED       = 1
*     others         = 2
    .
  IF SY-SUBRC <> 0.
*   Implement suitable error handling here
  ENDIF.
 
 
ENDMODULE. " user_command_0100.

  

2、 创建 PBO 子程序

命名为  Z15_12_PBO

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
*----------------------------------------------------------------------*
***INCLUDE Z15_12_PBO.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE INIT_CON OUTPUT.
*& 1、创建容器对象
  IF CON1_REF IS INITIAL.  " 如果容器是空的,创建容器对象"
    CREATE OBJECT CON1_REF
      EXPORTING
        CONTAINER_NAME = 'CON1'.
 
*& 2、创建 ALV GRID 控件 对象
    CREATE OBJECT G_GRID
      EXPORTING
        I_PARENT          = CON1_REF .
*      EXCEPTIONS
*        error_cnt1_create = 1
*        error_cnt1_init   = 2
*        error_cnt1_link   = 3
*        error_dp_create   = 4
*        OTHERS            = 5.
*    if sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty number sy-msgno
*      with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
*    endif.
  ENDIF. "  CON1_REF"
 
CREATE OBJECT event_receiver.
* 注册事件Handler方法
SET HANDLER event_receiver->handle_double_click FOR g_grid .
*&
 
*& 模式-> 选择:ABAP对象模式 ,(继续)-> 调用方法, 在接口栏=G_GRID, 类/接口栏= CL_GUI_ALV_GRID, 方法栏= SET_TABLE_FOR_FIRST_DISPLAY
*& 3、 ALV GRID显示数据方法
  CALL METHOD g_grid->set_table_for_first_display
    EXPORTING
      I_STRUCTURE_NAME     = 'SFLIGHT'
      i_save               = 'A'
      is_variant           = gs_variant
      i_default            = ' '
      is_layout            = gs_layout
      it_toolbar_excluding = gt_toolbar
    CHANGING
      It_OUTTAB            = GT_SFLIGHT
      it_sort              = gt_sort.
 
ENDMODULE.                 " INIT_CON  OUTPUT

  

3、屏幕逻辑流程序

1
2
3
4
5
6
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
MODULE init_con.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.

  

 

posted @   samrv  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示