原文:Small Fire · SALV创建ALV · ABAP 子专栏 · Small Fire 技术笔记
创建和显示
*&---------------------------------------------------------------------*
*& This code snippet will show how to use the CL_SALV_TABLE to
*& generate the ALV
*&---------------------------------------------------------------------*
REPORT ztest_oo_alv_main.
*----------------------------------------------------------------------*
* CLASS lcl_report DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_report DEFINITION.
PUBLIC SECTION.
* Final output table
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
erdat TYPE erdat,
auart TYPE auart,
kunnr TYPE kunnr,
netwr TYPE netwr,
check TYPE flag, "复选框"
t_color TYPE lvc_t_scol,"单元格颜色设置"
END OF ty_vbak.
TYPES: ty_t_vbak TYPE STANDARD TABLE OF ty_vbak.
DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
* ALV reference
DATA: o_alv TYPE REF TO cl_salv_table.
METHODS:
get_data, "data selection"
generate_output. "Generating output"
*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
* In this section we will define the private methods which can
* be implemented to set the properties of the ALV and can be
* called in the
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*
ENDCLASS. "lcl_report DEFINITION"
START-OF-SELECTION.
DATA: lo_report TYPE REF TO lcl_report.
CREATE OBJECT lo_report.
lo_report->get_data( ).
lo_report->generate_output( ).
*----------------------------------------------------------------------*
* CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_report IMPLEMENTATION.
METHOD get_data.
SELECT vbeln erdat auart kunnr
INTO TABLE t_vbak
FROM vbak
UP TO 20 ROWS.
ENDMETHOD. "get_data"
*.......................................................................
METHOD generate_output.
"Calling the static Factory method"
DATA: lx_msg TYPE REF TO cx_salv_msg.
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = abap_ture "以列表还是GUI形式控制"
IMPORTING
r_salv_table = o_alv "用来接收工厂产生的实例"
CHANGING
t_table = t_vbak ).
CATCH cx_salv_msg INTO lx_msg.
ENDTRY.
*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
* In this area we will call the methods which will set the
* different properties to the ALV
*$*$*.....CODE_ADD_2 - End....................................2..*$*$*
"Displaying the ALV"
o_alv->display( ).
ENDMETHOD. "generate_output"
*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
* In this area we will implement the methods which are defined in
* the class definition
*$*$*.....CODE_ADD_3 - End....................................3..*$*$*
ENDCLASS. "lcl_report IMPLEMENTATION"
Contain模式创建SALV
*&---------------------------------------------------------------------*
REPORT ztest_oo_alv_main.
* Final output table
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
erdat TYPE erdat,
auart TYPE auart,
kunnr TYPE kunnr,
netwr TYPE netwr,
END OF ty_vbak.
TYPES: ty_t_vbak TYPE STANDARD TABLE OF ty_vbak.
DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
DATA: gr_table TYPE REF TO cl_salv_table.
DATA: gr_functions TYPE REF TO cl_salv_functions_list.
DATA: gr_container TYPE REF TO cl_gui_custom_container.
DATA: ok_code TYPE syucomm.
START-OF-SELECTION.
CALL SCREEN 1000. "Screen Number"
DULE 1000_pbo OUTPUT.
SELECT vbeln erdat auart kunnr
INTO TABLE t_vbak
FROM vbak
UP TO 20 ROWS.
" 判断是否已分配了一个有效引用"
IF gr_container IS NOT BOUND.
" 创建容器 "
CREATE OBJECT gr_container
EXPORTING
container_name = 'CONTAINER_1'. " 屏幕上用户自定义控件名 "
" 创建 ALV "
cl_salv_table=>factory(
EXPORTING
r_container = gr_container
container_name = 'CONTAINER_1'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_data[] ).
" 附加刷新按钮 "
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
lr_functions = gr_table->get_functions( ).
lr_functions->set_all( abap_true ). "激活所有的 ALV 内置通用按钮"
INCLUDE <icon>.
DATA: l_icon TYPE string.
l_icon = icon_refresh.
" 附加按钮,只适用于可控模式下的SALV "
lr_functions->add_function(
name = 'refresh'
icon = l_icon
text = '刷新按钮'
tooltip = '刷新数据'
"按钮存放的位置:这里在右边附加。该参数的其他取值可以查看该方法源码,可以找到该参数其他取值的蛛丝马迹"
position = if_salv_c_function_position=>right_of_salv_functions ).
" 显示 "
gr_table->display( ).
ENDIF.
ENDMODULE.
以弹出框显示SALV:
DATA: gr_table TYPE REF TO cl_salv_table.
cl_salv_table=>factory(
IMPORTING r_salv_table = gr_table
CHANGING t_table = gt_data[]
).
"设置弹出框属性"
gr_table->set_screen_popup(
start_column = 1
end_column = 50
start_line = 1
end_line = 5 ).
gr_table->display( ).