Dem ALV Änderungen an anderen Zeilen "mitteilen"

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
16 Beiträge • Seite 1 von 2 (current) Nächste
16 Beiträge Seite 1 von 2 (current) Nächste

Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Hallo,

bei dieser Sache werde ich wohl dauerhaft Verständnisprobleme haben:

In einem ALV (CL_GUI_ALV_GRID) erlaube ich Änderungen an bestimmten Zellen. Klappt auch gut, DATA_CHANGED wird durch Usereingabe ausgelöst, die Änderungen können angezeigt/gespeichert werden.

Abhängig von den Änderungen des Users an einer Zeile möchte ich andere Zeilen ändern. Wie muss ich diese Änderungen aus dem Programm heraus dem ALV mitteilen?

Ciao
Burkhart

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


Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also im Event Handler für data_changed bzw. data_changed_finished bekommst du die geänderten Daten übergeben in einer Tabelle Feld für Feld zeile für Zeile - na ja und wenn du an weiterer Stelle noch Änderungen machen willst, dann müsstest du dort die Werte eintragen - wenn Flag modified = abap_true
Gruss

.. bei data_changed Handler könntest du auch schon eingreifen - denn dort bekommst du eine Reference auf CL_ALV_CHANGED_DATA_PROTOCOL und da hat es dann die Methode um andere Werte zu setzen - get_cell_value -> prüfen welches Feld und dann modify_cell - abhängig dann ein anderes Feld neu setzen

Gruss

Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Nordlicht

thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Da war ich ein wenig voreilig. So ganz verstanden habe ich es noch nicht:

Ich ändere iTab-Daten im Verlauf der Methode HANDLE_USER_COMMAND. Nun will ich nach den Änderungen (die ja auf keiner Usereingabe beruhen) den Status 'Daten wurden geändert' setzen. Wie rufe ich denn von hier aus die Methode DATA_CHANGED auf?

Ciao
Burkhart

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
sali,

also du änderst z.Bsp. in Zeile 3 Feld 1 und willst davon abhängig in dieser Zeile auch Feld 5 ändern - richtig ?
Oder änderst Zeile 3 und willst Daten in Zeile 5 ändern ?

Was ist dein Begehr ? Bitte mal noch Details dazu - aber das Prinzip ist dasselbe - mehr später ...

Gruss
thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Eigentlich trifft beides zu.

Konkret sind es hier zB. 10 Zeilen einer iTab die eine Ordnungsnummer haben. Jetzt füge ich eine weitere Zeile ein was zu einer neuen Durchnummerierung führt. Es ändern sich also - ohne Usereingabe - alle 10 + 1 Zeilen.

Hilft Dir das?

Ciao
Burkhart

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also muss ja nur die Ordnungsnummer um 1 erhöht werden beim einfügen richtig ?

Gruss
thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von ST22 (Specialist / 277 / 41 / 40 ) »
Hallo Burkhart,
wenn ich das richtig verstehe erlaubst du dem Anwender gewisse Zellen zu ändern und willst davon unabhängig Daten im Programm an deiner internen Tabelle ändern?
Rufst du denn nach dem programminternen Ändern die Methode REFRESH_TABLE_DISPLAY auf?
Oder willst du den Anwender noch zu weiteren Aktionen "zwingen"?

Gruß
Frank

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Das ist korrekt. Der Anwender kann eine Zeile einfügen und dort einige zusätzliche Felder füllen. Abhängig von den Eingaben muss ich dann vom Programm aus andere Zeilen ändern. Mindestens aber deren Ordnungsnummer. Anschließend führe ich ein REFRESH_TABLE_DISPLAY aus. Mir fehlt jetzt nur die korrekte Reaktioon des Programmes: Es wurden ja Daten geändert. Also müsste ja beim Verlassen dem Programm auffallen, dass Daten geändert wurden. Das passiert aber nicht.

Wenn ich eine vorhandene Zeile ändere und ohne Speichern rausgehe schlägt das Programm wunschgemäß Alarm. Aber meine Änderungen aus dem Programm heraus bewirken das nicht.

Ciao
Burkhart

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also so richtig stehst du noch nicht hinter dem ALV OO oder ? Aber kein Problem - die Ordnungsnummer musst du ja nur für die neue Zeile um 1 erhöhen gegenüber der letzten Ordnungsnummer in deiner Tabelle. Im Event Handler Data_changed_finished bekommst du die Info das Daten geändert wurden (welche Zeile & welche Felder) - soweit so gut . Wenn du die Ordnungsnummer selber vergibst und diese nicht durch den Anwender erfolgt (wovon ich hier ausgehe) - dann ist es ja so - wenn du deine interne Tabelle liest mit dem Index der geänderten Zeile - stellst du ja fest - ist die ON leer = neue Zeile oder schon gefüllt = vorhandene Zeile. Im Fall 1 musst du aus deiner int. Tabelle die letzte Ordnungsnummer ermitteln 1 drauf addieren und dann hast du das Ergebnis. jetzt schreibst du in die Tabelle der Methode mit den geänderten Daten ct_goodcells - einen neuen Eintrag - mit dem Index der neuen Zeile in deiner int. Tabelle, dem Feldname und den Wert dazu und dann rufst du die Methode refresh_table_display.
Wenn die ON schon gefüllt ist musst du ja an dieser nichts ändern - also reichen die geänderten Daten die in der ct_goodcells stehen
Das ganze machst du aber nur - wenn der Parameter e_modified = abap_true ist = Daten modifiziert und wenn in deinem Programmablauf du einmal an diesen Punkt kommst, dass dieser Parameter = X ist - dann hast du die Info, dass etwas geändert wurde und somit kannst du dann später im Programm reagieren - wenn du es verlassen willst oder wo du nun darauf reagieren willst.
Vielleicht hilft das ja etwas

Gruss
thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Danke Dir. Da werde ich mich mal durchwuseln ... Und OO ist tatsächlich bei mir ein bleibendes 'Oh Oh'!

Ciao
Burkhart
;-)

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Hallo Jens,

leider komme ich nach wie vor nicht weiter.

Ich verwende im ALV einen eigenen Button für 'Zeile hinzufügen'. Die Stndardbuttons habe ich allesamt deaktiviert. Per SET HANDLER ... habe ich dem ALV die Methoden HANDLE_USER_COMMAND und HANDLE_DATA_CHANGED_FINISHED zugewiesen. Der Button wird also per HANDLE_USER_COMMAND verarbeitet. Im Ablauf passiert derzeit Folgendes:

- User klickt auf Button
- Event DATA_CHANGED_FINISHED wird ausgelöst (zu meiner Verblüffung) und durch HANDLE_DATA_CHANGED_FINISHED behandelt.
- Event USER_COMMAND wird ausgelöst und durch HANDLE_USER_COMMAND behandelt.
- Im HANDLE_USER_COMMAND wird die iTab des Grids durch eine neue Zeile ergänzt und die Inhalte der anderen Zeilen geändert.
- Abschließend rufe ich REFRESH_TABLE_DISPLAY auf.
- Methode HANDLE_USER_COMMAND ist beendet.

Zu keinem Zeitpunkt sind die Parameter e_modified und/oder et_good_cells gefüllt. Und in der Methode HANDLE_USER_COMMAND habe ich keinen Zugriff darauf. Offenbar müsste ich ja vor meinem REFRESH_TABLE_DISPLAY noch irgendeine methode aufrufen. Da hapert's allerdings.

Nach wie vor Brett vorm Kopf :-(

Hast Du eine Idee?

Ciao
Burkhart

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

event_data_changed - e_modified = X -> hast du das geprüft - denn nur wenn = X dann hast du in der übergebenen tabelle auch etwas drin stehen
hast du die Edit events registriert -> schau dir Methode -> register_edit_event an dazu
warum hast du alle Buttons ausgeblendet und nicht den Stanbdard einfüge Button drin gelassen - da brauchst du dich um einiges nicht selber kümmern

gruss

Schau dir auch mal die Programme BCALV_EDIT_.. dazu an - dann wird einiges auch klarer

Gruss
thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Hallo.

Vielen Dank mal zwischendurch für Deine Geduld ;-)

Die Edit-Events habe ich registriert. Eine Änderung einer vorhandenen Zeile wird auch tadellos bemerkt.
Den eigenen Button verwende ich um den Ablauf mal richtig zu begreifen. Es funktioniert ja auch prächtig bis auf die Tatsache, dass ich anschließend beim Verlassen des ALV nicht vor dem Datenverlust gewarnt werde weil der ALV nicht weiß, dass etwas geändert wurde.

Nach Klick auf meinen 'Neue Zeile' Button erscheint (wunschgemäß) ein kleines Popup mit den drei Schlüsselfeldern als Eingabemaske. Diese Werte schreibe ich dann in die neue Zeilenstruktur, füge die in die iTab ein und mache den Table-Refresh. Klappt alles super. Nur eben ohne Wissen des ALV.

Mir ist nicht klar, in welchem Moment (Event) ich die Änderungen in die Methodenparameter eintragen kann da ich sie in meinem Ablauf nicht NACH meinen Änderungen patchen kann.

Ciao
Burkhart

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

wann soll denn die Sicherheitsabfrage kommen - wenn du über den Standard PF Status Grün / Gelb / Rot Button im Menü ?

Gruss
thanks Jens

Re: Dem ALV Änderungen an anderen Zeilen "mitteilen"

Beitrag von Nordlicht (Specialist / 304 / 8 / 3 ) »
Genau. Beim Verlassen des Grids via Grün/Gelb/Rot. Zeilenänderungen vorhandener Zeilen durch den User werden dann auch korrekt im Ereignis DATA_CHANGED erkannt. Meine Änderungen aus dem Programm heraus leider nicht.

Vergleichbare Themen

11
Antw.
10920
Views
ALV: Zeilen sperren/löschen, Änderungen nach DDIC, etc.
von Spaulding » 26.10.2005 14:45 • Verfasst in ABAP Objects®
2
Antw.
1574
Views
Änderungen 4.6C -> 4.7
von Chrisu » 23.08.2004 11:35 • Verfasst in SAP - Allgemeines
1
Antw.
1603
Views
Änderungen in Infotypen
von mamba » 23.04.2007 14:02 • Verfasst in Human Resources
1
Antw.
1508
Views
Änderungen Vertriebsbelegposition
von BerndSchweiger » 06.09.2017 14:04 • Verfasst in Sales and Distribution
3
Antw.
1565
Views
Änderungen der Datenbank
von SAP_ENTWICKLER » 07.12.2018 06:24 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Updates der Daten, Fehlermeldung
vor 22 Stunden von Egzon gelöst 1 / 49
Wie benutze ich COMMIT WORK richtig
vor 2 Tagen von msfox 17 / 430

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

Updates der Daten, Fehlermeldung
vor 22 Stunden von Egzon gelöst 1 / 49
Wie benutze ich COMMIT WORK richtig
vor 2 Tagen von msfox 17 / 430

Unbeantwortete Forenbeiträge

Updates der Daten, Fehlermeldung
vor 22 Stunden von Egzon 1 / 49
Zwischensumme Adobe Forms
vor 5 Wochen von Lucyalison 1 / 269
Group Items auf einer Filterbar
letzen Monat von Bright4.5 1 / 321