DATA: it_mara TYPE STANDARD TABLE OF mara. CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive. CLASS-METHODS: on_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed sender. CLASS-METHODS: on_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Toolbar-Buttons hinzufügen: * butn_type Bezeichung * 0 Button (normal) * 1 Menü + Defaultbutton * 2 Menü * 3 Separator * 4 Radiobutton * 5 Auswahlknopf (Checkbox) * 6 Menüeintrag METHOD on_toolbar. * Separator hinzufügen APPEND VALUE #( butn_type = 3 ) TO e_object->mt_toolbar. * Edit-Button hinzufügen APPEND VALUE #( butn_type = 5 text = 'Edit' icon = icon_change_text function = 'EDIT_DATA' quickinfo = 'Editieren' disabled = ' ' ) TO e_object->mt_toolbar. * Speichern-Button hinzufügen APPEND VALUE #( butn_type = 5 text = 'Speichern' icon = icon_system_save function = 'SAVE_DATA' quickinfo = 'Speichern' disabled = ' ' ) TO e_object->mt_toolbar. ENDMETHOD. 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_mara rausholen und daraus die Zelle anhand des Spaltennamens (Feldnamens) holen ASSIGN COMPONENT <c>-fieldname OF STRUCTURE it_mara[ <c>-row_id ] TO FIELD-SYMBOL(<f>). IF <f> IS ASSIGNED. * Änderungswert in die Zelle der iTab (it_mara) rückschreiben <f> = <c>-value. ENDIF. ENDIF. ENDLOOP. ENDMETHOD. * Benutzerkommandos behandeln METHOD on_user_command. CASE e_ucomm. * Daten speichern WHEN 'SAVE_DATA'. DATA: lv_action TYPE i. DATA: lv_filename TYPE string. DATA: lv_fullpath TYPE string. DATA: lv_path TYPE string. * FileSave-Dialog aufrufen TRY. cl_gui_frontend_services=>file_save_dialog( EXPORTING default_extension = 'txt' file_filter = |TXT (*.txt)\|*.txt\|{ cl_gui_frontend_services=>filetype_all }| prompt_on_overwrite = abap_true CHANGING filename = lv_filename " Dateiname path = lv_path " Pfad fullpath = lv_fullpath " Pfad + Dateiname user_action = lv_action ). " Benutzeraktion IF lv_action EQ cl_gui_frontend_services=>action_ok. * iTab nach CSV konvertieren und speichern cl_icf_csv=>request_for_write_into_csv( it_data = it_mara iv_hdr_struct_name = 'MARA' iv_init_dir = lv_path iv_file_name = lv_filename ). MESSAGE 'Daten erfolgreich gespeichert.' TYPE 'I'. ENDIF. CATCH cx_root INTO DATA(e_text). " Oberklasse für Exceptions abfangen und Kurztext übergeben MESSAGE e_text->get_text( ) TYPE 'I'. " Exception Kurztext ausgeben ENDTRY. * Editmodus umschalten WHEN 'EDIT_DATA'. DATA: it_fcat TYPE lvc_t_fcat. DATA: lv_edit TYPE abap_bool VALUE abap_false. * Feldkatalog holen sender->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = it_fcat ). IF lines( it_fcat ) > 0. lv_edit = it_fcat[ 1 ]-edit. ENDIF. CASE lv_edit. WHEN abap_true. lv_edit = abap_false. WHEN OTHERS. lv_edit = abap_true. ENDCASE. * im Feldkatalog alle Zellen des ALV-Grids auf editierbar stellen LOOP AT it_fcat ASSIGNING FIELD-SYMBOL(<fcat>). <fcat>-edit = lv_edit. ENDLOOP. * Feldkatalog zurückgeben sender->set_table_for_first_display( CHANGING it_fieldcatalog = it_fcat it_outtab = it_mara ). ENDCASE. ENDMETHOD. ENDCLASS. START-OF-SELECTION. SELECT * FROM mara INTO TABLE it_mara UP TO 100 ROWS. DATA(o_alv) = NEW cl_gui_alv_grid( 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. o_alv->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ). * ALV-Grid selektionsbereit setzen o_alv->set_ready_for_input( i_ready_for_input = 1 ). DATA(lv_layout) = VALUE lvc_s_layo( zebra = abap_true cwidth_opt = 'A' grid_title = 'Editierbares ALV-Gitter ohne extra Dynpro' ). o_alv->set_table_for_first_display( EXPORTING i_bypassing_buffer = abap_true i_save = 'A' is_layout = lv_layout i_structure_name = 'MARA' CHANGING it_outtab = it_mara ). cl_gui_alv_grid=>set_focus( control = o_alv ). cl_gui_cfw=>flush( ). * leere Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Listenausgabe für cl_gui_container=>default_screen erzwingen WRITE: space.
Kategorien
-
Neueste Beiträge
- [CDS-Views] Fehler “Referenzinformationen fehlen oder falscher Datentyp” beheben
- [CDS-Views] Dynamische Befüllung von Variablen / Labels
- [ABAP] Daten einer Internetseite als interne Tabelle bereitstellen
- [ABAP] Transliteration von Texten
- [ABAP] UTC-Zeitstempel nach POSIX-Standard
- [RAP] ODATA V4 Service und Fiori Elements App implementieren
- [ABAP] Übernahme von Dokumenteninfosätzen beim Anlegen von Einkaufsbelegen unterdrücken
- [ABAP] OpenSQL: Stringfunktionen
- [ABAP] OpenSQL: NULL-Indicator zum Anzeigen von leeren Rückgabemengen
- [ABAP] OpenSQL: Set-Indicator für das Aktualisieren von Spalten