Get FREE Access to the CL_SALV_TABLE Bonus Content
Updated on 17.11.2015
In this post series, I show you how to display a simple list with a flight schedule. I also show you the most common ALV settings that you might need. However, I don't show you how to handle events in CL_SALV_TABLE, and how to add custom buttons at the top of your ALV. But, I have good news for you! I re-wrote the complete source code in OO ABAP way with the help of the 7.4 language elements.
What is covered in the bonus content:
- Source Code in 7.4 OO ABAP Version
- Handling Hotspot Click Event
- Adding Custom Button to the Toolbar
- Handling Custom Button Clicks [NEW]
Overview
In the previous post, we successfully performed some individual column settings, like hiding unnecessary fields, and changing the text of some fields. So now, we have a good-looking ALV list, but we cannot say that our ALV is strong in functionality.
So today, I going to share with you that how we can add additional functionality to our toolbar on the top of the list, beside the existing layout settings. To bring it to life, today we are going to use the class, CL_SALV_FUNCTIONS_LIST that is responsible for customizing the toolbar. Using this class, we are able to create custom functions and add it to the toolbar, or we can use standard ones, like sorting, filtering, and so on. In this demo, I am going to show you, how to enable the standard toolbar.

Set Toolbar
As always, we are going to create a new subroutine for our next setting, called SET_TOOLBAR, and place its perform call in the usual INITIALIZE_ALV subroutine.
...
*&---------------------------------------------------------------------*
FORM initialize_alv.
*&---------------------------------------------------------------------*
DATA message TYPE REF TO cx_salv_msg.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = alv
CHANGING
t_table = flight_schedule ).
columns = alv->get_columns( ).
PERFORM enable_layout_settings.
PERFORM optimize_column_width.
PERFORM hide_client_column.
PERFORM set_departure_country_column.
PERFORM set_toolbar.
" ...
" PERFORM setting_n.
...
The SET_TOOLBAR subroutine is going to be very easy, we need only 3-4 lines of code to implement it. First, we are going to use the GET_FUNCTIONS() method of the CL_SALV_TABLE class that returns back a reference to its CL_SALV_FUNCTIONS_LIST object. Then, we are going to save this reference into a variable, called functions with the type CL_SALV_FUNCTIONS_LIST. At last, we call the method SET_ALL() on the previously initialized functions reference variable that is responsible to set all of the standard ALV functions in our toolbar.
...
*&---------------------------------------------------------------------*
FORM set_toolbar.
*&---------------------------------------------------------------------*
DATA functions TYPE REF TO cl_salv_functions_list.
functions = alv->get_functions( ).
functions->set_all( ).
ENDFORM. " SET_TOOLBAR
...
Complete Source Code
Get the complete source code:
************************************************************************
* Program: ZDEMO_ALV05 *
* Request ID: RXXXXXX *
* User ID: ALEXGONCZY *
* Date: 2014.10.13. *
* Description: - *
************************************************************************
REPORT zdemo_alv05.
************************************************************************
* GLOBAL DATA DEFINITIONS *
************************************************************************
*----------------------------------------------------------------------*
* INCLUDE - definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* CONSTANT - definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* TYPE - definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* DDIC - TABLE / STRUCTURE / VIEW definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* STRUCTURE definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* RANGE definitions *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* REFERENCE definitions *
*----------------------------------------------------------------------*
DATA alv TYPE REF TO cl_salv_table.
DATA columns TYPE REF TO cl_salv_columns_table.
DATA column TYPE REF TO cl_salv_column.
*----------------------------------------------------------------------*
* INTERNAL TABLE definitions *
*----------------------------------------------------------------------*
DATA flight_schedule TYPE STANDARD TABLE OF spfli.
*----------------------------------------------------------------------*
* OTHER GLOBAL DATA definitions *
*----------------------------------------------------------------------*
************************************************************************
* GLOBAL DATA DEFINITIONS - END *
************************************************************************
************************************************************************
* SELECTION SCREENS *
************************************************************************
************************************************************************
* SELECTION SCREENS - END *
************************************************************************
************************************************************************
* EVENTS *
************************************************************************
*----------------------------------------------------------------------*
* INITIALIZATON event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* START-OF-SELECTION event *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM get_flight_schedule.
PERFORM initialize_alv.
PERFORM display_alv.
*----------------------------------------------------------------------*
* END-OF-SELECTION event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* AT LINE-SELECTION event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* AT USER-COMMAND event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* TOP-OF-PAGE event *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* END-OF-PAGE event *
*----------------------------------------------------------------------*
************************************************************************
* EVENTS - END *
************************************************************************
************************************************************************
* SUBROUTINES *
************************************************************************
*&---------------------------------------------------------------------*
FORM get_flight_schedule.
*&---------------------------------------------------------------------*
SELECT * FROM spfli INTO TABLE flight_schedule UP TO 100 ROWS.
ENDFORM. " GET_FLIGHT_SCHEDULE
*&---------------------------------------------------------------------*
FORM initialize_alv.
*&---------------------------------------------------------------------*
DATA message TYPE REF TO cx_salv_msg.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = alv
CHANGING
t_table = flight_schedule ).
columns = alv->get_columns( ).
PERFORM enable_layout_settings.
PERFORM optimize_column_width.
PERFORM hide_client_column.
PERFORM set_departure_country_column.
PERFORM set_toolbar.
" ...
" PERFORM setting_n.
CATCH cx_salv_msg INTO message.
" error handling
ENDTRY.
ENDFORM. " INITIALIZE_ALV
*&---------------------------------------------------------------------*
FORM display_alv.
*&---------------------------------------------------------------------*
alv->display( ).
ENDFORM. " DISPLAY_ALV
*&---------------------------------------------------------------------*
FORM enable_layout_settings.
*&---------------------------------------------------------------------*
DATA layout_settings TYPE REF TO cl_salv_layout.
DATA layout_key TYPE salv_s_layout_key.
layout_settings = alv->get_layout( ).
layout_key-report = sy-repid.
layout_settings->set_key( layout_key ).
layout_settings->set_save_restriction( if_salv_c_layout=>restrict_none ).
ENDFORM. "enable_layout_settings
*&---------------------------------------------------------------------*
FORM optimize_column_width.
*&---------------------------------------------------------------------*
columns->set_optimize( ).
ENDFORM. "OPTIMIZE_COLUMN_WIDTH
*&---------------------------------------------------------------------*
FORM hide_client_column.
*&---------------------------------------------------------------------*
DATA not_found TYPE REF TO cx_salv_not_found.
TRY.
column = columns->get_column( 'MANDT' ).
column->set_visible( if_salv_c_bool_sap=>false ).
CATCH cx_salv_not_found INTO not_found.
" error handling
ENDTRY.
ENDFORM. " HIDE_CLIENT_COLUMN
*&---------------------------------------------------------------------*
FORM set_departure_country_column.
*&---------------------------------------------------------------------*
DATA not_found TYPE REF TO cx_salv_not_found.
TRY.
column = columns->get_column( 'COUNTRYFR' ).
column->set_short_text( 'D. Country' ).
column->set_medium_text( 'Dep. Country' ).
column->set_long_text( 'Departure Country' ).
CATCH cx_salv_not_found INTO not_found.
" error handling
ENDTRY.
ENDFORM. " SET_DEPARTURE_COUNTRY_COLUMN
*&---------------------------------------------------------------------*
FORM set_toolbar.
*&---------------------------------------------------------------------*
DATA functions TYPE REF TO cl_salv_functions_list.
functions = alv->get_functions( ).
functions->set_all( ).
ENDFORM. " SET_TOOLBAR
************************************************************************
* SUBROUTINES - END *
************************************************************************
Summary
At last, let's run our program and check the results: a new toolbar appears on the top of the list. That's it! :)

Stay tuned, I'm working on the next post!