ALV ( 七 ) OO SALV

OO SALV可以不创建屏幕就生成grid报表,但是不提供编辑的功能,但是可以通过分配容器来调用cl_gui_alv_grid修改成编辑模式。

汪正军博客OO SALV

REPORT ztestlian_salv.

TYPE-POOLS: slis.
TYPES:BEGIN OF ts_spfli.
        INCLUDE TYPE spfli.
TYPES: t_color TYPE lvc_t_scol,
      END OF ts_spfli.

DATA: lt_spfli TYPE TABLE OF ts_spfli,
      ls_spfli LIKE LINE OF lt_spfli.
DATA: a_oref TYPE REF TO cx_salv_msg.
DATA: lo_table TYPE REF TO cl_salv_table,
      lo_functions TYPE REF TO cl_salv_functions_list.

*----------------------------------------------------------------------*
*       CLASS cl_handle DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_handle DEFINITION.

  PUBLIC SECTION.
    METHODS: handle_hotspot_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column.

ENDCLASS.                    "cl_handle DEFINITION

*----------------------------------------------------------------------*
*       CLASS cl_handle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_handle IMPLEMENTATION.

  METHOD handle_hotspot_click.

    READ TABLE lt_spfli INTO ls_spfli INDEX row.
    MESSAGE i000(ys) WITH 'Hotspot in line' row.

  ENDMETHOD.                    "handle_hotspot_click

ENDCLASS.                    "cl_handle IMPLEMENTATION

DATA: lo_handle TYPE REF TO cl_handle.

START-OF-SELECTION.

  SELECT * FROM spfli UP TO 10 ROWS INTO  CORRESPONDING FIELDS OF TABLE lt_spfli.

  TRY.

      cl_salv_table=>factory(
        IMPORTING
          r_salv_table   =   lo_table  " Basis Class Simple ALV Tables
        CHANGING
          t_table        = lt_spfli ).

      lo_functions = lo_table->get_functions( ).
      lo_functions->set_default( abap_true ).

*  lo_table->set_screen_status(
*    EXPORTING
*      report        = sy-repid  " ABAP Program: Current Main Program
*      pfstatus      = 'SALV_STANDARD'" Screens, Current GUI Status
*      set_functions = lo_table->c_functions_all ).

      DATA: lo_layout TYPE REF TO cl_salv_layout,
            lf_variant TYPE slis_vari,
            ls_key TYPE salv_s_layout_key.

      lo_layout = lo_table->get_layout( ).
      ls_key-report = sy-repid.
      lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
      lf_variant = 'DEFAULT'.
      lo_layout->set_initial_layout( value = lf_variant ).

******************top_of_page***********************
      DATA: lo_header TYPE REF TO cl_salv_form_layout_grid,
            lo_h_label TYPE REF TO cl_salv_form_label,
            lo_h_flow TYPE REF TO cl_salv_form_layout_flow.

      CREATE OBJECT lo_header.
      lo_h_label = lo_header->create_label( row         =  1 column      = 1 ).
      lo_h_label->set_text( 'Header in Bold' ).

      lo_h_flow = lo_header->create_flow( row = 2 column = 1 ).
      lo_h_flow->create_text( text = 'This is text of flow' ).

      lo_h_flow = lo_header->create_flow( row = 3 column = 1 ).
      lo_h_flow->create_text( text = 'Number of records is the output' ).

      lo_h_flow = lo_header->create_flow( row = 3 column = 2 ).
      lo_h_flow->create_text( text = '10' ).

      lo_table->set_top_of_list( lo_header ).
      lo_table->set_top_of_list_print( lo_header  ).
******************top_of_page***********************

******************end_of_page***********************

      DATA: lo_footer TYPE REF TO cl_salv_form_layout_grid,
            lo_f_label TYPE REF TO cl_salv_form_label,
            lo_f_flow TYPE REF TO cl_salv_form_layout_flow.

      CREATE OBJECT lo_footer.
      lo_f_label = lo_footer->create_label( row =  1 column = 1 ).
      lo_f_label->set_text( 'Footer .. here it goes' ).

      lo_f_flow = lo_footer->create_flow( row = 2 column = 1 ).
      lo_f_flow->create_text( text = 'This is text of flow in footer' ).

      lo_f_flow = lo_footer->create_flow( row = 3 column = 1 ).
      lo_f_flow->create_text( text = 'Footer number' ).

      lo_f_flow = lo_footer->create_flow( row = 3 column = 2 ).
      lo_f_flow->create_text( text = '1' ).

      lo_table->set_end_of_list( lo_footer ).
      lo_table->set_end_of_list_print( lo_footer  ).

******************end_of_page***********************

******************全局控制***********************

      DATA: lo_set TYPE REF TO cl_salv_display_settings.
      lo_set = lo_table->get_display_settings( ).
      lo_set->set_striped_pattern( value = cl_salv_display_settings=>true ). "alv的斑馬格顯示
      lo_set->set_list_header( 'ALV Header' ).

******************全局控制***********************

******************設置fieldcat的名稱以及自動優化列寬***********************

      DATA: lo_columns TYPE REF TO cl_salv_columns,
            lo_column TYPE REF TO cl_salv_column_table.

      lo_columns = lo_table->get_columns( ).
      lo_columns->set_optimize( abap_true ).

      DEFINE set_head_text.
        lo_column ?= lo_columns->get_column( &1 ).
        lo_column->set_short_text( &2 ).
        lo_column->set_medium_text( &3 ).
        lo_column->set_long_text( &4 ).
      END-OF-DEFINITION.

      set_head_text 'CARRID' 'TEST1' 'TEST1' 'TEST1'.

******************設置fieldcat的名稱以及自動優化列寬***********************

******************設置hotspot事件***********************

      DATA: lr_column TYPE REF TO cl_salv_columns_table.
      lr_column = lo_table->get_columns( ).

      lo_column ?= lr_column->get_column( 'CARRID' ).
      lo_column->set_cell_type( EXPORTING value = if_salv_c_cell_type=>hotspot ).

      DATA:lo_events TYPE REF TO cl_salv_events_table.

      lo_events = lo_table->get_event( ).

      IF lo_handle IS INITIAL.
        CREATE OBJECT lo_handle.
      ENDIF.
      IF lo_handle IS NOT INITIAL.
        SET HANDLER lo_handle->handle_hotspot_click FOR lo_events.
      ENDIF.
******************設置hotspot事件***********************

******************顏色的設定***********************
      DATA: ls_s_color TYPE lvc_s_scol,
            lt_s_color TYPE lvc_t_scol.
      LOOP AT lt_spfli INTO ls_spfli.

        IF sy-tabix = 5.
          ls_s_color-fname = 'CONNID'.
          ls_s_color-color-col = 7.
          ls_s_color-color-int = 1.
          ls_s_color-color-inv = 1.
          APPEND ls_s_color TO lt_s_color.
          ls_spfli-t_color = lt_s_color.
          CLEAR:lt_s_color,ls_s_color.
          MODIFY lt_spfli FROM ls_spfli.
        ENDIF.
        IF sy-tabix = 8.
          ls_s_color-color-col = 7.
          ls_s_color-color-int = 1.
          ls_s_color-color-inv = 1.
          APPEND ls_s_color TO lt_s_color.
          ls_spfli-t_color = lt_s_color.
          CLEAR:lt_s_color,ls_s_color.
          MODIFY lt_spfli FROM ls_spfli.
        ENDIF.
      ENDLOOP.

      DATA:ls_color TYPE lvc_s_colo.
      lo_column ?= lr_column->get_column( columnname =  'CITYTO' ).
      ls_color-col = 7.
      lo_column->set_color( ls_color ).
      lr_column->set_color_column( 'T_COLOR' ).
******************顏色的設定***********************

******************隱藏的設定***********************

      DATA: lo_column2 TYPE REF TO cl_salv_column.

      lo_column2 = lo_columns->get_column( 'ARRTIME' ).
      lo_column2->set_visible( value = if_salv_c_bool_sap=>false ).

******************隱藏的設定***********************

******************數字的合計,平均***********************

      DATA: lo_aggrs type ref to cl_salv_aggregations.

      lo_aggrs = lo_table->get_aggregations( ).
      lo_aggrs->add_aggregation(
        EXPORTING
          columnname  = 'DISTANCE' " ALV Control: Field Name of Internal Table Field
          aggregation = if_salv_c_aggregation=>total ).

      lo_aggrs->set_aggregation_before_items( ' ' ).

******************數字的合計,平均***********************

******************數字的排序和小計***********************

      data: lo_sort type ref to cl_salv_sorts.
      lo_sort = lo_table->get_sorts( ).

      lo_sort->add_sort(
        EXPORTING
          columnname = 'CARRID'" ALV Control: Field Name of Internal Table Field
          subtotal   = IF_SALV_C_BOOL_SAP=>true  ).


******************數字的排序和小計***********************

      lo_table->display( ).



    CATCH cx_salv_msg INTO a_oref.

  ENDTRY.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值