ALV TREE in Klasse rufen und auf Ereignisse reagieren

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

ALV TREE in Klasse rufen und auf Ereignisse reagieren

Beitrag von Ingo (ForumUser / 46 / 20 / 0 ) »
Hallo zusammen,

ich habe gerade folgendes Problem und hoffe, Ihr habt einen Tipp für mich:

Mein Programm erstellt zwei Instanzen von eigenen globalen Klassen. Die eine Instanz ist die "Modellklasse", die sich um die Daten kümmert, die andere die "Viewklasse" die später die Daten aufnimmt und - je nach Auswahl auf dem Selektionsbild - einen SALV (cl_salv_table) oder SALV-Tree (cl_salv_tree) aufruft.

Ich möchte auf das Ereigniss Double-Click reagieren und einen Absprung in eine Einzelpostenliste integrieren. Dafür habe ich in der globalen Viewklasse unter den lokalen Definitionen/Implementierungen eine lokale Ereignisklasse bekannt gemacht und definiert. Das klappt soweit gut, nur leider habe ich bei Auslösen des Ereignis kein Zugriff auf meine Attribute (da hier noch nicht bekannt). EXPORT...MEMORY löst mein Problem nicht, da der Tabellentyp zum Tree (salv_t_nodes) Referenzen enthält.

Ich hoffe, mein Problem ist verständlich geschildert. Habt Ihr eine Idee wie ich das lösen könnte?
Save a tree - eat a beaver

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


Re: ALV TREE in Klasse rufen und auf Ereignisse reagieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Warum definierst du eine lokale Ereignisklasse wenn du doch bereits eine Klasse hast die du als "View" verwendest? Ereignisbehandlermethoden kann man auch in einer regulären Klasse (z.B. private, damit sie von außerhalb nicht einsehbar sind) defnieren.

Und eine kleine Anmerkung zu deinem Klassendesign:
Ich würde nicht die View-Klasse entscheiden lassen welche Anzeige (Tree oder Grid) verwendet werden soll. Stattdessen würde ich mehrere Viewklassen anlegen (spezialisiert entweder auf Tree oder Grid) und im Controller (Programm oder Klasse) eine Entscheidung implementieren welche der Viewklassen instanziert werden soll.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 2):
IngoIcke0801

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: ALV TREE in Klasse rufen und auf Ereignisse reagieren

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ingo hat geschrieben:
18.06.2019 08:59
nur leider habe ich bei Auslösen des Ereignis kein Zugriff auf meine Attribute (da hier noch nicht bekannt).
Welche Attribute meinst du?

Re: ALV TREE in Klasse rufen und auf Ereignisse reagieren

Beitrag von Ingo (ForumUser / 46 / 20 / 0 ) »
Hi zusammen,

@ewx: Danke für Deine schnelle Hilfe. Ich muss gestehen, ich mache bzw. habe sehr selten Ereignisse benötigt oder eingesetzt. Dank Deinem Hinweis läuft es jetzt. Die Aufgabe ist "historisch gewachsen" und soll jetzt so langsam fertig werden. Aufsplitten in mehrere View-Klassen kann ich jetzt leider nicht mehr...

Der Aufruf im Programm erfolgt so:

Code: Alles auswählen.

* Datenbeschaffung für selektierten Bericht (je nach ausgwählten Bericht entsprechende Selektionen)
  go_report_controller->start_report( ).

* Ausgabe
  IF p_rb11 = 'X'.
    go_report_controller->display_alvtree( ).
  ELSEIF p_rb12 = 'X'.
    go_report_controller->display_alvgrid( ).
  ELSEIF p_rb13 = 'X'.
    go_report_controller->display_report2excel( ).
  ENDIF.
Ich hatte seinerzeit alles in eine Viewklasse implementiert. Vielleicht hast Du ja ein paar Tipps (Links, Literaturhinweise) bzgl. Klassendesign und OO-Reporting.

@Enno: Ich meinte Attribute wie z.B. die Output-Tabelle für das ALV-Grid oder das Objekt mo_salv_node (cl_salv_nodes), die ich nach dem Ereigniss "double_click" behandeln wollte. Als ich den Ansatz mit der lokalen Ereignisklasse versucht habe, waren diese in der Methode entsprechend nicht bekannt.

Beste Grüße
Save a tree - eat a beaver

Re: ALV TREE in Klasse rufen und auf Ereignisse reagieren

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Bei zevolving.com gibt es gute objektorientierte Beispiele.

Ansonsten ist es schwierig, dir Tipps zu geben, ohne zu wissen, wie das gesamte Programm aussieht.

Prinzipiell hätte ich aber deine Reportklasse so aufgebaut, dass die Daten an das entsprechende Objekt zur Darstellung übergeben wird.

also z.B.

Code: Alles auswählen.

DATA(go_alv_darstellung) = NEW #( report_data ).
go_alv_darstellung->display( ).
Um da noch ein objektorientertes Stichwort einzubringen: INTERFACE.

Der Report-Controller muss ja gar nicht wissen, welche Objekte es gibt.

Du kannst ein Interface definieren, dass nur die Methode DISPLAY hat.
Die drei unterschiedlichen Klassen zur Darstellung implementieren dieses Interface.

Dann muss es eine Klasse geben, die anhand der Kennzeichen die entsprechende Klasse zurück liefert.

Code: Alles auswählen.

DATA display_object TYPE REF TO my_display_interface.
display_object = zcl_display_controller=>get_grid_object( ).
display_object->show( mydata ).
Alles, was die Eventsteuerung angeht, muss natürlich in der jeweiligen Anzeigeklasse passieren.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Ingo


Seite 1 von 1

Vergleichbare Themen

0
Antw.
745
Views
Tree: Reagieren auf doppelklick
von khb » 26.06.2015 10:55 • Verfasst in ABAP® für Anfänger
6
Antw.
3564
Views
Table_control und Ereignisse
von christian123 » 05.02.2008 14:15 • Verfasst in Dialogprogrammierung
1
Antw.
1673
Views
events - seltsame Ereignisse
von Grayhound » 20.03.2007 14:47 • Verfasst in ABAP Objects®
4
Antw.
3004
Views
Abap Objekt Ereignisse
von msentaburlar » 06.02.2020 14:26 • Verfasst in ABAP® für Anfänger
0
Antw.
854
Views
digitale Signatur als FB rufen
von flashback » 24.11.2005 09:58 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.