OO ALV 实现方式 ALV TABLE 之 栏位属性

REPORT  zalv01.

*变量定义
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 TO 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,
             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 OF wa_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 OF salv_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 to lt_color.
    END-OF-DEFINITION.


    SELECT INTO CORRESPONDING FIELDS 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.

      REFRESH lt_hyperlink.

      lwa_hyperlink-value = l_tabix.
      lwa_hyperlink-columnname = 'HYPERLINK'.
      APPEND lwa_hyperlink TO 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_hyperlink TO gt_hyperlink.


      REFRESH lt_color.
      IF <fs_spfli>-distance >= 5000.
        CLEAR ls_color.
        ls_color-fname = 'DISTANCE'.
        ls_color-color-col = 5.
        ls_color-color-int = 1.
        ls_color-color-inv = 0.
        APPEND ls_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 TO lt_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 TO cl_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 TO cl_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 AT gt_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' ).
      CATCH cx_salv_not_found.
      CATCH cx_salv_data_error.
      CATCH cx_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 TO lcl_alv.
  CREATE OBJECT lr_alv.
  lr_alv->main( ).

posted @ 2012-09-26 13:24  Eric.su  阅读(438)  评论(0编辑  收藏  举报