[ABAP] SALV: Selektierte Zeilen (selected rows) eines SALV-Gitters auswerten

* Beispiel für die Auswertung von selektierten Zeilen eines SALV-Grids,
* nachdem ein Button in der Toolbar geklickt wurde
CLASS lcl_salv DEFINITION FINAL.

  PUBLIC SECTION.

* Variablen
    CLASS-DATA: it_data TYPE ty_it_mytable.
    CLASS-DATA: o_salv TYPE REF TO cl_salv_table.
	
* Eventhandler-Methode für Button-Klicks in der Toolbar des SALV-Grids
    CLASS-METHODS: on_toolbar_click FOR EVENT added_function OF cl_salv_events_table
      IMPORTING
        e_salv_function
        sender.
ENDCLASS.

CLASS lcl_salv IMPLEMENTATION.

  METHOD on_toolbar_click.
	TRY.
		IF o_salv IS BOUND.

		  CASE e_salv_function.

			WHEN 'BTN_CHECK'.

* selektierte Zeilen des SALV-Grids holen
			  DATA(it_sel_rows) = o_salv->get_selections( )->get_selected_rows( ).
			  IF lines( it_sel_rows ) > 0.
* Daten aus der internen Tabelle holen
				DATA(it_items) = VALUE ty_it_mytable( FOR <s> IN it_sel_rows ( it_data[ <s> ] ) ).

				...


			  ENDIF.

		  ENDCASE.

		ENDIF.

	  CATCH cx_root INTO DATA(e_txt).
		MESSAGE e_txt->get_text( ) TYPE 'I'.
	ENDTRY.

  ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

    TRY.
        cl_salv_table=>factory( EXPORTING r_container  = cl_gui_container=>default_screen
                                IMPORTING r_salv_table = lcl_salv=>o_salv
                                CHANGING  t_table      = lcl_salv=>it_data ).
        ...

* eigenen Button in die Toolbar hinzufügen		
        lcl_salv=>o_salv->get_functions( )->add_function( name = 'BTN_CHECK'
                                                          icon = |{ icon_icon_list }|
                                                          text = 'Check'
                                                          tooltip = 'Check'
                                                          position = if_salv_c_function_position=>right_of_salv_functions ).

* Klick-Handler für Toolbar-Buttons													  
        SET HANDLER lcl_salv=>on_toolbar_click FOR lcl_salv=>o_salv->get_event( ).

        ...
		
        lcl_salv=>o_salv->display( ).

* Listausgabe erzwingen für Erzeugung von cl_gui_container=>default_screen
        WRITE: space.

      CATCH cx_root INTO DATA(e_txt).
        WRITE: / e_txt->get_text( ).
    ENDTRY.