Editierbares ALV - EVENT data_changed

Benutzeroberflächen in SAP®-Systemen.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Editierbares ALV - EVENT data_changed

Beitrag von Alf (ForumUser / 8 / 0 / 0 ) »
Hallo zusammen,

beim Hantieren mit einem ALV - "cl_gui_alv_table" - bin ich auf folgende Fragestellung getroffen:

Ich initialisiere ein ALV mit zwei Spalten und zwei leeren Zeilen, die erste Spalte ist editierbar.
Bei Eingabe eines Wertes in ein Feld (Partner-Nr.) fange ich erfolgreich das Event "data_changed" ab.
Dort kann ich abhängig von der Eingabe in Spalte 1 die Spalte 2 mit Detaildaten zum Partner füllen.
Dann mache ich "refresh_table_display" mit is_stable auf true.
Das funktioniert auch soweit.

Das Problem taucht auf, wenn man per STRG-V mehr als zwei Zeilen (z.B. 4) auf einmal einfügt.
Damit wird auch "data_changed" ausgelöst.

Ursprünglich waren in der Anzeige dann nur zwei Zeilen vorhanden, beide mit den modifizierten Detaildaten.
In der Hintergrundtabelle der ALV-Daten sind aber 4 Einträge vorhanden, die letzten beiden dann aber ohne ergänzte Detaildaten.

Nachdem ich nun umgestellt habe und bei der Ereignisbehandlung die beiden zusätzlichen (zuvor nicht angezeigten) Zeilen 3 + 4 selbst in die Datentabelle einfüge (mit den zuvor ermittelten Detaildaten) werden zwar alle 4 Zeilen angezeigt, aber die Detaildaten in Zeile 3 + 4 bleiben leer:
21 [Mustermann/Köln]
45 [Meier-Müller/Berlin]
55 [ ]
78 [ ]
Bis zur Anzeige des ALVs ist die Datentabelle aber immer korrekt gefüllt.
Erst nach Anzeige fehlen die Detaildaten ab Zeile 3.

Jetzt hege ich den Verdacht, dass
- die angezeigten Felder nicht den Daten entsprechen, die ich eingefügt habe, Zeile 3+4 also eher aus dem Paste stammen,
- die falsche Art der Aktualisierung verwendet wird,
- eine grundsätzlich falsche Vorgehensweise gewählt wurde, oder
- ich da noch einen Denkfehler im Verständnis vom ALV habe ...

Wie ist denn das korrekte Handling für die Modifikation und Aktualisierung des ALVs?
Würdet Ihr eher ein User-Command auslösen/durchreichen anstatt auf Events zu reagieren?

Eigentlich dachte ich, ich hätte das ALV verstanden. Aber nach nun 2 Tagen rumprobieren und debuggen bin ich eher wieder ratlos :?

Danke und Gruß
Alf

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


Re: Editierbares ALV - EVENT data_changed

Beitrag von a-dead-trousers (Top Expert / 4412 / 224 / 1184 ) »
hi!

Eigentlich kannst du dir das manuelle "Einfügen" der Daten sparen.
Das ALV-Grid fügt neue Daten automatisch an die Tabelle an die du per SET_TABLE_FOR_FIRST_DISPLAY angegeben hast.
(Deswegen auch CHANGING-Parameter)
Du musst nur aufpassen, dass diese Datentabelle von allen Stellen in deinem Coding mit änderbarem Zugriff erreichbar ist. Also Vorsicht bei Methode und Importing-Parametern.

Bei den Events ist es vor allem wichtig, falls du versuchen solltest die Daten in der Datentabelle zu ändern, dass dies unbedingt NACHDEM das ALV seine Daten in die Tabelle geschrieben hat, geschehen sollte. (erkennbar an BEFORE... und AFTER... bei den EVENTS)
Ansonsten bietet das ALV in den Events bereits einige Mechanismen um die Daten zu manipulieren. Genaueres dazu kann ich erst morgen posten, wenn ich wieder in der Firma bin und vor dem Coding sitze ;)
Man kann aber auch händisch das Verspeichern der ALV Daten in die Datentabelle mit der Methode CHECK_CHANGED_DATA veranlassen.
Danach sollte man erst Manipulationen durchführen und schließlich mit REFRESH_TABLE_DISPLAY diese Änderungen wieder zur Anzeige bringen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Editierbares ALV - EVENT data_changed

Beitrag von Alf (ForumUser / 8 / 0 / 0 ) »
Hallo ADT,

danke soweit erst mal für die Anregungen.
Das scheint es aber nicht zu sein und ich habe aber immer noch folgendes Verständnisproblem:

Wenn ich dem editierbaren ALV über Copy/Paste zusätzliche Zeilen "unterjuble" werden diese (ohne weitere Eingriffe von mir)
1. nach "refresh_table_display" nicht mit angezeigt (nur die ursprünglichen) :x
2. nur angezeigt wenn ich mit "cl_gui_cfw=>set_new_ok_code( 'DUMMY' )" PAI/PBO auslöse
3. in der Datentabelle schon eingefügt, ich sehe sie ja auch im Debugger, und beim Auslösen eines Funktionscodes werden Sie mit verarbeitet.

Wenn ich Änderungen zum Event "data_changed" vornehme werden diese
- im Fall 1 für die angezeigten Zeilen ebenfalls übernommen und angezeigt
- im Fall 2 ignoriert

Es scheint also so zu sein, dass ich Manipulationen an den zusätzlichen Zeilen nur im PBO vornehmen kann.
Zumindest ist das jetzt erst mal der Ansatz den ich verfolgen werde :!:

Grüße
Alf
<INSERT CLEVER QUOTATION HERE>

Re: Editierbares ALV - EVENT data_changed

Beitrag von Alf (ForumUser / 8 / 0 / 0 ) »
Hallo zusammen,

für meinen Fall mit den zusätzlichen Zeilen durch Copy/Paste scheint die Lösung jetzt darin zu liegen:

1. zum Event "data_changed" löse ich PAI/PBO mit "cl_gui_cfw=>set_new_ok_code( 'DUMMY' )" aus
2. zum Event "data_changed_finished" fülle ich nun die abhängigen Spalten, nach "refresh_table_display" werden dann auch alle angezeigt.

Grüße
Alf
<INSERT CLEVER QUOTATION HERE>

Re: Editierbares ALV - EVENT data_changed

Beitrag von a-dead-trousers (Top Expert / 4412 / 224 / 1184 ) »
hi!

Dein Problem sind die Zeitpunkte an denen du versuchst einzugreifen:
- Bei "data_changed" stehen die Daten noch nicht in der Tabelle.
- Bei "data_changed_finished" stehen die Daten (wie du bereits bemerkt hast) in der Tabelle.
Ich würde also die ganze Verarbeitung lieber nur im Event "data_changed_finished" machen.
Wenn du wirklich, unbedingt, da fährt der Zug drüber, da gibt es keinen Weg drumherum das "data_changed" verwenden willst/musst, musst du hier das ER_DATA_CHANGED Objekt verwenden um Daten in deiner Tabelle zu ändern. Eine direkte Tabellenänderung führt eben zu dem von dir beschriebenen Problem.

Übrigens kannst du dir das "cl_gui_cfw=>set_new_ok_code( 'DUMMY' )" sparen. Verwende stattdessen lieber "check_changed_data" (Ist performanter).

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Editierbares ALV - EVENT data_changed

Beitrag von Alf (ForumUser / 8 / 0 / 0 ) »
Jau,
danke nochmal für die Hinweise.
Grüße
Alf
<INSERT CLEVER QUOTATION HERE>

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2369
Views
DATA-CHANGED-PROTOCOL vom ALV-Grid manipulieren
von Frog » 27.05.2008 21:31 • Verfasst in ABAP Objects®
17
Antw.
6176
Views
DATA OFFSET und DATA TRANSFER
von Littlered » 21.07.2005 16:01 • Verfasst in ABAP® Core
5
Antw.
1057
Views
Event startet Job, wie ein weiteres Event verarbeiten?
von Romaniac » 28.09.2022 15:47 • Verfasst in ABAP® Core
0
Antw.
1501
Views
WebDynpro: Event Handler für externes Event
von Tommy Nightmare » 20.06.2018 09:05 • Verfasst in ABAP Objects®
1
Antw.
2734
Views
Editierbares ALV - set_current_cell_via_id
von Alf » 05.04.2013 12:30 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 7 Stunden von msfox gelöst 7 / 6052
ABAP - Mail so10 Text
vor 12 Stunden von retsch 6 / 138
selection-screen comment mit icon
vor 21 Stunden von DeathAndPain 9 / 1177

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

Nach MESSAGE TYPE E Felder entsperren
vor 7 Stunden von msfox gelöst 7 / 6052
ABAP - Mail so10 Text
vor 12 Stunden von retsch 6 / 138
selection-screen comment mit icon
vor 21 Stunden von DeathAndPain 9 / 1177

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor 5 Tagen von Manfred K. 1 / 939
BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Wochen von snooga87 1 / 2749