ALV program

Demo program:
- CL_GUI_ALV_GRID + REUSE...: package SLIS
- CL_SALV_TABLE: package SALV_OM_OBJECTS
- CL_SALV_GUI_TABLE_IDA: package SALV_IDA_TEST

Program:

TABLES sscrfields.

SELECTION-SCREEN:
  PUSHBUTTON 2(10)  but1 USER-COMMAND cli1,
  PUSHBUTTON 15(10but2 USER-COMMAND cli2,
  PUSHBUTTON 28(10but3 USER-COMMAND cli3,
  PUSHBUTTON 41(10but4 USER-COMMAND cli4.

TYPES BEGIN OF ty.
        INCLUDE TYPE sbook.
TYPES test TYPE LENGTH 10.
TYPES icon TYPE c.
TYPES cbox TYPE c.
TYPES r_color TYPE LENGTH 4.
TYPES END OF ty.

DATAgrid        TYPE REF TO cl_gui_alv_grid,
      salv        TYPE REF TO cl_salv_table,
      gt_sbook    TYPE TABLE OF ty,
      gs_layout   TYPE lvc_s_layo,
      gt_sort     TYPE lvc_t_sort,
      gt_fieldcat TYPE lvc_t_fcat.

CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    INTERFACESif_alv_rm_grid_friend.

    METHODS:
      subtotal_text           FOR EVENT subtotal_text                OF cl_gui_alv_grid      IMPORTING es_subtottxt_info
                                                                                                       ep_subtot_line
                                                                                                       e_event_data,
      after_refresh           FOR EVENT after_refresh                OF cl_gui_alv_grid      IMPORTING sender,
      _before_refresh         FOR EVENT after_refresh                OF cl_gui_alv_grid      IMPORTING sender,
      del_change_selection    FOR EVENT delayed_changed_sel_callback OF cl_gui_alv_grid,
      on_user_command         FOR EVENT added_function               OF cl_salv_events       IMPORTING e_salv_function,
      on_before_salv_function FOR EVENT before_salv_function         OF cl_salv_events       IMPORTING e_salv_function,
      on_after_salv_function  FOR EVENT after_salv_function          OF cl_salv_events       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.

  PRIVATE SECTION.
    DATAhandler_added TYPE abap_bool.
ENDCLASS.                    "lcl_handle_events DEFINITION

CLASS lcl_handle_events IMPLEMENTATION.
  METHOD subtotal_text.
    ASSIGN e_event_data->m_data->TO FIELD-SYMBOL(<fs>).
    IF sy-subrc EQ 0.
      <fs> 'Total'.
    ENDIF.
  ENDMETHOD.
  METHOD on_user_command.
    BREAK-POINT.
  ENDMETHOD.
  METHOD on_before_salv_function.
    BREAK-POINT.
  ENDMETHOD.
  METHOD on_after_salv_function.
    BREAK-POINT.
  ENDMETHOD.
  METHOD on_double_click.
    BREAK-POINT.
  ENDMETHOD.
  METHOD on_link_click.
    BREAK-POINT.
  ENDMETHOD.
  METHOD del_change_selection.

  ENDMETHOD.
  METHOD _before_refresh.
    BREAK-POINT.
  ENDMETHOD.

  METHOD after_refresh.
*    BREAK-POINT.
*    CHECK handler_added EQ abap_false.

*    SET HANDLER me->del_change_selection FOR sender.
*
*    sender->set_delay_change_selection(
*      EXPORTING
*        time   = 100    " Time in Milliseconds
*      EXCEPTIONS
*        error  = 1
*        OTHERS = 2
*    ).
*    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    ENDIF.
*
*    sender->register_delayed_event(
*      EXPORTING
*        i_event_id =  sender->mc_evt_delayed_change_select
*      EXCEPTIONS
*        error      = 1
*        OTHERS     = 2
*    ).
*    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    ENDIF.
*
*    sender->get_frontend_fieldcatalog(
*      IMPORTING
*        et_fieldcatalog =  gt_fieldcat
*    ).
*
*    ASSIGN gt_fieldcat[ fieldname = 'LOCCURAM' ] TO FIELD-SYMBOL(<fcat>).
*    <fcat>-edit = 'X'.
*
*    sender->set_frontend_fieldcatalog( it_fieldcatalog = gt_fieldcat ).
*
*    sender->register_edit_event(
*      EXPORTING
*        i_event_id = sender->mc_evt_modified
*      EXCEPTIONS
*        error      = 1
*        OTHERS     = 2
*    ).
*    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    ENDIF.
*
*    sender->set_ready_for_input(
*        i_ready_for_input = 1
*    ).
*
*    sender->get_frontend_layout(
*      IMPORTING
*        es_layout = gs_layout  ).
*
*    gs_layout = VALUE #( BASE gs_layout totals_bef = 'X'
*                                        no_totexp  = 'X'
*                                        no_totline = 'X'
*                                        ).
*
*    sender->set_frontend_layout( is_layout = gs_layout ).
*
*    handler_added = abap_true.
**
*    sender->refresh_table_display(
**      EXPORTING
**        is_stable      =     " With Stable Rows/Columns
**        i_soft_refresh =     " Without Sort, Filter, etc.
*      EXCEPTIONS
*        finished       = 1
*        OTHERS         = 2
*    ).
*    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    ENDIF.

  ENDMETHOD.
ENDCLASS.

DATAgr_events TYPE REF TO lcl_handle_events.

INITIALIZATION.
  but1 'Grid'.
  but2 'Salv'.
  but3 'Tree'.
  but4 'Seq'.

AT SELECTION-SCREEN.
  SELECT FROM sbook INTO CORRESPONDING FIELDS OF TABLE gt_sbook UP TO 100 ROWS.

  LOOP AT gt_sbook ASSIGNING FIELD-SYMBOL(<fs_book>).
*    <fs_book>-test = <fs_book>-loccuram.
    <fs_book>-test 'Total'.
    <fs_book>-icon '1'.
*    <fs_book>-r_color = 'C310'.
  ENDLOOP.

  CASE sscrfields.
    WHEN 'CLI1'.
      CREATE OBJECT grid
        EXPORTING
          i_parent          cl_gui_custom_container=>screen0
        EXCEPTIONS
          error_cntl_create 1
          error_cntl_init   2
          error_cntl_link   3
          error_dp_create   4
          OTHERS            5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      gt_fieldcat VALUE #fieldname 'CARRID' col_pos scrtext_s 'CARRID' )"emphasize = 'C310' )"key = 'X' )
                             fieldname 'CONNID' col_pos scrtext_s 'CONNID' no_out 'X' )"key = 'X' )
                             fieldname 'LOCCURKEY' col_pos scrtext_s 'LOCCURKEY' )"edit = 'X' )
                             fieldname 'LOCCURAM' col_pos scrtext_s 'LOCCURAM' no_zero 'X' cfieldname 'LOCCURKEY' do_sum 'X' )
                             fieldname 'TEST' col_pos scrtext_s 'TEST' col_opt 'X' quantity '%')
*                             ( fieldname = 'ICON' col_pos = 6 scrtext_s = 'ICON' )
*                             ( fieldname = 'CBOX' col_pos = 7 scrtext_s = 'CBOX' checkbox = 'X')
                           ).

      gt_sort VALUE #"( fieldname = 'CARRID' up = 'X' subtot = 'X' )"expa = 'X' )
                         fieldname 'CONNID' up 'X' subtot 'X' )"expa = 'X' )
                         ).
*
      gs_layout VALUE #totals_bef 'X'
*                           no_totexp = 'X'
*                           no_totline = 'X'
*                           excp_fname = 'ICON'
                           info_fname 'R_COLOR'
                         ).

      CREATE OBJECT gr_events.
      SET HANDLER gr_events->subtotal_text FOR grid.
*      SET HANDLER gr_events->_before_refresh FOR grid.

      CALL METHOD grid->set_table_for_first_display
        EXPORTING
          is_layout       gs_layout
        CHANGING
          it_sort         gt_sort
          it_fieldcatalog gt_fieldcat
          it_outtab       gt_sbook.

      grid->set_ready_for_input(
          i_ready_for_input 1
      ).

      WRITE '.'.
    WHEN 'CLI2'.
      cl_salv_table=>factory(
*        EXPORTING
*          list_display = if_salv_c_bool_sap=>true
        IMPORTING
          r_salv_table   salv
        CHANGING
          t_table        gt_sbook  ).

      salv->get_functions)->set_allvalue if_salv_c_bool_sap=>true ).
*      salv->get_sorts( )->add_sort(
*                                   EXPORTING
*                                     columnname         = 'CARRID'
*                                     position           = 1
*                                     sequence           = if_salv_c_sort=>sort_up
*                                     subtotal           = if_salv_c_bool_sap=>true
*                                  ).
*      salv->get_sorts( )->add_sort(
*                                   EXPORTING
*                                     columnname         = 'CONNID'
*                                     position           = 1
*                                     sequence           = if_salv_c_sort=>sort_up
*                                     subtotal           = if_salv_c_bool_sap=>true
*                                  ).

      salv->get_aggregations)->add_aggregation(
                                    EXPORTING
                                     columnname         'LOCCURAM'
                                     aggregation        if_salv_c_aggregation=>total ).

      salv->get_sorts)->add_sort(
                                   EXPORTING
                                     columnname         'TEST'
                                     subtotal           if_salv_c_bool_sap=>true
                                  ).

*      salv->get_columns( )->get_column( columnname = 'TEST' )->set_short_text( value = 'abc' ).
      salv->get_columns)->get_columncolumnname 'TEST' )->set_visiblevalue if_salv_c_bool_sap=>false ).
*      salv->get_columns( )->get_column( columnname = 'CONNID' )->set_technical( value = if_salv_c_bool_sap=>true ).
      salv->get_sorts)->set_compressed_subtotalvalue 'TEST' ).

*      CREATE OBJECT gr_events.
*
*      SET HANDLER gr_events->on_user_command FOR salv->get_event( ).
*      SET HANDLER gr_events->on_before_salv_function FOR salv->get_event( ).
*      SET HANDLER gr_events->on_after_salv_function FOR salv->get_event( ).
*      SET HANDLER gr_events->on_double_click FOR salv->get_event( ).
*      SET HANDLER gr_events->on_link_click FOR salv->get_event( ).
*
*      SET HANDLER gr_events->after_refresh FOR ALL INSTANCES.
*      salv->refresh( ).

      salv->display).
    WHEN 'CLI3'.
      DATA(lt_nodeVALUE snodetabtype 'T'
                                        name 'SBOOK'
                                        tlevel '01'
                                        nlength '15'
                                        color '4'
                                        text 'Book'
                                        tlength ='20'
                                        tcolor ).

      lt_node VALUE snodetabBASE lt_node FOR lw_data IN gt_sbook
                                type 'P' name 'BOOKID' tlevel '02' nlength '6' color '1' text lw_data-bookid tlength ='8' tcolor ).

      CALL FUNCTION 'RS_TREE_CONSTRUCT'
        TABLES
          nodetab            lt_node
        EXCEPTIONS
          tree_failure       1
          id_not_found       2
          wrong_relationship 3
          OTHERS             4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.

      CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
        EXPORTING
          callback_program     sy-repid
          callback_top_of_page 'TOP_OF_PAGE'.

*      FORM top_of_page.
*        DATA: t_header      TYPE slis_t_listheader,
*              wa_header     TYPE slis_listheader,
*              t_line        LIKE wa_header-info,
*              ld_lines      TYPE i,
*              ld_linesc(10) TYPE c.
*
*       Title
*        wa_header-typ = 'H'.
*        wa_header-info = 'Test header'.
*
*        APPEND wa_header TO t_header.
*        CLEAR wa_header.
*        CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
*          EXPORTING
*            it_list_commentary = t_header.
*      ENDFORM.
    WHEN 'CLI4'.

    WHEN OTHERS.
  ENDCASE.

START-OF-SELECTION.

*  grid->get_frontend_fieldcatalog(
*    IMPORTING
*      et_fieldcatalog =  gt_fieldcat   " Field Catalog
*  ).
*
*  DATA: lr_result TYPE REF TO cl_salv_ex_result_data_table,
*        bin_tab   TYPE TABLE OF x255,
*        lv_len    TYPE i.
*
*  TRY.
*      lr_result = cl_salv_ex_util=>factory_result_data_table(
*                  r_data         = REF #( gt_sbook )
*                  t_fieldcatalog = gt_fieldcat ).
*
*      cl_salv_bs_lex=>export_from_result_data_table(
*        EXPORTING
*          is_format            = if_salv_bs_lex_format=>mc_format_csv
*          ir_result_data_table = lr_result
*        IMPORTING
*          er_result_file       = DATA(lr_xstring) ).
*    CATCH cx_salv_unexpected_param_value .
*      EXIT.
*  ENDTRY.
*
*  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*    EXPORTING
*      buffer        = lr_xstring
**     APPEND_TO_TABLE       = ' '
*    IMPORTING
*      output_length = lv_len
*    TABLES
*      binary_tab    = bin_tab.

Comments