创建和显示 ALV

*&---------------------------------------------------------------------*
*& 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.
    TYPES: BEGIN OF str_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,"单元格颜色设置"
           t_celltype TYPE salv_t_int4_column,  "设置单元格style使用"
        END OF str_vbak.
    TYPES: ty_t_vbak TYPE STANDARD TABLE OF str_vbak.
    DATA: gt_vbak TYPE STANDARD TABLE OF str_vbak.
    "ALV reference"
    DATA: gr_table TYPE REF TO cl_salv_table.
    DATA: gr_container TYPE REF TO cl_gui_custom_container.
    "Methods Define"
    METHODS:
      get_data,        "Data prepare" 
      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 generate_output
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*

ENDCLASS.                    "lcl_report DEFINITION"
 
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_report IMPLEMENTATION.
  METHOD get_data.
    SELECT vbeln erdat auart kunnr
           INTO  TABLE gt_vbak
           FROM  vbak
           UP TO 20 ROWS.
  ENDMETHOD.                    "get_data"
  
  METHOD generate_output.
    "Calling the static Factory Method"
    DATA: lv_msg TYPE REF TO cx_salv_msg.
    TRY.
        cl_salv_table=>factory(
          EXPORTING
            list_display = abap_ture  "以列表还是GUI形式控制"
          IMPORTING
            r_salv_table = gr_table   "用来接收工厂产生的实例"
          CHANGING
            t_table      = gt_vbak ).
      CATCH cx_salv_msg INTO lv_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"
    gr_table->display( ).
    gr_table->refresh( ).
  ENDMETHOD.                    "generate_output"

*$*$*.....CODE_ADD_2_1 - Begin..................................2_1..*$*$*
*    In this area we will define the methods which will set the
*      different properties to the ALV
*$*$*.....CODE_ADD_2_1 - End....................................2_1..*$*$*

*$*$*.....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"

START-OF-SELECTION.
  DATA: lo_report TYPE REF TO lcl_report.
  CREATE OBJECT lo_report.
  lo_report->get_data( ).
  lo_report->generate_output( ).

CONTAINER 模式创建 SALV

*&---------------------------------------------------------------------*
REPORT  ztest_oo_alv_main.
  TYPES: BEGIN OF str_vbak,
         vbeln TYPE vbak-vbeln,
         erdat TYPE erdat,
         auart TYPE auart,
         kunnr TYPE kunnr,
         netwr TYPE netwr,
      END OF str_vbak.
  TYPES: ty_t_vbak   TYPE STANDARD TABLE OF str_vbak.
  DATA: gt_vbak      TYPE STANDARD TABLE OF str_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"

MODULE 1000_pbo OUTPUT.
    SELECT vbeln erdat auart kunnr
      INTO  TABLE gt_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[] ).
    "激活所有的ALV内置通用按钮"
    gr_functions = gr_table->get_functions( ).
    gr_functions->set_all( abap_true ).  
    "显示ALV"
    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 ).
"Display"
gr_table->display( ).