OO实现ALV

一、      最简单的ALV显示

以前都是通过函数“REUSE_ALV_GRID_DISPLAY”来显示列表,这种方式是面向过程的,现在有另外一种面向对象化的方式来显示列表,函数REUSE_ALV_GRID_DISPLAY可以做到的它也能够做到。它主要是通过一个类CL_SALV_TABLE来实现的.

下面让我们来实现最简单的ALV列表。

1取得要显示的数据。

SELECT * INTO TABLE lt_tab FROM spfli

2.调用类CL_SALV_TABLE的静态方法Factory()创建类的实例。

TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = lr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

 3.取得实例之后再调用方法Display()显示列表.

      lr_table->display( ).

 处理过程完成,最后让我们看一下显示结果。

 

下面是报表的所有源代码:

REPORT  y_xin_002.

 

*变量定义

TYPES ty_spfli TYPE spfli OCCURS 0.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_process     "ALV处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            main.           "主方法

  PRIVATE SECTION.

    DATA gr_table TYPE REF TOcl_salv_table.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO TABLE lt_tabFROM spfli.

  ENDMETHOD.                   "getdata

 

*ALV处理方法

  METHOD alv_process.

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCH cx_salv_msg.

    ENDTRY.

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_process

 

*主方法,整合数据

  METHOD main.

    DATA: lt_tab TYPE TABLE OFspfli.

 

    "取得要显示的数据

    lt_tab = me->getdata( ).

    "处理数据

    me->alv_process( lt_tab).

  ENDMETHOD.                   "main

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*报表执行

start-of-selection.

  data  lr_alv   type refto lcl_alv.

  create object lr_alv.

  lr_alv->main( ).

关于ALV的最全文档可以参考SAP Help

http://help.sap.com/saphelp_nw70/helpdata/EN/5e/88d440e14f8431e10000000a1550b0/content.htm

 

二、      ALV显示的三种形式

一般的ALV有三种显示形式,分别为

一、普通的List

 二、全屏的Grid

 三、在自定义屏幕的显示的Grid

跟以往实现这三种ALV显示方式相比,以往的三种显示方式分别是调用不同的Function和Class,实现方式复杂。现在这三种显示方式可以通过一个类(CL_SALV_TABLE)来实现,而且通过这个类和它的子类可以更加容易的实现ALV的功能,比如:排序,总计,过滤,页眉页脚,单击双击事件等。

下面让我们一步一步地来实现这三种显示形式。

1.首先我们先创建选择屏幕,屏幕有三个选项,三个选项分别为三种显示方式。

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

 PARAMETERS: p_full RADIOBUTTON GROUP rg,

             p_list RADIOBUTTON GROUP rg,

             p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

2取得要显示的数据。

SELECT * INTO TABLE lt_tab FROM spfli

3.判断选择屏幕的选项创建不同的实例。

   CASE 'X'.

     WHEN p_full.             

       me->alv_full( lt_tab ).

     WHEN p_list.

       me->alv_list( lt_tab ).

     WHEN p_grid.

       me->alv_grid( lt_tab ).

ENDCASE.

4.当用户选择第一个选项,列表输出为全屏的网格列表,执行方法alv_full( )。

METHOD alv_full.

   "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

       ).

     CATCH cx_salv_msg.

   ENDTRY.

 

   "显示列表

   gr_table->display( ).

 ENDMETHOD.                   "alv_full

5.当用户选择第二个选项,列表输出为普通的列表,执行方法alv_list( ).alv_list方法跟alv_full方法不同的是在创建实例的时候多了一个选项list_display = ‘X’.

  METHOD alv_list.

   "创建实例

    TRY.

       cl_salv_table=>factory(

         EXPORTING

           list_display = 'X'

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

     CATCH cx_salv_msg.

   ENDTRY.

 

    "显示列表

   gr_table->display( ).

 ENDMETHOD.                   "alv_list

6.当用户选择第三个选项,列表在自定义屏幕上输出网格列表,执行方法alv_grid( ).方法alv_grid()调用了屏幕100。执行屏幕的时候会执行它的PBO和PAI,也就是会执行module status_0100和user_command_0100。Status_0100的代码是:

    "定义变量

  DATA:lr_container TYPE REF TO cl_gui_custom_container,

        lr_alv2       TYPE REF TO lcl_alv,

        lt_tab       TYPE TABLE OF spfli.

  "创建容器实例

  IFcl_salv_table=>is_offline( ) = ''.

   CREATE OBJECT lr_container

     EXPORTING

       container_name = 'CONTAINER'.

  ENDIF.

  "创建类LCL_ALV实例

  CREATEOBJECT lr_alv2.

  "取得列表数据

  lt_tab= lr_alv2->getdata( ).

  "创建ALV实例

  TRY.

     cl_salv_table=>factory(

       EXPORTING

         r_container    = lr_container

         container_name = 'CONTAINER'

       IMPORTING

         r_salv_table   = gr_table

       CHANGING

         t_table        = lt_tab

      ).

    CATCHcx_salv_msg.

  ENDTRY.

  "显示ALV列表

 gr_table->display( ).

  "释放内存

  FREElt_tab.

下面是程序的所有代码:

REPORT y_xin_002.

 

*变量定义

TYPES ty_spfli TYPE spfli OCCURS 0.

DATA: gr_table     TYPE REF TO cl_salv_table.

 

*选择屏幕设计

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

PARAMETERS: p_full RADIOBUTTON GROUP rg,

           p_list RADIOBUTTON GROUP rg,

           p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*       ALV操作类定义

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLICSECTION.

   METHODS: getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            alv_list        "普通List处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            alv_grid        "在自定义屏幕上显示的列表

              IMPORTING value(lt_tab) TYPE ty_spfli,

             main.           "主方法

ENDCLASS.                    "lcl_alv DEFINITION

 

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*       ALV操作类实现

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHODgetdata.

   SELECT * INTO TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

   "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

     CATCH cx_salv_msg.

   ENDTRY.

 

   "显示列表

   gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*输出全屏普通列表的方法

  METHODalv_list.

   "创建实例

    TRY.

       cl_salv_table=>factory(

         EXPORTING

           list_display = 'X'

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

       ).

     CATCH cx_salv_msg.

   ENDTRY.

 

   "显示列表

   gr_table->display( ).

 ENDMETHOD.                   "alv_list

 

*输出在自定义屏幕上的列表

  METHODalv_grid.

    CALLSCREEN '0100'.

 ENDMETHOD.                   "alv_grid

 

*主方法整合数据

  METHODmain.

    DATA:lt_tab TYPE TABLE OF spfli.

 

   "取得要显示的数据

    lt_tab= me->getdata( ).

 

   "判断选择屏幕的选择条件调用不同的方法

    CASE'X'.

     WHEN p_full.

       me->alv_full( lt_tab ).

      WHEN p_list.

       me->alv_list( lt_tab ).

      WHEN p_grid.

       me->alv_grid( lt_tab ).

    ENDCASE.

 ENDMETHOD.                   "main

ENDCLASS.                    "lcl_alvIMPLEMENTATION

 

*----------------------------------------------------------------------*

*  MODULE status_0100

*----------------------------------------------------------------------*

*  PBO 屏幕输出前执行

*----------------------------------------------------------------------*

MODULE status_0100 OUTPUT.

  "定义变量

  DATA:lr_container TYPE REF TO cl_gui_custom_container,

       lr_alv2       TYPE REF TO lcl_alv,

       lt_tab       TYPE TABLE OF spfli.

  "创建容器实例

  IFcl_salv_table=>is_offline( ) = ''.

    CREATEOBJECT lr_container

     EXPORTING

       container_name = 'CONTAINER'.

  ENDIF.

  "创建类LCL_ALV实例

  CREATE OBJECT lr_alv2.

  "取得列表数据

  lt_tab= lr_alv2->getdata( ).

  "创建ALV实例

  TRY.

      cl_salv_table=>factory(

       EXPORTING

         r_container    = lr_container

         container_name = 'CONTAINER'

       IMPORTING

         r_salv_table   = gr_table

       CHANGING

         t_table        = lt_tab

      ).

    CATCHcx_salv_msg.

  ENDTRY.

  "显示ALV列表

 gr_table->display( ).

  "释放内存

  FREElt_tab.

ENDMODULE.                    "status_0100

 

*----------------------------------------------------------------------*

*  MODULE user_command_0100

*----------------------------------------------------------------------*

*  PAI 屏幕输出后的动作

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

ENDMODULE.                    "user_command_0100

 

*报表执行

START-OF-SELECTION.

 DATA  lr_alv   TYPE REF TO lcl_alv.

  CREATEOBJECT lr_alv.

 lr_alv->main( ).

三、      ALV的功能设计

细心的读者肯定已经注意前面的两个例子少了点什么,少了ALV提供的标准功能,比如排序,过滤,汇总,等,以及用户可以在ALV的功能栏上加上自己自定义的功能按钮。

 ALV的标准功能可以通过类CL_SALV_FUNCTIONS和CL_SALV_FUNCTION来设计,通过这两个类你可以对ALV提供的标准功能可见或不可见。也可以自己创建GUI STATUS设置自己的ALV功能,通过GUI STATUS来设置ALV的功能是通过类CL_SALV_TABLE的方法SET_SCREEN_STATUS来实现的。

1.首先我们要取得类CL_SALV_FUNCTIONS的实例,根据类CL_SALV_TABLE的方法get_functions可以取得功能实例。

lr_functions = gr_table->get_functions( ).

   lr_functions->set_all( 'X' ).

2根据类CL_SALV_TABLE的方法设置功能栏。

gr_table->set_screen_status(

   pfstatus      =  'SALV_STANDARD'

    report        = sy-repid

   set_functions = gr_table->c_functions_all ).

3.自定义功能的实现。ALV的自定义功能的实现动作要通过类的事件来处理。

Ø       首先定义事件的操作类

    CLASSlcl_handle_events DEFINITION.

  PUBLICSECTION.

   CLASS-METHODS: on_user_command FOR EVENT added_function OF cl_salv_events

                      IMPORTINGe_salv_function.

ENDCLASS.                    "lcl_handle_events DEFINITION

Ø       实现事件的操作类

CLASS lcl_handle_events IMPLEMENTATION.

  METHODon_user_command.

    DATAl_string TYPE string.

   CONCATENATE 'Function is ' e_salv_function

          INTO l_string

          SEPARATED BY space.

    MESSAGE i000(0k) WITH l_string.

  ENDMETHOD.                    "on_user_command

ENDCLASS.                    "lcl_handle_eventsIMPLEMENTATION

Ø         注册事件

SET HANDLERlcl_handle_events=>on_user_command FOR lr_events.

下面是效果图

 

下面是程序的所有代码:

REPORT y_xin_002.

 

*变量定义

TYPES ty_spfli TYPE spfli OCCURS 0.

DATA: gr_table     TYPE REF TO cl_salv_table.

 

 

*----------------------------------------------------------------------*

*       CLASS lcl_handle_events DEFINITION

*----------------------------------------------------------------------*

*       事件处理类定义

*----------------------------------------------------------------------*

CLASS lcl_handle_events DEFINITION.

  PUBLICSECTION.

   CLASS-METHODS: on_user_command FOR EVENT added_function OFcl_salv_events

                      IMPORTINGe_salv_function.

ENDCLASS.                    "lcl_handle_eventsDEFINITION

 

*----------------------------------------------------------------------*

*       CLASS lcl_handle_events IMPLEMENTATION

*----------------------------------------------------------------------*

*       事件处理类实现

*----------------------------------------------------------------------*

CLASS lcl_handle_events IMPLEMENTATION.

  METHODon_user_command.

    DATAl_string TYPE string.

   CONCATENATE 'Function is ' e_salv_function

          INTO l_string

           SEPARATED BY space.

   MESSAGE i000(0k) WITH l_string.

 ENDMETHOD.                   "on_user_command

ENDCLASS.                    "lcl_handle_eventsIMPLEMENTATION

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*       ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLICSECTION.

   METHODS: getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            main.           "主方法

ENDCLASS.                    "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*       ALV操作类实现

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHODgetdata.

   SELECT * INTO TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHODalv_full.

    DATA:lr_functions TYPE REF TO cl_salv_functions,

         lr_events    TYPE REF TOcl_salv_events.

 

   "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

       ).

     CATCH cx_salv_msg.

   ENDTRY.

 

   lr_events = gr_table->get_event( ).

 

    "设置ALV功能

    gr_table->set_screen_status(

   pfstatus      =  'SALV_STANDARD'

   report        =  sy-repid

   set_functions = gr_table->c_functions_all ).

 

    "注册事件

    SETHANDLER lcl_handle_events=>on_user_command FOR lr_events.

 

    "显示列表

   gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*主方法整合数据

  METHODmain.

    DATA:lt_tab TYPE TABLE OF spfli.

 

    "取得要显示的数据

    lt_tab = me->getdata( ).

 

    me->alv_full( lt_tab ).

  ENDMETHOD.                    "main

ENDCLASS.                    "lcl_alvIMPLEMENTATION

 

*报表执行

START-OF-SELECTION.

 DATA  lr_alv   TYPE REF TO lcl_alv.

  CREATEOBJECT lr_alv.

 lr_alv->main( ).

 

 

四、      ALV的显示样式

通过类CL_SALV_DISPLAY_SETTINGS我们可以设置ALV的显示样式,主要包括ALV表头名称,列表颜色间隔显示,水平线是否显示,竖线是否显示等。

1.首先我们要取得类CL_SALV_DISPLAY_SETTINGS的实例,根据类CL_SALV_TABLE的方法get_display_settings可以取得显示样式的实例。

lr_display = gr_table->get_display_settings().

2然后通过类CL_SALV_DISPLAY_SETTINGS的方法设置显示属性。

lr_display = gr_table->get_display_settings().

   lr_display->set_striped_pattern( 'X' ). "设置颜色间隔显示

   lr_display->set_list_header( 'Xin''s ALV' ). "设置ALV的抬头

   lr_display->set_horizontal_lines( '' ).  "设置水平线是否显示

   lr_display->set_vertical_lines( '' ).    "设置垂直线是否显示

下面是效果图

 下面是程序的所有代码:

REPORT y_xin_002.

 

*变量定义

TYPES ty_spfli TYPE spfli OCCURS 0.

DATA: gr_table     TYPE REF TO cl_salv_table.

 

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*       ALV操作类定义

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLICSECTION.

   METHODS: getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            main.           "主方法

ENDCLASS.                    "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*       CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*       ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHODgetdata.

   SELECT * INTO TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHODalv_full.

    DATA:lr_functions TYPE REF TO cl_salv_functions,

          lr_display   TYPE REF TO cl_salv_display_settings.

    databoolean type c.

 

   "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

       ).

     CATCH cx_salv_msg.

   ENDTRY.

 

    "显示ALV的标准功能

    lr_functions = gr_table->get_functions().

   lr_functions->set_all( 'X' ).

 

    "设置ALV的显示样式

   lr_display = gr_table->get_display_settings( ).

   lr_display->set_striped_pattern( 'X' ). "设置颜色间隔显示

   lr_display->set_list_header( 'Xin''s ALV' ). "设置ALV的抬头

   lr_display->set_horizontal_lines( '' ).  "设置水平线是否显示

   lr_display->set_vertical_lines( '' ).    "设置垂直线是否显示

 

    "显示列表

    gr_table->display().

 ENDMETHOD.                   "alv_full

 

*主方法整合数据

  METHODmain.

    DATA:lt_tab TYPE TABLE OF spfli.

 

   "取得要显示的数据

   lt_tab = me->getdata( ).

 

   me->alv_full( lt_tab ).

 ENDMETHOD.                   "main

ENDCLASS.                    "lcl_alvIMPLEMENTATION

 

*报表执行

START-OF-SELECTION.

  DATA  lr_alv  TYPE REF TO lcl_alv.

  CREATEOBJECT lr_alv.

 lr_alv->main( ).

 

五、      ALV的栏位属性

ALV的栏位属性是SAP提供的ALV功能的比较重要的一个,详细的功能包括异常状态图标、图标、符号、复选框、按钮、热点、超链接、单元格类型、单元格颜色、某一栏位颜色、某一行颜色,栏位隐藏等等。ALV的栏位功能主要是通过CL_SALV_COLUMN_TABLE和CL_SALV_COLUMNS_TABLE这两个类的实现的。

 1.     首先我们要取得类CL_SALV_COLUMNS_TABLE的实例。

DATA  lr_columnsTYPE REF TO cl_salv_columns_table.

lr_columns = gr_table->get_columns( ).

2然后通过类CL_SALV_COLUMNS_TABLE的方法get_column(value)取得指定的栏位的CL_SALV_COLUMN_TABLE的实例,取指定的栏位的实例之后,你就可以对这个栏位的相关属性进行设置。

DATA  lr_columnTYPE REF TO cl_salv_column_table

lr_column  ?= lr_columns->get_column('MANDT' ).

 2.     取得指定的栏位的实例之后,在这个实例的基础上进行相关的属性设置。

a)         异常状态图标

lr_columns->set_exception_column('EXCEPTION' ).

       lr_column?= lr_columns->get_column( 'EXCEPTION' ).

lr_column->set_short_text( 'except' ).

b)    图标

lr_column ?= lr_columns->get_column( 'ICON').

      lr_column->set_icon( 'X' ).

lr_column->set_long_text( 'ICON' ).

c)    符号

lr_column ?= lr_columns->get_column('SYMBOL' ).

      lr_column->set_symbol( 'X' ).

lr_column->set_long_text( 'SYMBOL' ).

d)     复选框

lr_column ?= lr_columns->get_column('CHECKBOX' ).

      lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).

lr_column->set_long_text( 'CHECKBOX' ).

e)     热点

lr_column ?= lr_columns->get_column('HOTSPOT' ).

      lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

lr_column->set_long_text( 'HOTSPOT' ).

f)   栏位不可见

      lr_column  ?=lr_columns->get_column( 'MANDT' ).

   lr_column->set_visible( '' ).

g)  超链接[likai1] 

lr_columns->set_hyperlink_entry_column('T_HYPERLINK' ).

       lr_column ?= lr_columns->get_column( 'HYPERLINK' ).

       lr_column->set_cell_type( if_salv_c_cell_type=>link ).

       lr_column->set_long_text( 'HYPERLINK' ).

        lr_hyperlinks =lr_functional_settings->get_hyperlinks( ).

        LOOPAT gt_hyperlink INTO wa_hyperlink.

         lr_hyperlinks->add_hyperlink(

           handle    = wa_hyperlink-handle

           hyperlink = wa_hyperlink-hyperlink ).

ENDLOOP.

h)  栏位颜色

lr_column ?= lr_columns->get_column('FLTIME' ).

       ls_color-col = 6.

       ls_color-int = 0.

       ls_color-inv = 0.

 lr_column->set_color( ls_color ).

i)   行颜色和单元格颜色

lr_columns->set_color_column('T_COLOR' ).

j) 设置栏位显示长度最优化

lr_columns->set_optimize( 'X' ).

k) 设置标题栏是否可见

lr_columns->set_headers_visible( 'X' )

 注:上面的所有栏位属性设置都要需要在相应的内表字段设置相关的值,设置是否可见除外。

 下面是效果图

 

下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

INCLUDE <icon>.

INCLUDE <symbol>.

 

TYPES: BEGIN OF gs_spfli,

       exception   TYPE char1,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPE spfli-period,

        icon       TYPE icon_d,

       symbol      TYPE icon_d,

       checkbox    TYPE char1,

       hotspot     TYPE icon_d,

       hyperlink   TYPE char255,

       t_hyperlink TYPE salv_t_int4_column,

       t_color     TYPE lvc_t_scol,

       t_celltype  TYPE salv_t_int4_column,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

DATA: gr_table     TYPE REF TOcl_salv_table.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            column_setting, "设置字段属性

            main.           "主方法

  PRIVATE SECTION.

    DATA: BEGIN OF wa_hyperlink,

           handle TYPE salv_de_hyperlink_handle,

           hyperlink TYPE service_rl,

         END OF wa_hyperlink.

    DATA gt_hyperlink LIKE TABLE OFwa_hyperlink.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    FIELD-SYMBOLS <fs_spfli>TYPE gs_spfli.

    DATA: lwa_hyperlink TYPE LINE OFsalv_t_int4_column,

         lt_hyperlink LIKE TABLE OF lwa_hyperlink,

         l_tabix TYPE sy-tabix,

         ls_color TYPE lvc_s_scol,

         lt_color TYPE lvc_t_scol,

         ls_celltype TYPE salv_s_int4_column,

         lt_celltype TYPE salv_t_int4_column.

 

    DEFINE add_color.

      clear ls_color.

      ls_color-fname =&1.

      ls_color-color-col =&2.

      ls_color-color-int =1.

      ls_color-color-inv =0.

      ls_color-nokeycol ='X'.

      append ls_color tolt_color.

    END-OF-DEFINITION.

 

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 

    "循环,为EXCEPTION等栏位赋值

    LOOP AT lt_tab ASSIGNING<fs_spfli>.

      l_tabix = sy-tabix.

     <fs_spfli>-exception = '3'.

     <fs_spfli>-icon      = icon_okay.

     <fs_spfli>-symbol    = sym_document.

     <fs_spfli>-checkbox  = 'X'.

     <fs_spfli>-hotspot   = icon_overview.

 

      REFRESHlt_hyperlink.

      lwa_hyperlink-value= l_tabix.

     lwa_hyperlink-columnname = 'HYPERLINK'.

      APPEND lwa_hyperlinkTO lt_hyperlink.

     <fs_spfli>-t_hyperlink = lt_hyperlink.

     <fs_spfli>-hyperlink  = 'www.sina.com.cn'.

      wa_hyperlink-handle= l_tabix.

     wa_hyperlink-hyperlink = 'www.sina.com.cn'.

      APPEND wa_hyperlinkTO gt_hyperlink.

 

      REFRESH lt_color.

      IF<fs_spfli>-distance >= 5000.

        CLEARls_color.

       ls_color-fname = 'DISTANCE'.

       ls_color-color-col = 5.

       ls_color-color-int = 1.

       ls_color-color-inv = 0.

        APPENDls_color TO lt_color.

      ENDIF.

 

      CLEAR ls_color.

      ls_color-fname ='COUNTRYFR'.

      ls_color-color-col =5.

      ls_color-color-int =1.

      ls_color-color-inv =0.

      APPEND ls_color TOlt_color.

 

      IF<fs_spfli>-countryfr IS NOT INITIAL.

       add_color 'EXCEPTION' 4.

       add_color 'MANDT' 4.

       add_color 'CARRID' 4.

       add_color 'CONNID' 4.

       add_color 'COUNTRYFR' 4.

       add_color 'CITYFROM' 4.

       add_color 'AIRPFROM' 4.

       add_color 'COUNTRYTO' 4.

       add_color 'CITYTO' 4.

       add_color 'AIRPTO' 4.

       add_color 'FLTIME' 4.

       add_color 'DEPTIME' 4.

       add_color 'ARRTIME' 4.

       add_color 'DISTANCE' 4.

       add_color 'DISTID' 4.

       add_color 'FLTYPE' 4.

       add_color 'PERIOD' 4.

       add_color 'ICON' 4.

       add_color 'SYMBOL' 4.

       add_color 'CHECKBOX' 4.

       add_color 'HOTSPOT' 4.

       add_color 'HYPERLINK' 4.

      ENDIF.

     <fs_spfli>-t_color = lt_color.

    ENDLOOP.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REF TOcl_salv_functions.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCH cx_salv_msg.

    ENDTRY.

 

    "显示ALV的标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all( 'X' ).

 

    "设置栏位属性

    me->column_setting( ).

 

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*设置字段属性

  METHOD column_setting.

    DATA: lr_columns TYPE REF TOcl_salv_columns_table,

         lr_column  TYPE REF TO cl_salv_column_table,

         lr_functional_settings TYPE REF TO cl_salv_functional_settings,

         lr_hyperlinks TYPE REF TO cl_salv_hyperlinks.

    DATA: ls_color TYPE lvc_s_colo.

 

    lr_columns =gr_table->get_columns( ).

    lr_columns->set_optimize( 'X').

   lr_columns->set_headers_visible( 'X' ).   "设置标题栏是否可见

    lr_functional_settings =gr_table->get_functional_settings( ).

 

    TRY.

        "设置栏位不可见

       lr_column  ?= lr_columns->get_column( 'MANDT' ).

       lr_column->set_visible( '' ).

       lr_column ?= lr_columns->get_column( 'PERIOD' ).

       lr_column->set_visible( '' ).

       lr_column ?= lr_columns->get_column( 'FLTYPE' ).

       lr_column->set_visible( '' ).

       lr_column ?= lr_columns->get_column( 'DISTID' ).

       lr_column->set_visible( '' ).

       lr_column ?= lr_columns->get_column( 'DEPTIME' ).

       lr_column->set_visible( '' ).

       lr_column ?= lr_columns->get_column( 'ARRTIME' ).

       lr_column->set_visible( '' ).

        "设置异常栏位

       lr_columns->set_exception_column( 'EXCEPTION' ).

       lr_column ?= lr_columns->get_column( 'EXCEPTION' ).

       lr_column->set_short_text( 'except' ).

       lr_column->set_medium_text( 'exception' ).

       lr_column->set_long_text( 'my exception' ).

        "设置图标栏位

       lr_column ?= lr_columns->get_column( 'ICON' ).

       lr_column->set_icon( 'X' ).

       lr_column->set_long_text( 'ICON' ).

        "设置符号栏位

       lr_column ?= lr_columns->get_column( 'SYMBOL' ).

        lr_column->set_symbol('X' ).

       lr_column->set_long_text( 'SYMBOL' ).

        "设置复选框栏位

       lr_column ?= lr_columns->get_column( 'CHECKBOX' ).

       lr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).

       lr_column->set_long_text( 'CHECKBOX' ).

        "设置热点

       lr_column ?= lr_columns->get_column( 'HOTSPOT' ).

       lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

       lr_column->set_long_text( 'HOTSPOT' ).

        "设置超链接

       lr_columns->set_hyperlink_entry_column( 'T_HYPERLINK').

       lr_column ?= lr_columns->get_column( 'HYPERLINK' ).

       lr_column->set_cell_type( if_salv_c_cell_type=>link ).

       lr_column->set_long_text( 'HYPERLINK' ).

       lr_hyperlinks = lr_functional_settings->get_hyperlinks( ).

        LOOP ATgt_hyperlink INTO wa_hyperlink.

         lr_hyperlinks->add_hyperlink(

           handle    = wa_hyperlink-handle

           hyperlink = wa_hyperlink-hyperlink ).

        ENDLOOP.

        "设置栏位颜色

       lr_column ?= lr_columns->get_column( 'FLTIME' ).

       ls_color-col = 6.

       ls_color-int = 0.

       ls_color-inv = 0.

       lr_column->set_color( ls_color ).

        "设置行颜色

       lr_columns->set_color_column( 'T_COLOR' ).

      CATCHcx_salv_not_found.

      CATCHcx_salv_data_error.

      CATCHcx_salv_existing.

    ENDTRY.

 

 ENDMETHOD.                   "column_setting

 

*主方法,整合数据

  METHOD main.

    DATA: lt_tab TYPE ty_spfli.

 

    "取得要显示的数据

    lt_tab = me->getdata( ).

 

    me->alv_full( lt_tab ).

 ENDMETHOD.                   "main

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

 

*报表执行

START-OF-SELECTION.

  DATA  lr_alv   TYPE REF TOlcl_alv.

  CREATE OBJECT lr_alv.

  lr_alv->main( ).

六、      ALV的弹出窗口形式

前面的例子ALV列表都是直接输出在主窗口中,下面我们实现在弹出窗口中实现ALV。在弹出窗口中实现ALV也很简单,只要在实现类CL_SALV_TABLE的一个方法SET_SCREEN_POPUP就可以了。

gr_table->set_screen_popup(

      start_column = 1

     end_column   = 120

     start_line   = 1

     end_line     = 20 ).

方法SET_SCREEN_POPUP的是弹出窗口的显示范围。

下面是效果图

 

下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPE spfli-period,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

DATA: gr_table     TYPE REFTO cl_salv_table.

 

*设置屏幕

SELECTION-SCREEN PUSHBUTTON 2(20) btnUSER-COMMAND clk.

 

INITIALIZATION.

  btn = '点击显示弹出alv窗口'.

 

*----------------------------------------------------------------------*

*       CLASSlcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            main.           "主方法

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REFTO cl_salv_functions.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

 

    "显示ALV的标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all('X' ).

 

    "弹出窗口设置

   gr_table->set_screen_popup(

      start_column = 1

     end_column   = 120

     start_line   = 1

     end_line     = 20 ).

 

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*主方法,整合数据

  METHOD main.

    DATA: lt_tab TYPE ty_spfli.

 

    "取得要显示的数据

    lt_tab = me->getdata( ).

 

    me->alv_full( lt_tab ).

 ENDMETHOD.                   "main

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*执行按钮点击动作

AT SELECTION-SCREEN.

  CASE sy-ucomm.

    WHEN 'CLK'.

      DATA lr_alv   TYPE REF TO lcl_alv.

      CREATE OBJECTlr_alv.

      lr_alv->main().

  ENDCASE.

七、      ALV的选择功能

在ALV的输出结果中,要对它的某一行、某一列或者某一单元格进行选定,我们通常的做法是把鼠标直接点击那一行或者是列就可以了,如果选择多行或多列,在选择的条件按住‘CTRL’键就可以了。这是手动选择的方法,但是在实际情况中,有时候需要用程序来对输出结果进行选择。

 首先我们要取得类CL_SALV_SELECTIONS的实例。

DATA  lr_selectionsTYPE REF TO cl_salv_selections.

lr_selections = gr_table->get_selections( ).

2.      设置选择模式。

lr_selections->set_selection_mode(if_salv_c_selection_mode=>row_column ).

3.      选择行

DATA lt_row  TYPE salv_t_row.

APPEND 3 TO lt_row.

    APPEND 4 TO lt_row.

lr_selections->set_selected_rows( lt_row ).

4.      选择列

DATA  lt_columnTYPE salv_t_column.

APPEND 3 TO lt_row.

    APPEND 4 TO lt_row.

lr_selections->set_selected_rows( lt_row ).

5.      选择一个单元格

DATA  ls_cell TYPEsalv_s_cell.

ls_cell-row = 7.

    ls_cell-columnname ='CITYFROM'.

lr_selections->set_current_cell( ls_cell )

6.      选择多个单元格

DATA  lt_cell TYPE salv_t_cell,

        ls_cell  TYPE salv_s_cell.

ls_cell-row = 5.

    ls_cell-columnname ='CITYFROM'.

    APPEND ls_cell TO lt_cell.

    ls_cell-row = 6.

    ls_cell-columnname ='CITYFROM'.

   APPEND ls_cell TO lt_cell.

   lr_selections->set_selected_cells( lt_cell ).

 下面是效果图

下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPE spfli-period,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

DATA: gr_table     TYPE REFTO cl_salv_table.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata         "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full        "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli,

            main.           "主方法

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REF TO cl_salv_functions,

         lr_selections TYPE REF TO cl_salv_selections,

         lt_column     TYPE salv_t_column,

         lt_row        TYPE salv_t_row,

         lt_cell       TYPE salv_t_cell,

         ls_cell       TYPE salv_s_cell.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

 

    "显示ALV的标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all('X' ).

 

    "取得类CL_SALV_SELECTIONS的实例

    lr_selections =gr_table->get_selections( ).

    "设置选择模式

   lr_selections->set_selection_mode(if_salv_c_selection_mode=>row_column ).

    "选择列

    APPEND 'FLTIME' TOlt_column.

    APPEND 'DISTANCE' TOlt_column.

   lr_selections->set_selected_columns( lt_column ).

    "选择行

    APPEND 3 TO lt_row.

    APPEND 4 TO lt_row.

   lr_selections->set_selected_rows( lt_row ).

*    "选择多个单元格

*   ls_cell-row = 5.

*   ls_cell-columnname = 'CITYFROM'.

*    APPENDls_cell TO lt_cell.

*   ls_cell-row = 6.

*   ls_cell-columnname = 'CITYFROM'.

*    APPENDls_cell TO lt_cell.

*   lr_selections->set_selected_cells( lt_cell ).

    "选择一个单元格

    ls_cell-row = 7.

    ls_cell-columnname ='CITYFROM'.

   lr_selections->set_current_cell( ls_cell ).

 

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*主方法,整合数据

  METHOD main.

    DATA: lt_tab TYPE ty_spfli.

 

    "取得要显示的数据

    lt_tab = me->getdata( ).

 

    me->alv_full( lt_tab ).

 ENDMETHOD.                   "main

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*执行动作

START-OF-SELECTION.

  DATA  lr_alv   TYPE REFTO lcl_alv.

  CREATE OBJECT lr_alv.

  lr_alv->main( ).

八、      ALV的布局功能

在ALV的输出结果中,我们可以利用ALV提供的标准功能(过滤,排序,汇总)对输出结果正行操作。比如说我们对一个结果进行了排序和过滤等的动作,下次再运行这个报表的时候可以选择一个功能直接运行这些动作。这就需要布局(Layout)的功能了。

首先我们设置布局的功能按钮。

ls_key-report = sy-repid.

    lr_layout =gr_table->get_layout( ).

    lr_layout->set_key(ls_key ).

   lr_layout->set_save_restriction( l_restrict ).

    lr_layout->set_default('X' ).

    IF p_lay IS NOT INITIAL.

     lr_layout->set_initial_layout( p_lay ).

ENDIF.

2.      设置前台选项页面。

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

PARAMETERS: p_lay LIKE disvariant-variant.

SELECTION-SCREEN SKIP.

PARAMETERS: p_save1 RADIOBUTTON GROUP rgDEFAULT 'X',

           p_save2 RADIOBUTTON GROUP rg,

           p_save3 RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

3.      设置前台布局选项功能搜索帮助

DATA: ls_layout TYPE salv_s_layout_info,

          ls_key    TYPE salv_s_layout_key,

          l_restrict TYPE salv_de_layout_restriction.

    l_restrict = get_restrict().

    ls_key-report = sy-repid.

    ls_layout =cl_salv_layout_service=>f4_layouts(

    s_key    =ls_key

    restrict = l_restrict ).

layout = ls_layout-layout.

下面是效果图

 

下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

        period     TYPE spfli-period,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

*选择屏幕

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

PARAMETERS: p_lay LIKE disvariant-variant.

SELECTION-SCREEN SKIP.

PARAMETERS: p_save1 RADIOBUTTON GROUP rgDEFAULT 'X',

           p_save2 RADIOBUTTON GROUP rg,

           p_save3 RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata              "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full             "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli.

    CLASS-METHODS:f4_layout       "布局选项的搜索帮助

                   EXPORTING value(layout)   TYPE disvariant-variant,

                  get_restrict    "取得约束选项的值

                    RETURNING value(restrict) TYPE salv_de_layout_restriction.

  PRIVATE SECTION.

    DATA: gr_table TYPE REF TOcl_salv_table.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REF TO cl_salv_functions_list,

         lr_selections TYPE REF TO cl_salv_selections,

         lr_layout     TYPE REF TO cl_salv_layout,

         ls_key        TYPE salv_s_layout_key,

         l_restrict    TYPE salv_de_layout_restriction.

 

    l_restrict =lcl_alv=>get_restrict( ).

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

    "设置布局功能按钮

    ls_key-report = sy-repid.

    lr_layout =gr_table->get_layout( ).

    lr_layout->set_key(ls_key ).

   lr_layout->set_save_restriction( l_restrict ).

    lr_layout->set_default('X' ).

    IF p_lay IS NOT INITIAL.

     lr_layout->set_initial_layout( p_lay ).

    ENDIF.

    "显示ALV的标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all('X' ).

    "

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

 

*前台布局选项搜索帮助

  METHOD f4_layout.

    DATA: ls_layout TYPEsalv_s_layout_info,

         ls_key    TYPE salv_s_layout_key,

         l_restrict TYPE salv_de_layout_restriction.

 

    l_restrict = get_restrict().

 

    ls_key-report = sy-repid.

 

    ls_layout =cl_salv_layout_service=>f4_layouts(

     s_key    = ls_key

      restrict =l_restrict ).

 

    layout = ls_layout-layout.

 ENDMETHOD.                                               "f4_layout

 

*取得约束选项的值

  METHOD get_restrict.

    CASE 'X'.

      WHEN p_save1.

       restrict = if_salv_c_layout=>restrict_none.

      WHEN p_save2.

       restrict = if_salv_c_layout=>restrict_user_dependant.

      WHEN p_save3.

       restrict = if_salv_c_layout=>restrict_user_independant.

    ENDCASE.

  ENDMETHOD.                   "constructor

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*&---------------------------------------------------------------------*

*&     Form  f_main

*&---------------------------------------------------------------------*

*      整合数据,执行

*----------------------------------------------------------------------*

FORM f_main.

  DATA: lt_tab TYPE ty_spfli,

       lr_alv TYPE REF TO lcl_alv.

 

  CREATE OBJECT lr_alv.

 

  "取得要显示的数据

  lt_tab = lr_alv->getdata( ).

 

  lr_alv->alv_full( lt_tab ).

ENDFORM.                   "f_main

 

*布局搜索帮助

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lay.

  CALL METHOD lcl_alv=>f4_layout

    IMPORTING

      layout = p_lay.

 

*执行动作

START-OF-SELECTION.

  PERFORM f_main.

九、     ALV的事件

SAP的一个类cl_salv_events_table提供了几个常用的事件,包括链接点击,双击,功能触发之前和触发之后,页眉页脚(其中页眉页脚暂时测试不成功,以后再试)。跟其他事件相比,类CL_SALV_EVENTS_TABLE提供了这几个常用的事件已经和ALV结合在一起,所以我们只要实现这几个事件的处理方法就可以了。

 首先我们要定义好事件的处理方法。

CLASS-METHODS: on_user_command FOR EVENTadded_function OF cl_salv_events_table

                     IMPORTING e_salv_function,

                  on_double_click FOR EVENT double_click OF cl_salv_events_table

                      IMPORTING row column,

                  on_link_click   FOR EVENT link_click OF cl_salv_events_table

                      IMPORTING row column,

                  on_before_salv_function FOR EVENT before_salv_function OF cl_salv_events_table

                      IMPORTING e_salv_function,

                  on_after_salv_function FOR EVENT after_salv_function OF cl_salv_events_table

                      IMPORTING e_salv_function.

2.      实现事件的处理方法。

*单击新增功能按钮事件处理方法

  METHODon_user_command.

   CONCATENATE 'Function Code is '

               e_salv_function

          INTO g_string SEPARATED BY space.

   MESSAGE i000(0k) WITH g_string.

 ENDMETHOD.                   "on_user_command

 

*双击事件处理方法

  METHODon_double_click.

   g_string = row.

   CONCATENATE 'DOUBLE CLICK'

               'ROW'

               g_string

               'COLUMN'

               column

          INTO g_string SEPARATED BY space.

   MESSAGE i000(0k) WITH g_string.

 ENDMETHOD.                   "on_double_click

 

*单击事件处理方法

  METHODon_link_click.

   g_string = row.

   CONCATENATE 'LICK CLICK'

               'ROW'

               g_string

               'COLUMN'

               column

          INTO g_string SEPARATED BY space.

   MESSAGE i000(0k) WITH g_string.

 ENDMETHOD.                   "on_link_click

 

*触发事件之前

  METHODon_before_salv_function.

   CONCATENATE 'Before Function '

               e_salv_function

          INTO g_string SEPARATED BY space.

   MESSAGE i000(0k) WITH g_string.

 ENDMETHOD.                   "on_before_salv_function

 

*触发事件之后

  METHODon_after_salv_function.

   CONCATENATE 'After Function '

               e_salv_function

          INTO g_string SEPARATED BY space.

   MESSAGE i000(0k) WITH g_string.

 ENDMETHOD.                   "on_after_salv_function

3.      取得ALV事件的实例

lr_events = gr_table->get_event( ).

4.      注册事件的处理方法

SET HANDLER lcl_handle_events=>on_user_commandFOR lr_events.

    SET HANDLERlcl_handle_events=>on_double_click FOR lr_events.

    SET HANDLERlcl_handle_events=>on_link_click FOR lr_events.

    SET HANDLERlcl_handle_events=>on_before_salv_function FOR lr_events.

    SET HANDLER lcl_handle_events=>on_after_salv_functionFOR lr_events.

下面是效果图

下面是程序的所有代码:

REPORT  y_xin_002.

 

INCLUDE <icon>.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

        countryto  TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPE spfli-period,

       hotspot     TYPE icon_d,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

*----------------------------------------------------------------------*

*      CLASS lcl_handle_events DEFINITION

*----------------------------------------------------------------------*

*      事件操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_handle_events DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:on_user_command FOR EVENT added_function OF cl_salv_events_table

                   IMPORTING e_salv_function,

                  on_double_click FOR EVENT double_click OF cl_salv_events_table

                   IMPORTING row column,

                  on_link_click   FOR EVENT link_click OF cl_salv_events_table

                   IMPORTING row column,

                  on_before_salv_functionFOR EVENT before_salv_function OF cl_salv_events_table

                   IMPORTING e_salv_function,

                  on_after_salv_function FOR EVENT after_salv_function OF cl_salv_events_table

                   IMPORTING e_salv_function.

  PRIVATE SECTION.

    CLASS-DATA: g_string TYPEstring.

ENDCLASS.                   "lcl_handle_events DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_handle_events IMPLEMENTATION

*----------------------------------------------------------------------*

*      事件操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_handle_events IMPLEMENTATION.

 

*单击新增功能按钮事件处理方法

  METHOD on_user_command.

    CONCATENATE 'Function Codeis '

               e_salv_function

          INTO g_string SEPARATED BY space.

    MESSAGE i000(0k) WITHg_string.

 ENDMETHOD.                   "on_user_command

 

*双击事件处理方法

  METHOD on_double_click.

    g_string = row.

    CONCATENATE 'DOUBLE CLICK'

               'ROW'

               g_string

               'COLUMN'

               column

          INTO g_string SEPARATED BY space.

    MESSAGE i000(0k) WITHg_string.

 ENDMETHOD.                   "on_double_click

 

*单击事件处理方法

  METHOD on_link_click.

    g_string = row.

    CONCATENATE 'LICK CLICK'

               'ROW'

               g_string

               'COLUMN'

               column

          INTO g_string SEPARATED BY space.

    MESSAGE i000(0k) WITHg_string.

 ENDMETHOD.                   "on_link_click

 

*触发事件之前

  METHOD on_before_salv_function.

    CONCATENATE 'Before Function'

               e_salv_function

          INTO g_string SEPARATED BY space.

    MESSAGE i000(0k) WITHg_string.

 ENDMETHOD.                   "on_before_salv_function

 

*触发事件之后

  METHOD on_after_salv_function.

    CONCATENATE 'After Function'

               e_salv_function

          INTO g_string SEPARATED BY space.

    MESSAGE i000(0k) WITHg_string.

 ENDMETHOD.                   "on_after_salv_function

ENDCLASS.                   "lcl_handle_events IMPLEMENTATION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*      ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata              "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full             "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli.

  PRIVATE SECTION.

    DATA: gr_table TYPE REF TOcl_salv_table.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 

    FIELD-SYMBOLS<fs_spfli> TYPE gs_spfli.

    LOOP AT lt_tab ASSIGNING<fs_spfli>.

     <fs_spfli>-hotspot = icon_overview.

    ENDLOOP.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REF TO cl_salv_functions_list,

         lr_events     TYPE REF TO cl_salv_events_table,

         lr_columns    TYPE REF TO cl_salv_columns_table,

         lr_column     TYPE REF TO cl_salv_column_table,

         lr_content    TYPE REF TO cl_salv_form_element.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

    "设置GUI Status

    gr_table->set_screen_status(

      report =sy-repid

      pfstatus ='SALV_STANDARD'

      set_functions =gr_table->c_functions_all

    ).

    "设置热点

    lr_columns =gr_table->get_columns( ).

    TRY.

       lr_column ?= lr_columns->get_column( 'HOTSPOT' ).

       lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

       lr_column->set_long_text( 'HOTSPOT' ).

      CATCHcx_salv_not_found.

    ENDTRY.

    "注册事件

    lr_events =gr_table->get_event( ).

    SET HANDLERlcl_handle_events=>on_user_command FOR lr_events.

    SET HANDLERlcl_handle_events=>on_double_click FOR lr_events.

    SET HANDLERlcl_handle_events=>on_link_click FOR lr_events.

    SET HANDLERlcl_handle_events=>on_before_salv_function FOR lr_events.

    SET HANDLERlcl_handle_events=>on_after_salv_function FOR lr_events.

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*&---------------------------------------------------------------------*

*&     Form  f_main

*&---------------------------------------------------------------------*

*      整合数据,执行

*----------------------------------------------------------------------*

FORM f_main.

  DATA: lt_tab TYPE ty_spfli,

       lr_alv TYPE REF TO lcl_alv.

 

  CREATE OBJECT lr_alv.

 

  "取得要显示的数据

  lt_tab = lr_alv->getdata( ).

 

  lr_alv->alv_full( lt_tab ).

ENDFORM.                   "f_main

 

*执行动作

START-OF-SELECTION.

  PERFORM f_main.

十、      ALV的页眉页脚

除了可以通过类CL_SALV_EVENTS_TABLE的事件设置ALV的页眉页脚之外,还可以通过类CL_SALV_TABLE的方法SET_TOP_OF_LIST,SET_TOP_OF_LIST_PRINT,

SET_END_OF_LIST,SET_END_OF_LIST_PRINT这四个方法。页眉页脚的显示可以设置显示和打印时不一样,打印时的页眉页脚通过方法SET_TOP_OF_LIST_PRINT和SET_END_OF_LIST_PRINT。

声明设置页眉页脚所需要的Layout的实例和变量。

DATA:lr_grid       TYPE REF TOcl_salv_form_layout_grid,

      lr_grid2      TYPE REF TO cl_salv_form_layout_grid,

      lr_text       TYPE REF TO cl_salv_form_text,

      lr_action     TYPE REF TO cl_salv_form_action_info,

      lr_header     TYPE REF TO cl_salv_form_header_info,

  lr_label      TYPE REF TO cl_salv_form_label.

2.      添加页眉页脚所需要的文本到Layout里。

   lr_header = lr_grid->create_header_information(

      row = 1

      column = 1

      text = 'HeaderInformation'

    ).

    lr_label = lr_grid->create_label(

      row = 2

      column = 1

      text = 'Label'

    ).

    lr_action =lr_grid->create_action_information(

      row = 3

      column = 1

      text = 'ActionInformation'

    ).

    lr_text =lr_grid->create_text(

      text = 'text'

      row = 4

      column = 1

    ).

   gr_table->set_top_of_list( lr_grid ).

    lr_text =lr_grid2->create_text(

      text = 'end ofpage'

      row = 1

      column = 1

    ).

3.      使用方法SET_TOP_OF_LIST设置页眉

gr_table->set_top_of_list( lr_grid ).

下面是效果图

 

下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

        carrid     TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPE spfli-period,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*       ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata              "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full             "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli.

  PRIVATE SECTION.

    DATA: gr_table TYPE REF TOcl_salv_table.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*       CLASSlcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*       ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA: lr_functions TYPE REF TO cl_salv_functions_list,

         lr_grid       TYPE REF TOcl_salv_form_layout_grid,

         lr_grid2      TYPE REF TO cl_salv_form_layout_grid,

         lr_text       TYPE REF TO cl_salv_form_text,

         lr_action     TYPE REF TO cl_salv_form_action_info,

         lr_header     TYPE REF TO cl_salv_form_header_info,

         lr_label      TYPEREF TO cl_salv_form_label.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

    "ALV标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all('X' ).

    "页眉页脚

    CREATE OBJECT:lr_grid,lr_grid2.

    lr_header =lr_grid->create_header_information(

      row = 1

      column = 1

      text = 'HeaderInformation'

    ).

    lr_label =lr_grid->create_label(

      row = 2

      column = 1

      text = 'Label'

    ).

    lr_action =lr_grid->create_action_information(

      row = 3

      column = 1

      text = 'ActionInformation'

    ).

    lr_text =lr_grid->create_text(

      text = 'text'

      row = 4

      column = 1

    ).

   gr_table->set_top_of_list( lr_grid ).

    lr_text =lr_grid2->create_text(

      text = 'end ofpage'

      row = 1

      column = 1

    ).

   gr_table->set_end_of_list( lr_grid2 ).

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

*&---------------------------------------------------------------------*

*&     Form  f_main

*&---------------------------------------------------------------------*

*      整合数据,执行

*----------------------------------------------------------------------*

FORM f_main.

  DATA: lt_tab TYPE ty_spfli,

       lr_alv TYPE REF TO lcl_alv.

 

  CREATE OBJECT lr_alv.

 

  "取得要显示的数据

  lt_tab = lr_alv->getdata( ).

 

  lr_alv->alv_full( lt_tab ).

ENDFORM.                   "f_main

 

*执行动作

START-OF-SELECTION.

  PERFORM f_main.

十一、       ALV的聚合,排序,过滤

在ALV提供的标准工具栏上我们可以实现输出结果的聚合(最大值,最小值,汇总,平均数),排序,过滤功能,同样在程序里也可以达到这些功能。

声明聚合,排序,过滤所需要的变量。

DATA: lr_aggregations TYPE REF TOcl_salv_aggregations,

      lr_filters       TYPE REF TO cl_salv_filters,

lr_sorts         type ref to cl_salv_sorts.

2.      汇总

   lr_aggregations->add_aggregation(

         columnname = 'DISTANCE'

         aggregation = if_salv_c_aggregation=>total

        ).

3.    最小值

lr_aggregations->add_aggregation(

         columnname = 'FLTIME'

         aggregation = if_salv_c_aggregation=>minimum

    ).

4.  过滤

lr_filters->add_filter(

         columnname = 'CITYFROM'

         sign = 'I'

         option = 'NE'

         low = 'ROM'

         high = ''

).

5.      排序

lr_sorts->add_sort(

         columnname = 'CITYFROM'

         sequence = if_salv_c_sort=>sort_down

         subtotal = 'X'

         obligatory = 'X'

).

 下面是效果图

 

 下面是程序的所有代码:

REPORT  y_xin_002.

 

*变量定义

TYPES: BEGIN OF gs_spfli,

       mandt       TYPE spfli-mandt,

       carrid      TYPE spfli-carrid,

       connid      TYPE spfli-connid,

       countryfr   TYPE spfli-countryfr,

       cityfrom    TYPE spfli-cityfrom,

       airpfrom    TYPE spfli-airpfrom,

       countryto   TYPE spfli-countryto,

       cityto      TYPE spfli-cityto,

       airpto      TYPE spfli-airpto,

       fltime      TYPE spfli-fltime,

       deptime     TYPE spfli-deptime,

       arrtime     TYPE spfli-arrtime,

       distance    TYPE spfli-distance,

       distid      TYPE spfli-distid,

       fltype      TYPE spfli-fltype,

       period      TYPEspfli-period,

END OF gs_spfli.

TYPES  ty_spfli TYPE gs_spfli OCCURS 0.

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*       ALV操作类(定义)

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

  PUBLIC SECTION.

    METHODS:getdata              "取得要显示的数据

              RETURNING value(lt_tab) TYPE ty_spfli,

            alv_full             "全屏Grid列表处理方法

              IMPORTING value(lt_tab) TYPE ty_spfli.

  PRIVATE SECTION.

    DATA: gr_table TYPE REF TOcl_salv_table.

ENDCLASS.                   "lcl_alv DEFINITION

 

*----------------------------------------------------------------------*

*      CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*      ALV操作类(实现)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要显示的数据

  METHOD getdata.

    SELECT * INTO CORRESPONDINGFIELDS OF TABLE lt_tab FROM spfli.

 ENDMETHOD.                   "getdata

 

*输出全屏网格列表的方法

  METHOD alv_full.

    DATA:lr_functions    TYPE REF TO cl_salv_functions_list,

         lr_aggregations TYPE REF TO cl_salv_aggregations,

         lr_filters      TYPE REF TO cl_salv_filters,

         lr_sorts        type ref to cl_salv_sorts.

 

    "创建实例

    TRY.

       cl_salv_table=>factory(

         IMPORTING

           r_salv_table = gr_table

         CHANGING

           t_table      = lt_tab

        ).

      CATCHcx_salv_msg.

    ENDTRY.

    "ALV标准功能

    lr_functions =gr_table->get_functions( ).

    lr_functions->set_all('X' ).

 

    lr_aggregations =gr_table->get_aggregations( ).

   lr_filters      = gr_table->get_filters( ).

   lr_sorts        = gr_table->get_sorts( ).

    TRY.

       "汇总

       lr_aggregations->add_aggregation(

         columnname = 'DISTANCE'

         aggregation = if_salv_c_aggregation=>total

        ).

       "最小值

       lr_aggregations->add_aggregation(

         columnname = 'FLTIME'

         aggregation = if_salv_c_aggregation=>minimum

        ).

       "过滤

       lr_filters->add_filter(

         columnname = 'CITYFROM'

         sign = 'I'

         option = 'NE'

         low = 'ROM'

         high = ''

        ).

       "排序

       lr_sorts->add_sort(

         columnname = 'CITYFROM'

         sequence = if_salv_c_sort=>sort_down

         subtotal = 'X'

         obligatory = 'X'

        ).

      CATCHcx_salv_data_error.

      CATCHcx_salv_existing.

      CATCH cx_salv_not_found.

    ENDTRY.

 

    "显示列表

    gr_table->display( ).

 ENDMETHOD.                   "alv_full

ENDCLASS.                   "lcl_alv IMPLEMENTATION

 

 

*&---------------------------------------------------------------------*

*&     Form  f_main

*&---------------------------------------------------------------------*

*      整合数据,执行

*----------------------------------------------------------------------*

FORM f_main.

  DATA: lt_tab TYPE ty_spfli,

       lr_alv TYPE REF TO lcl_alv.

 

  CREATE OBJECT lr_alv.

 

  "取得要显示的数据

  lt_tab = lr_alv->getdata( ).

 

  lr_alv->alv_full( lt_tab ).

ENDFORM.                   "f_main

 

*执行动作

START-OF-SELECTION.

  PERFORM f_main.

 


 [likai1]这他妈的什么玩艺儿啊?

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值