Zum Inhalt springen
Die Codezentrale
Programmierung, Tipps, Tricks, Snippets, Links (.Net, Java, JavaScript, C++, PHP, Python, SQL, SAP, ABAP, SAPUI5)
Zum Inhalt springen
  • Home
  • Links
    • Kachelmannwetter
    • MrLeehs Blog
    • Deskmodder
    • winfuture.de
    • Tricktresor
    • Python Online Compiler
    • [Raspberry Pi] Wichtige Terminal-Kommandos für Raspian
    • CodeSandbox JS Vanilla
  • Datenschutzerklärung
  • Impressum
Startseite SAP ABAP GUI Grid ALV [ABAP] ALV-Grid: Im Selektionsbild anzeigen, Datenausgabe in editierbarem ALV-Grid darstellen, Standard-Button „Refresh“ abfangen, kein zusätzliches Dynpro

[ABAP] ALV-Grid: Im Selektionsbild anzeigen, Datenausgabe in editierbarem ALV-Grid darstellen, Standard-Button „Refresh“ abfangen, kein zusätzliches Dynpro

admin 13. Juni 2017 31. Januar 2019ALV
**********************************************************************
*
* Variablen
*
**********************************************************************
DATA: gv_screen_status TYPE string VALUE 'INIT'.
DATA: gv_carrid   TYPE spfli-carrid.
DATA: gv_connid TYPE spfli-connid.
DATA: o_alv TYPE REF TO cl_gui_alv_grid.
DATA: it_spfli TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.
**********************************************************************
*
* leeres Dynpro als Dummy für ALV-Grid
*
**********************************************************************
SELECTION-SCREEN BEGIN OF SCREEN 2000.
SELECTION-SCREEN END OF SCREEN 2000.
**********************************************************************
*
* SELECTION-SCREEN
*
**********************************************************************
SELECT-OPTIONS: so_carr FOR gv_carrid.
SELECT-OPTIONS: so_conn FOR gv_connid.
**********************************************************************
*
* Eventhandler
*
**********************************************************************
CLASS lcl_events DEFINITION.

  PUBLIC SECTION.

    CLASS-METHODS:
      on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object
            e_interactive
            sender.

    CLASS-METHODS:
      on_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING
            e_ucomm
            sender.

    CLASS-METHODS:
      on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING
            er_data_changed
            sender.
ENDCLASS.

CLASS lcl_events IMPLEMENTATION.

  METHOD on_data_changed.
* geänderte Zellen durchgehen
    LOOP AT er_data_changed->mt_good_cells ASSIGNING FIELD-SYMBOL(<c>).
      IF <c> IS ASSIGNED.
* Zeile x aus der iTab it_spfli rausholen und daraus die Zelle anhand des Spaltennamens (Feldnamens) holen
        ASSIGN COMPONENT <c>-fieldname OF STRUCTURE it_spfli[ <c>-row_id ] TO FIELD-SYMBOL(<f>).

        IF <f> IS ASSIGNED.
* Änderungswert in die Zelle der iTab (it_spfli) rückschreiben
          <f> = <c>-value.
        ENDIF.
      ENDIF.

    ENDLOOP.

* DB Update
    FIELD-SYMBOLS: <tab> TYPE table.
    FIELD-SYMBOLS: <row> TYPE spfli.

    ASSIGN er_data_changed->mp_mod_rows->* TO <tab>.

    LOOP AT <tab> ASSIGNING <row>.
* DB Update hier
    ENDLOOP.

  ENDMETHOD.

  METHOD on_user_command.
* wenn BTN_REFRESH geklickt
    IF e_ucomm = 'BTN_REFRESH'.
      IF o_alv IS BOUND.
        SELECT * FROM spfli INTO TABLE @it_spfli
          WHERE carrid IN @so_carr
            AND connid IN @so_conn.

        sender->refresh_table_display( is_stable = VALUE lvc_s_stbl( row = abap_true
                                                                     col = abap_true )
                                       i_soft_refresh = abap_false ).
      ENDIF.
    ENDIF.
  ENDMETHOD.

  METHOD on_toolbar.
* alle Buttons entfernen, bis auf folgende:
    DELETE e_object->mt_toolbar WHERE
        function NE cl_gui_alv_grid=>mc_fc_refresh          " Refresh
    AND function NE cl_gui_alv_grid=>mc_mb_export           " Excel
    AND function NE cl_gui_alv_grid=>mc_fc_current_variant. " Layout

    LOOP AT e_object->mt_toolbar ASSIGNING FIELD-SYMBOL(<fs_button>) WHERE ( function = cl_gui_alv_grid=>mc_fc_refresh ).
* neues USER-Command setzen, damit bei Button-Klick on_user_command getriggert wird
      <fs_button>-function = 'BTN_REFRESH'.
    ENDLOOP.

  ENDMETHOD.
ENDCLASS.
**********************************************************************
*
* INITIALIZATION
*
**********************************************************************
INITIALIZATION.

* Vorbelegungen für Selektionsbild
  so_carr[] = VALUE #( ( sign = 'I' option = 'EQ' low = 'LH' ) ).

**********************************************************************
*
* AT SELECTION-SCREEN OUTPUT
*
**********************************************************************
AT SELECTION-SCREEN OUTPUT.

* Wenn vorher das Selektionsbild 1000 angezeigt wurde
  IF gv_screen_status = 'IN_SELECTION'.
* Daten holen
    SELECT * FROM spfli INTO TABLE @it_spfli
       WHERE carrid IN @so_carr
         AND connid IN @so_conn.
* ALV-Gitter anzeigen
    o_alv = NEW #( i_parent      = cl_gui_container=>default_screen
                   i_appl_events = abap_true ).

* Eventhandler registrieren
    SET HANDLER lcl_events=>on_toolbar FOR o_alv.
    SET HANDLER lcl_events=>on_data_changed FOR o_alv.
    SET HANDLER lcl_events=>on_user_command FOR o_alv.

* Ereignisse registrieren
    o_alv->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).
    o_alv->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).

* ALV-Grid selektionsbereit setzen
    o_alv->set_ready_for_input( i_ready_for_input = 1 ).

* Layout des ALV setzen
    DATA(lv_layout) = VALUE lvc_s_layo( zebra      = abap_true
                                        cwidth_opt = 'A'
                                        grid_title = 'Flugverbindungen' ).

* Feldkatalog automatisch durch SALV erstellen lassen
    DATA: o_salv TYPE REF TO cl_salv_table.

    cl_salv_table=>factory( IMPORTING
                              r_salv_table = o_salv
                            CHANGING
                              t_table      = it_spfli ).

    DATA(it_fcat) = cl_salv_controller_metadata=>get_lvc_fieldcatalog( r_columns      = o_salv->get_columns( )
                                                                       r_aggregations = o_salv->get_aggregations( ) ).

* im Feldkatalog alle Zellen der Spalte "CITYFROM" des ALV-Grids auf
* editierbar stellen, die restlichen Zellen sind nicht editierbar
    LOOP AT it_fcat ASSIGNING FIELD-SYMBOL(<fcat>).
      CASE <fcat>-fieldname.
        WHEN 'CITYFROM'.
          <fcat>-edit = abap_true.
        WHEN OTHERS.
          <fcat>-edit = abap_false.
      ENDCASE.
    ENDLOOP.

* ALV anzeigen
    o_alv->set_table_for_first_display( EXPORTING
                                          i_bypassing_buffer = abap_false
                                          i_save             = 'A'
                                          is_layout          = lv_layout
                                        CHANGING
                                          it_fieldcatalog    = it_fcat
                                          it_outtab          = it_spfli ).

* Drucktastenleiste: Button "Ausführen (F8)" entfernen
    DATA: it_exclude_btn TYPE STANDARD TABLE OF rsexfcode WITH DEFAULT KEY.
    it_exclude_btn = VALUE #( ( fcode = 'ONLI' ) ).

    CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
      EXPORTING
        p_status  = '%_00' " akt. Standard-PF-Status des Dypro 2000
      TABLES
        p_exclude = it_exclude_btn.

* leere SAP-Toolbar ausblenden
    cl_abap_list_layout=>suppress_toolbar( ).

* Focus auf ALV setzen
    cl_gui_alv_grid=>set_focus( control = o_alv ).

* Flag für Screen-Status auf ALV-Anzeige setzen
    gv_screen_status = 'IN_ALV'.
  ENDIF.
**********************************************************************
*
* START-OF-SELECTION
*
**********************************************************************
START-OF-SELECTION.

* Wir befinden uns im Anzeigebereich des Selektionsbildes
  gv_screen_status = 'IN_SELECTION'.

* Trick: leeren Dummy-Screen 2000 anzeigen und intern für das ALV-Grid in
* AT SELECTION-SCREEN OUTPUT als cl_gui_container=>default_screen nutzen
  CALL SELECTION-SCREEN 2000.
  ABAP, CALL SELECTION-SCREEN 2000, cl_gui_alv_grid, cl_gui_container, cl_salv_controller_metadata, cl_salv_table, data_changed, er_data_changed, get_aggregations, get_columns, get_lvc_fieldcatalog, lvc_s_layo, lvc_s_stbl, mc_evt_enter, mc_evt_modified, mc_fc_current_variant, mc_fc_refresh, mc_mb_export, mp_mod_rows, mt_good_cells, mt_toolbar, refresh_table_display, SELECT-OPTIONS, set_ready_for_input, set_table_for_first_display, toolbar, user_command. Lesezeichen.
[ABAP] ALV-Grid: Zugriff auf geänderte Tabellenzeilen
[Java] Java Date nach MS OADate konvertieren
  • Kategorien

    aufklappen | zuklappen
  • Neueste Beiträge

    • [ABAP] Editierbares SALV-Grid (IF_SALV_GUI_OM_EXTEND_GRID_API, IF_SALV_GUI_OM_EDIT_RESTRICTED)
    • [ABAP] Neues SAP-Fenster (Modus) öffnen und wieder schließen
    • [ABAP] Infos zu Datenelementen und Domänen lesen
    • [ABAP] Informationen zu einem Dynpro ermitteln
    • [ABAP] Installierte Softwarekomponenten ermitteln
    • [SAP] Ändern des SAP Easy Access Anmeldebildes (Einstiegsbild)
    • [ABAP] Eigenschaften einer Klasse prüfen
    • [ABAP] Element des Selektionsbiles über RadioButtons ein-/ausblenden
    • [ABAP] Transportauftrag als ZIP-Datei speichern
    • [ABAP] Objektliste zu Transportauftrag lesen
  • Archiv

  • Meta

    • Anmelden
    • Feed der Einträge
    • Kommentare-Feed
    • WordPress.org
  • Related Posts

    • [ABAP] ALV-Grid: Dropdown-Liste verwenden
    • [ABAP] ALV-Grid: Einfaches Beispiel zur Anzeige von Daten in einem ALV-Grid (cl_gui_alv_grid)
    • [ABAP] Interne Tabelle in einem ALV-Grid anzeigen, Spalten ausblenden
    • [ABAP] ALV-Grid als Property-Grid (Parametertabelle) mit Edit-Feldern und Typprüfung
    • [ABAP] ALV-Grid ohne Dynpro – Daten anzeigen, editieren und als CSV-Datei speichern
    • [ABAP] ALV-Grid als Property-Grid mit Tri-State Klickfeldern/Buttons (ON / OFF / UNDEF)
    • [ABAP] SALV-Table: Anzeige in einem DockingContainer, Einfügen von Buttons und Eventhandling
    • [ABAP] ALV-Grid: Zugriff auf geänderte Tabellenzeilen
    • [ABAP] ALV-Grid: Toolbar-Buttons entfernen
    • [ABAP] GUI-Simple-Tree und SALV-Grid in Split-Container ohne Dynpro anzeigen, Eventhandling
  • Tags

    ABAP (890) Android (18) CLASS (20) cl_abap_list_layout (19) cl_abap_matcher (13) cl_bcs_convert (17) cl_gui_alv_grid (23) cl_gui_container (36) cl_gui_docking_container (23) cl_gui_frontend_services (37) cl_salv_table (53) cntl_simple_event (16) create (28) DataGridView (13) Date (15) default_screen (28) display (14) EWM (16) Fiori (17) get_column (13) get_columns (22) gui_download (15) HTML (15) JavaScript (78) JSON (20) MIME (17) NEW (20) OData (29) OpenSQL (21) Python (23) Raspberry Pi (50) Raspberry Pi 2 (27) Raspberry Pi 4 (23) Raspian (22) RegEx (17) SAP (355) SAPUI5 (27) SELECT (25) String (33) stringtab (15) suppress_toolbar (19) UTF-8 (14) Value (26) XML (25) xstring (20)
(W) 2023 by codezentrale.de
Powered by Tempera & WordPress.