Änderungen in ALV-Grid in dbtab schreiben

Getting started ... Alles für einen gelungenen Start.
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Hallo zusammen,

mit meiner Form-Routine "switch_edit_mode" setze ich die ALV-Grid-Darstellung in einen Editiermodus:

Code: Alles auswählen.

FORM switch_edit_mode.
*Use IS_READY_FOR_INPUT to fetch current substate of editable cells.
  IF lr_grid1->is_ready_for_input( ) EQ 0.
*Use SET_READY_FOR_INPUT to switch between the substates.
    CALL METHOD lr_grid1->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.
  ELSE.
    CALL METHOD lr_grid1->set_ready_for_input
      EXPORTING
        i_ready_for_input = 0.
  ENDIF.
ENDFORM.                               " SWITCH_EDIT_MODE
Um die editierten Zeilen zu erkennen habe ich folgendes eingebunden (Definition-Implementation wegen private/protected):

Code: Alles auswählen.

CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_data_changed
            FOR EVENT data_changed  OF  cl_gui_alv_grid
            IMPORTING er_data_changed sender.
ENDCLASS.                    "lcl_events DEFINITION

Code: Alles auswählen.

CLASS lcl_events IMPLEMENTATION.
  METHOD handle_data_changed.
    DATA: ls_good                TYPE lvc_s_modi."Alle Inhalte der geänderten Zellen in interne Tabelle schreiben
    LOOP AT er_data_changed->mt_good_cells INTO ls_good."Positionierung auf richtige Zeile in ITAB
      READ TABLE gt_tab ASSIGNING <gs_tab> INDEX ls_good-row_id.
      IF sy-subrc = 0."Das geänderte Feld dem Feldsymbol zuweisen
        ASSIGN COMPONENT ls_good-fieldname OF STRUCTURE <gs_tab> TO <gv_feld>.
        IF sy-subrc = 0."Feldwert zuweisen
          <gv_feld> = ls_good-value.
        ENDIF.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_events IMPLEMENTATION
Nach Anwendung der Methode "handle_data_changed" hat man also den konkreten geänderten Wert und die entsprechende Position.

Meine Frage an euch ist nun, wie ich diesen Wert in die dbtab update.
Über Codeschnipsel wäre ich sehr dankbar.

Bei Unverständlichkeiten bzw. weiterem Klärungsbedarf bitte direkt nachhaken.

Vielen Dank :)

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ich update Daten aus einem ALV oft erst dann ab, wenn der User den Save-Button drueckt, der auch nur dann aktiviert ist, wenn etwas geaendert wurde
oder ich setze mir ein globales Feld auf "Daten geaendert" = JA oder NEIN
oder ich setze mir einen Merker in die jeweilige geaenderte Zeile.
Kann auch farblich sein, dann sieht der User schon immer direkt welche Zeile er geaendert hat.

Oder ich fuehre eine zweite identische Tabelle von der original Tabelle aus der ich dann update.

Codeschnipsel: siehe Hilfe zu "update und modify"

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Vielen Dank für deine Antwort.

Das mit dem Save-Button macht auf jeden Fall Sinn und ist auch in meinem Interesse.
Ich würde mir einen Button über den Screen-Painter machen.

Kann man den Button irgendwie "deaktiviert" lassen und nur bei einer entsprechenden Änderung "aktivieren" ?

Ich habe ja einen entsprechenden "Merker" - also könnte ich über die row_id bzw. sy-tabix die entsprechende Zeile in der dbtab updaten.
Den Button binde ich dann natürlich über den Funktionscode ein.

Ich würde mich über eine Antwort freuen :)

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Nochmal etwas anderes dazu...

Code: Alles auswählen.

CLASS lcl_events IMPLEMENTATION.
  METHOD handle_data_changed.
    DATA: ls_good                TYPE lvc_s_modi."Alle Inhalte der geänderten Zellen in interne Tabelle schreiben
    LOOP AT er_data_changed->mt_good_cells INTO ls_good."Positionierung auf richtige Zeile in ITAB
      READ TABLE gt_tab ASSIGNING <gs_tab> INDEX ls_good-row_id.
      IF sy-subrc = 0."Das geänderte Feld dem Feldsymbol zuweisen
        ASSIGN COMPONENT ls_good-fieldname OF STRUCTURE <gs_tab> TO <gv_feld>.
        IF sy-subrc = 0."Feldwert zuweisen
          <gv_feld> = ls_good-value.
        ENDIF.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_events IMPLEMENTATION
Mein Coding funktioniert nun soweit, dass der Wert in die gt_tab geschrieben wird.
Ich möchte nun auf meine dbtab ein Update durchführen.
Dabei soll nur der veränderte Datensatz ersetzt, also überschrieben werden.
Dabei kann man sich ja nach ls_good-row_id richten.

Ich komme nicht auf die richtige Formulierung des Updates.
Könnt ihr mir helfen?

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Chilledkroete hat geschrieben: Ich komme nicht auf die richtige Formulierung des Updates.
Könnt ihr mir helfen?
Die richtige Formulierung, unter Programmierer auch Syntax genannt, findest Du in der <F1>-Hilfe fuer das Schluesselwort 'Update'.

Cursor im Program auf das Schluesselwort 'Update' setzen und dan die <F1> Taste druecken.

Hilft ueberigens fuer alle Schluesslwoerter im ABAP.,

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Die F1-Hilfe ist mit gut bekannt - vielen Dank ;)

Es geht mir z.B. darum, dass ich nicht von dem Feldsymbol updaten kann, weil es während des Updates nicht mehr mit der Struktur gefüllt ist.
Ich habe in meiner Methode das Feldsymbol in eine globale Struktur (gleichermaßen aufgebaut wie die dbtab) geschrieben.

also gs_tab_temp = <gs_tab>.

Als Update dann: UPDATE dbtab FROM gs_tab_temp.

Meine dbtab erhält trotz Datensatz innerhalb von gs_tab_temp kein Update.
Die Update-Funktion rufe ich dann übrigens über einen Funktionscode im PAI auf. (Deshalb ist das Feldsymbol auch nicht mehr gefüllt)

Deshalb meine Frage.

--- Ich weiß übrigens nicht, was du mit deiner Klugscheißerei erreichen willst. Ich dachte man hilft sich hier gerne ?!

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Chilledkroete hat geschrieben:Die Update-Funktion rufe ich dann übrigens über einen Funktionscode im PAI auf. (Deshalb ist das Feldsymbol auch nicht mehr gefüllt)

Deshalb meine Frage.

--- Ich weiß übrigens nicht, was du mit deiner Klugscheißerei erreichen willst. Ich dachte man hilft sich hier gerne ?!
In Deinem vorherigen Posting muss man davon ausgehen, dass Du das Update innerhalb der geposteten Formroutine vornimmst, weil Du bezug auf ls_good-row_id nimmst, dass lokal deklariert ist.

Auf einmal schreibst Du, dass Du das Update im PAI irgendwo anders durchfuehren willst.

Hellsehen kann ich noch nicht, also antworte ich auf Fragen soweit mir die Informationen bekannt sind.

Ich helfe auch gerne, aber ich ueberneheme hier nicht das Coding fuer Dich.

Wenn Du nichts lernen willst sondern nur Loesungen haben willst, bist Du bei mir an der falschen Adresse.

Re: Änderungen in ALV-Grid in dbtab schreiben

Beitrag von Chilledkroete (ForumUser / 42 / 5 / 0 ) »
Ich habe mich mit der Erwartung hier angemeldet durchaus etwas zu lernen.
Es geht mir bei dem Posting eines Problems bestimmt nicht daraum eine vollständige Lösung zu erhalten.

Ich bin wirklich dankbar, dass sich hier jemand (wie z.B. du) meinem Problem anvertraut.

Dabei gebe ich mir viel Mühe mein Problem gut verständlich zu posten.
Dass das nicht immer gelingt zeigt noch lange keine Unfähigkeit.

Es wäre dann vielleicht nicht verkehrt nochmal etwas genauer nachzuhaken.

Was mein Problem betrifft, ist es nach wie vor so, dass ich das Update innerhalb eines Funktionscodes im PAI durchführen möchte.
Mittlerweile habe ich dieses Problem selbst gelöst.

Wie in meinem vorherigen Post bereits beschrieben, lag mein Fehler in der Annahme weiterhin auf den Inhalt des Feldsymbols zugreifen zu können.
Das ist natürlich falsch!

Mit der Wertübergabe innerhalb der Methode, die die Wertänderung im ALV-Grid via Event erkennt,
kann ich nun ein Update von einer globalen Struktur in die dbtab durchführen.

gs_temp = <gs_tab>.

Trotzdem vielen Dank.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2648
Views
15
Antw.
12180
Views
ALV Grid - Ändern ermöglichen und Änderungen erkennen
von Otscho » 12.07.2007 15:10 • Verfasst in Dialogprogrammierung
3
Antw.
2696
Views
OO-ALV-Grid: weitere Änderungen werden nicht gespeichert
von Jura » 21.02.2007 19:18 • Verfasst in ABAP® für Anfänger
1
Antw.
926
Views
*dbtab als Workarea
von Robertli » 12.07.2005 09:45 • Verfasst in ABAP® Core
6
Antw.
9954
Views
DELETE * FROM DBTAB
von Timo7 » 27.10.2006 11:36 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 75

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 75

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 132
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 166