CL_SALV_TABLE / CL_SALV_FUNCTIONS_LIST / CL_SALV_EVENTS_TABLE / CL_SALV_SELECTIONS / CREATE OBJECT / SET HANDLER

Bsp. für ein ALV auf Basis der SALV Klasse

  • CL_SALV_TABLE ALV Grid
  • CL_SALV_FUNCTIONS_LIST Funktionen Menüleiste Drucktastenleiste
  • CL_SALV_EVENTS_TABLE Events
  • CL_SALV_SELECTIONS Selektionen
  • CREATE OBJECT Event Handler erzeugen
  • SET HANDLER Event Handler einstellen

Erstellen des PF_STATUS über
SE80
Funktionsgruppe SALV_METADATA_STATUS
Status SALV_TABLE_STANDARD
kopieren und aktivieren.

Erstellen und Aktivieren der Funktion MYFUNCTIONS durch Abänderung der Drucktastenleiste von SALV_TABLE_STANDDARD

*&---------------------------------------------------------------------*
*& Report  ZTEST34
*&
*&---------------------------------------------------------------------*
*&
*& Demonstration von SALV, functions, events, selections
*&   cl_salv_table
*&   cl_salv_events_table for events
*&   cl_salv_selections for selections
*&   cl_salv_functions_list for functions
*&---------------------------------------------------------------------*
* PF_STATUS SALV_TABLE_STANDARD kopieren über
*   (Standard GUI Status for alv)
*   SE80 Funktionsgruppe SALV_METADATA_STATUS
*      GUI-Status
*          SALV_TABLE_STANDARD
* PF_STATUS SALV_STANDARD kopieren über
*   SE80 Programm SALV_DEMO_TABLE_FUNCTIONS
*      GUI-Status
*          SALV_STANDARD
* Drucktastenleiste / application Toolbar in SALV_TABLE_STANDARD
*   Da die Drucktastenleiste schon voll ist,
*   ein Trennzeichen löschen und stattdessen
*   MYFUNCTION einsetzen und Funktionstaste zuordnen (Muss)
REPORT ztest34.
"Report zalvom_demo3.
DATA : ispfli TYPE TABLE OF spfli.
DATA : xspfli TYPE spfli.
DATA : gr_table TYPE REF TO cl_salv_table.
DATA : gr_functions TYPE REF TO cl_salv_functions_list.
DATA : gr_events TYPE REF TO cl_salv_events_table.
DATA : gr_selections TYPE REF TO cl_salv_selections.

*----------------------------------------------------------------------*
*  CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION .
    METHODS :
      on_user_command FOR EVENT added_function OF cl_salv_events IMPORTING e_salv_function,
      on_double_click FOR EVENT double_click OF cl_salv_events_table IMPORTING row column.
ENDCLASS .
"lcl_handle_events DEFINITION

"Variable Event_Handler als Zeiger auf Klasse lcl_handle_events
DATA : event_handler TYPE REF TO lcl_handle_events.

*----------------------------------------------------------------------*
*  Hauptprogramm
*----------------------------------------------------------------------*
START-OF-SELECTION.
  "Datenextract
  SELECT * INTO CORRESPONDING FIELDS OF TABLE ispfli FROM spfli UP TO 100 ROWS.

  "ALV aus SALV Klasse Erzeugung
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = gr_table
    CHANGING
      t_table      = ispfli.

  "Menü / Drucktasten / Funktionstasten
  gr_table->set_screen_status(
    pfstatus  = 'SALV_TABLE_STANDARD'
    report   = sy-repid
    set_functions = gr_table->c_functions_all ).

  "Events
  gr_events = gr_table->get_event( ).
  CREATE OBJECT event_handler.
  SET HANDLER event_handler->on_user_command FOR gr_events.
  SET HANDLER event_handler->on_double_click FOR gr_events.

  "Selections
  gr_selections = gr_table->get_selections( ).
  gr_selections->set_selection_mode( 1 ). "Single

  gr_table->display( ).

*----------------------------------------------------------------------*
*  CLASS lcl_handle_events IMPLEMENTATION *--------------------------
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION .
  METHOD on_user_command.
* Get the selection rows
    DATA : lr_selections TYPE REF TO cl_salv_selections.
    DATA : lt_rows TYPE salv_t_row.
    DATA : ls_rows TYPE i .
    DATA : message TYPE string .
    CASE e_salv_function.
      WHEN
     'MYFUNCTION' .
        lr_selections = gr_table->get_selections( ).
        lt_rows = lr_selections->get_selected_rows( ).
        READ TABLE lt_rows INTO ls_rows INDEX 1 .
        IF sy-subrc IS INITIAL.
          READ TABLE ispfli INTO xspfli INDEX ls_rows.
          CONCATENATE xspfli-carrid xspfli-connid xspfli-cityfrom xspfli-cityto INTO message SEPARATED BY space.
          MESSAGE i001(00) WITH 'You pushed the button: ' message  .
        ELSE.
          message = 'Bitte eine Zeile auswählen'.
          MESSAGE i001(00) WITH message  .
        ENDIF.

    ENDCASE .
  ENDMETHOD .
  "on_user_command
  METHOD on_double_click.
    DATA : message TYPE string .
    DATA : row_c(4) TYPE c .

    row_c = row.
    CONCATENATE 'Row' row_c 'Column' column INTO message SEPARATED BY space.
    MESSAGE i001(00) WITH 'You double-clicked on ' message .
  ENDMETHOD .

  "on_double_click
ENDCLASS.
"lcl_handle_events IMPLEMENTATION