SALV programming

*&---------------------------------------------------------------------* *& Report ZVK_CL_SALV *&---------------------------------------------------------------------* *&Report using OOPs with Basic functionalities. *&---------------------------------------------------------------------* REPORT zvk_cl_salv_1. TABLES : vbak. TYPE-POOLS : abap,rsanm. TYPES : BEGIN OF t_vbak. INCLUDE TYPE vbak. TYPES : t_color TYPE lvc_t_scol, END OF t_vbak. DATA : lt_vbak TYPE STANDARD TABLE OF t_vbak, ls_vbak TYPE t_vbak. FIELD-SYMBOLS : TYPE t_vbak. DATA : l_rec(5) TYPE

*&---------------------------------------------------------------------* *& Report ZVK_CL_SALV *&---------------------------------------------------------------------* *&Report using OOPs with Basic functionalities. *&---------------------------------------------------------------------* REPORT zvk_cl_salv_1. TABLES : vbak. TYPE-POOLS : abap,rsanm. TYPES : BEGIN OF t_vbak. INCLUDE TYPE vbak. TYPES : t_color TYPE lvc_t_scol, END OF t_vbak. DATA : lt_vbak TYPE STANDARD TABLE OF t_vbak, ls_vbak TYPE t_vbak. FIELD-SYMBOLS : TYPE t_vbak. DATA : l_rec(5) TYPE
*&---------------------------------------------------------------------*
*& Report  ZVK_CL_SALV
*&---------------------------------------------------------------------*
*&Report using OOPs with Basic functionalities.
*&---------------------------------------------------------------------*
 
REPORT  zvk_cl_salv_1.
TABLES : vbak.
TYPE-POOLS : abap,rsanm.
 
TYPES : BEGIN OF t_vbak.
INCLUDE TYPE vbak.
TYPES : t_color TYPE lvc_t_scol,
        END OF t_vbak.
 
DATA : lt_vbak TYPE STANDARD TABLE OF t_vbak,
       ls_vbak TYPE t_vbak.
 
FIELD-SYMBOLS :  TYPE t_vbak.
 
DATA : l_rec(5)  TYPE n.
 
** Declaration for ALV Grid **
DATA : gr_table TYPE REF TO cl_salv_table.
 
** Declarations for ALV Functions
DATA : gr_functions TYPE REF TO cl_salv_functions_list.
 
** declaration for ALV Columns
DATA : gr_columns TYPE REF TO cl_salv_columns_table,
       gr_column  TYPE REF TO cl_salv_column_table,
       lt_column_ref TYPE salv_t_column_ref,
       ls_column_ref TYPE salv_s_column_ref.
 
** declaration for Layout Settings
DATA : gr_layout TYPE REF TO cl_salv_layout,
       gr_layout_key TYPE salv_s_layout_key,
       ls_layout TYPE salv_s_layout,
       lt_layout_info TYPE salv_t_layout_info.
 
** Declaration for Global Display Settings
DATA : gr_display TYPE REF TO cl_salv_display_settings,
       lv_title   TYPE lvc_title.
 
** Declaration for Aggregate Function Settings
DATA : gr_aggr    TYPE REF TO cl_salv_aggregations.
 
** Declaration for Sort Function Settings
DATA : gr_sort    TYPE REF TO cl_salv_sorts.
 
** Declaration for Table Selection settings
DATA : gr_select  TYPE REF TO cl_salv_selections.
 
** Declaration for Top of List settings
DATA : gr_content TYPE REF TO cl_salv_form_element.
 
** Class for handling Events
CLASS : lcl_handle_events DEFINITION DEFERRED.
DATA  : gr_events TYPE REF TO lcl_handle_events,
        lr_events TYPE REF TO cl_salv_events_table.
 
** Coloring of Date columns **
DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo,
       ls_colo TYPE lvc_s_colo.
 
** Color Structure of columns **
DATA : lt_color TYPE lvc_t_scol,
       ls_color TYPE lvc_s_scol.
*----------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS : on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.
    METHODS : on_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING row column.
ENDCLASS.                    "lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_double_click.
    PERFORM get_ord_info USING row column.
  ENDMETHOD.                    "on_double_click
  METHOD on_link_click.
    PERFORM get_ord_info USING row column.
  ENDMETHOD.                    "on_link_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS : p_erdat FOR vbak-erdat.
PARAMETER : p_var TYPE slis_vari.
SELECTION-SCREEN END OF BLOCK b1.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
  CLEAR : ls_layout.
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          list_display = if_salv_c_bool_sap=>false
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = lt_vbak.
    CATCH cx_salv_msg .
  ENDTRY.
 
  IF gr_table IS NOT INITIAL.
    MOVE sy-repid TO gr_layout_key-report.     "Set Layout Key as Report ID"
    gr_layout = gr_table->get_layout( ).       "Get Layout of the Table"
    gr_layout->set_key( gr_layout_key ).       "Set Layout key to Layout"
    lt_layout_info = gr_layout->get_layouts( )."Get the Layouts of report"
    IF lt_layout_info[] IS NOT INITIAL.
      ls_layout = gr_layout->f4_layouts( ).    "Activate F4 Help for Layouts"
      IF ls_layout IS NOT INITIAL.
        MOVE ls_layout-layout TO p_var.
      ENDIF.
    ENDIF.
  ENDIF.
 
START-OF-SELECTION.
  REFRESH : lt_vbak.
  SELECT * FROM vbak
    INTO CORRESPONDING FIELDS OF TABLE lt_vbak
    WHERE erdat IN p_erdat.
 
 
  IF sy-subrc EQ 0.
    DESCRIBE TABLE lt_vbak LINES l_rec.
    PERFORM set_color.
    PERFORM alv_grid_display.
  ENDIF.
 
*&---------------------------------------------------------------------*
*&      Form  alv_grid_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_grid_display.
  CLEAR : gr_table.
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          list_display = if_salv_c_bool_sap=>false
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = lt_vbak.
    CATCH cx_salv_msg .
  ENDTRY.
  IF gr_table IS INITIAL.
    MESSAGE 'Error Creating ALV Grid ' TYPE 'I' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.
** Get functions details
  gr_functions = gr_table->get_functions( ).
 
** Activate All Buttons in Tool Bar
  gr_functions->set_all( if_salv_c_bool_sap=>true ).
 
******* Layout Settings  *******
  CLEAR : gr_layout, gr_layout_key.
  MOVE sy-repid TO gr_layout_key-report.                        "Set Report ID as Layout Key"
 
  gr_layout = gr_table->get_layout( ).                          "Get Layout of Table"
  gr_layout->set_key( gr_layout_key ).                          "Set Report Id to Layout"
  gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ). "No Restriction to Save Layout"
  IF p_var IS INITIAL.
    gr_layout->set_default( if_salv_c_bool_sap=>true ).         "Set Default Variant"
  ELSE.
    gr_layout->set_initial_layout( p_var ).                     "Set the Selected Variant as Initial"
  ENDIF.
 
******* Global Display Settings  *******
  CLEAR : gr_display.
  MOVE 'Sales Order Details' TO lv_title.
  gr_display = gr_table->get_display_settings( ).               " Global Display settings"
  gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).  "Activate Strip Pattern"
  gr_display->set_list_header( lv_title ).                      "Report Header"
 
******* Aggregate Function Settings *******
  gr_aggr = gr_table->get_aggregations( ).                      "Get Aggregate Functions"
 
******* Sort Functions *******
  gr_sort = gr_table->get_sorts( ).
  IF gr_sort IS NOT INITIAL.
    TRY.
        gr_sort->add_sort( columnname = 'ERNAM'
                           position = 1
                           sequence   = if_salv_c_sort=>sort_up
                           subtotal   = if_salv_c_bool_sap=>true
                           group      = if_salv_c_sort=>group_none
                           obligatory = if_salv_c_bool_sap=>false ).
      CATCH cx_salv_not_found .
      CATCH cx_salv_existing .
      CATCH cx_salv_data_error .
    ENDTRY.
 
    TRY.
        gr_sort->add_sort( columnname = 'ERDAT'
                           position = 2
                           sequence   = if_salv_c_sort=>sort_down
                           subtotal   = if_salv_c_bool_sap=>false
                           group      = if_salv_c_sort=>group_none
                           obligatory = if_salv_c_bool_sap=>false ).
      CATCH cx_salv_not_found .
      CATCH cx_salv_existing .
      CATCH cx_salv_data_error .
    ENDTRY.
  ENDIF.
******* Table Selection Settings *******
  gr_select = gr_table->get_selections( ).
  IF gr_select IS NOT INITIAL.
    gr_select->set_selection_mode( if_salv_c_selection_mode=>row_column ). "Allow single row Selection"
  ENDIF.
 
******* Top of List settings *******
  PERFORM top_of_page CHANGING gr_content.
  gr_table->set_top_of_list( gr_content ).
 
******* Event Register settings *******
  lr_events = gr_table->get_event( ).
  CREATE OBJECT gr_events.
  SET HANDLER gr_events->on_double_click FOR lr_events.
  SET HANDLER gr_events->on_link_click FOR lr_events.
 
** Get the columns from ALV Table
  gr_columns = gr_table->get_columns( ).
  IF gr_columns IS NOT INITIAL.
    REFRESH : lt_column_ref.
    CLEAR   : ls_column_ref.
    lt_column_ref = gr_columns->get( ).
 
** Get columns properties
    gr_columns->set_optimize( if_salv_c_bool_sap=>true ).
    gr_columns->set_key_fixation( if_salv_c_bool_sap=>true ).
    TRY.
        gr_columns->set_color_column( 'T_COLOR' ).
      CATCH cx_salv_data_error .
    ENDTRY.
** Individual Column Properties.
    PERFORM column_settings.
  ENDIF.
  CALL METHOD gr_table->display.
ENDFORM.                    "alv_grid_display
 
*&---------------------------------------------------------------------*
*&      Form  column_settings
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM column_settings.
  LOOP AT lt_column_ref INTO ls_column_ref.
    TRY.
        gr_column ?= gr_columns->get_column( ls_column_ref-columnname ).
      CATCH cx_salv_not_found.
    ENDTRY.
    IF gr_column IS NOT INITIAL.
** Make Mandt column invisible **
      IF gr_column->get_ddic_datatype( ) = 'CLNT'.
        gr_column->set_technical( if_salv_c_bool_sap=>true ).
      ENDIF.
** Create Aggregate function total for All Numeric/Currency Fields **
      IF gr_column->get_ddic_inttype( ) EQ 'P' OR
         gr_column->get_ddic_datatype( ) EQ 'CURR'.
        IF gr_aggr IS NOT INITIAL.
          TRY.
              gr_aggr->add_aggregation( columnname = ls_column_ref-columnname
                                        aggregation = if_salv_c_aggregation=>total ).
            CATCH cx_salv_data_error .
            CATCH cx_salv_not_found .
            CATCH cx_salv_existing .
          ENDTRY.
        ENDIF.
      ENDIF.
** Create Check box for fields with domain "XFELD"
      IF gr_column->get_ddic_domain( ) EQ 'XFELD'.
        gr_column->set_cell_type( if_salv_c_cell_type=>checkbox ).
      ENDIF.
 
** Set color to Date Columns **
      IF gr_column->get_ddic_datatype( ) EQ 'DATS'.
        CLEAR : ls_colo.
        MOVE 2 TO ls_colo-col.
        MOVE 1 TO ls_colo-int.
        MOVE 1 TO ls_colo-inv.
        gr_column->set_color( ls_colo ).
      ENDIF.
 
** Add Hotspot&Hyper Link to the column vbeln
      IF ls_column_ref-columnname EQ 'VBELN'.
        gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
        gr_column->set_key( if_salv_c_bool_sap=>true ).
      ENDIF.
 
    ENDIF.
  ENDLOOP.
ENDFORM.                    "column_settings
 
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
FORM top_of_page CHANGING lr_content TYPE REF TO cl_salv_form_element.
  DATA : lr_grid TYPE REF TO cl_salv_form_layout_grid,
         lr_text  TYPE REF TO cl_salv_form_text,
         lr_label TYPE REF TO cl_salv_form_label,
         lr_head  TYPE string.
 
  MOVE 'Sales Order List' TO lr_head.
  CREATE OBJECT lr_grid.
** Header of Top of Page **
  lr_grid->create_header_information( row     = 1
                                      column  = 1
                                      text    = lr_head
                                      tooltip = lr_head ).
** Add Row **
  lr_grid->add_row( ).
 
** Add Label in Grid **
  lr_label = lr_grid->create_label( row = 2
                                    column = 1
                                    text = 'No of Records'
                                    tooltip = 'No of Records' ).
 
** Add Text in The Grid **
  lr_text = lr_grid->create_text( row = 2
                                  column = 2
                                  text = l_rec
                                  tooltip = l_rec ).
** Set Label and Text Link **
  lr_label->set_label_for( lr_text ).
 
** Move lr_grid to lr_content **
  lr_content = lr_grid.
ENDFORM.                    "top_of_page
 
*&---------------------------------------------------------------------*
*&      Form
*&---------------------------------------------------------------------*
FORM get_ord_info USING row TYPE salv_de_row
                        column TYPE salv_de_column.
  IF column EQ 'VBELN'.
    CLEAR : ls_vbak.
    READ TABLE lt_vbak INTO ls_vbak INDEX row.
    IF sy-subrc EQ 0.
      SET PARAMETER ID 'AUN' FIELD ls_vbak-vbeln.
      CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.
ENDFORM.                    "get_ord_info
 
*&---------------------------------------------------------------------*
*&      Form  set_color
*&---------------------------------------------------------------------*
* Set color to the column VBELN & NETWR for Order Value > 1000
*----------------------------------------------------------------------*
FORM set_color.
  LOOP AT lt_vbak ASSIGNING .
    IF -netwr GT 1000.
      REFRESH : lt_color.
 
      CLEAR : ls_color.
      MOVE 'VBELN' TO ls_color-fname.
      MOVE 3       TO ls_color-color-col.
      MOVE 0       TO ls_color-color-int.
      MOVE 0       TO ls_color-color-inv.
      APPEND ls_color TO lt_color.
 
      CLEAR : ls_color.
      MOVE 'NETWR' TO ls_color-fname.
      MOVE 3       TO ls_color-color-col.
      MOVE 0       TO ls_color-color-int.
      MOVE 0       TO ls_color-color-inv.
      APPEND ls_color TO lt_color.
 
      MOVE lt_color TO -t_color.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "set_color

Source: https://wiki.scn.sap.com/wiki/display/ABAP/ALV+Grid+Report+-+with+Object+Oriented+SALV+Classes?original_fqdn=wiki.sdn.sap.com