********************************************************************** * * Datentypen, Variablen, Konstanten * ********************************************************************** TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY. TYPES: ty_it_nodes TYPE STANDARD TABLE OF mtreesnode WITH DEFAULT KEY. DATA: o_splitter_main TYPE REF TO cl_gui_splitter_container. DATA: o_container_l TYPE REF TO cl_gui_container. DATA: o_container_r TYPE REF TO cl_gui_container. DATA: o_tree TYPE REF TO cl_gui_simple_tree. DATA: o_salv TYPE REF TO cl_salv_table. DATA: it_tree_spfli TYPE STANDARD TABLE OF spfli. DATA: it_salv_spfli TYPE STANDARD TABLE OF spfli. DATA: it_nodes TYPE ty_it_nodes. ********************************************************************** * * Eventhandler * ********************************************************************** CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_selection_changed FOR EVENT selection_changed OF cl_gui_simple_tree IMPORTING node_key sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Klick auf ein aktives Baumelement METHOD on_selection_changed. IF o_salv IS BOUND. * Element in der Nodes-Tabelle lesen ASSIGN it_nodes[ node_key = node_key ] TO FIELD-SYMBOL(<fs_node>). * iTab für SALV-Table neu aufbauen, abhängig vom gewählten Baumelement it_salv_spfli = VALUE #( FOR l IN it_tree_spfli WHERE ( carrid = <fs_node>-text ) ( mandt = l-mandt carrid = l-carrid connid = l-connid countryfr = l-countryfr cityfrom = l-cityfrom airpfrom = l-airpfrom countryto = l-countryto cityto = l-cityto airpto = l-airpto fltime = l-fltime deptime = l-deptime arrtime = l-arrtime distance = l-distance distid = l-distid fltype = l-fltype period = l-period ) ). * SALV-Table neu anzeigen o_salv->refresh( ). ENDIF. ENDMETHOD. ENDCLASS. ********************************************************************** * * SELECTION-SCREEN * ********************************************************************** * leeres Selektionsbild als Dummy für die Container-Objekte (o_splitter_main ...) SELECTION-SCREEN BEGIN OF SCREEN 2000. SELECTION-SCREEN END OF SCREEN 2000. ********************************************************************** * * INITIALIZATION * ********************************************************************** INITIALIZATION. SELECT * INTO TABLE it_tree_spfli FROM spfli. ********************************************************************** * * START-OF-SELECTION * ********************************************************************** START-OF-SELECTION. * leeres Selektionbild 2000 anzeigen CALL SELECTION-SCREEN 2000. ********************************************************************** * * AT SELECTION-SCREEN OUTPUT * ********************************************************************** AT SELECTION-SCREEN OUTPUT. * Doppelte Objekterzeugung unterbinden IF NOT o_splitter_main IS BOUND. * Splitter auf default_screen (SELECTION-SCREEN 2000) erzeugen o_splitter_main = NEW #( parent = cl_gui_container=>default_screen rows = 1 columns = 2 ). * Breite in % (linke Spalte für den Tree) o_splitter_main->set_column_width( id = 1 width = 15 ). * linken und rechten Splitcontainer holen o_container_l = o_splitter_main->get_container( row = 1 column = 1 ). o_container_r = o_splitter_main->get_container( row = 1 column = 2 ). * Tree-Objekt erzeugen o_tree = NEW #( parent = o_container_l node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single ). * Eventtypten müssen gesondert registriert werden DATA(it_events) = VALUE ty_it_events( ( eventid = cl_gui_simple_tree=>eventid_selection_changed appl_event = abap_true ) ). o_tree->set_registered_events( events = it_events ). SET HANDLER lcl_events=>on_selection_changed FOR o_tree. * Root-Node einfügen it_nodes = VALUE #( ( node_key = 'ROOT' " Node-Bezeichner relatship = cl_gui_simple_tree=>relat_last_child disabled = abap_true isfolder = abap_true " Typ Ordner für Root-Element n_image = icon_folder " Icon Ordner exp_image = icon_open_folder " Icon geöffneter Ordner style = cl_gui_simple_tree=>style_default text = 'Airlines' ) ). * Childs an Root-Node anhängen LOOP AT it_tree_spfli ASSIGNING FIELD-SYMBOL(<fs_line>). * bei Änderung der carrid neue carrid als Child anhängen AT NEW carrid. APPEND VALUE #( node_key = |NODE{ sy-tabix }| " Node-Bezeichner relatship = cl_gui_simple_tree=>relat_last_child relatkey = 'ROOT' " an ROOT-Element anhängen style = cl_gui_simple_tree=>style_intensified text = |{ <fs_line>-carrid }| ) TO it_nodes. ENDAT. ENDLOOP. * Nodes im Baum einfügen o_tree->add_nodes( table_structure_name = 'MTREESNODE' " Typ muss gleich mit Zeilentyp von ty_it_nodes sein node_table = it_nodes ). * Root-Nodes des Trees expandieren o_tree->expand_root_nodes( ). * leeres SALV-Grid erzeugen cl_salv_table=>factory( EXPORTING r_container = o_container_r IMPORTING r_salv_table = o_salv CHANGING t_table = it_salv_spfli ). o_salv->get_display_settings( )->set_striped_pattern( abap_true ). o_salv->get_columns( )->set_optimize( abap_true ). o_salv->get_functions( )->set_all( ). o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ). o_salv->display( ). ENDIF. ********************************************************************** * * AT SELECTION-SCREEN * ********************************************************************** AT SELECTION-SCREEN. * wenn "Ausführen" (F8) geklickt wurde IF sy-ucomm = 'CRET'. * Selektionbild 2000 wieder anzeigen CALL SELECTION-SCREEN 2000. ENDIF.
Kategorien
-
Neueste Beiträge
- [ABAP] Ergebnisse eines SQL-Ausdrucks in einer Zeile verketten
- [SAP] Profit Center
- [SAP Fiori] Setup Fiori My Inbox
- [SAP Fiori] Setup der Fiori Suche / Fiori search
- [ABAP] Liste aller Umgebungsvariablen
- [ABAP] Muster-Leistungsverzeichnisse lesen
- [ABAP] ABAP2XLSX: Column Autosize, Verwendung Iterator
- [ABAP] Schlüsselspalten einer DB-Tabelle ermitteln
- [ABAP] SALV-Grid: Eventhandler für Klick auf eine Zelle (link_click, hotspot)
- [ABAP] Material-Ledger: Materialpreise für unterschiedliche Währungstypen pflegen