Code: Alles auswählen.
report report.
data: gt_tabelle type table of irgendwas.
class lcl_events definition.
public section.
class-methods: on_double_click for event double_click of cl_salv_events_table
importing row
column
sender.
endclass.
class lcl_report definition.
public section.
methods mach_irgendwas.
endclass
class lcl_events implementation.
method on_double_click.
[Tabelle gt_tabelle[ row ] auslesen]
endclass.
class lcl_report implementation.
method mach_irgendwas.
cl_salv_table=>factory( importing r_salv_table = lr_table changing t_table = gt_tabelle ).
set handler lcl_events=>on_double_click for lr_table->get_event( ).
lr_table->display( ).
[...]
endclass.
data: gcl_report type ref to lcl_report.
initialization.
gcl_report = new lcl_report( ).
start-of-selection.
gcl_report->mach_irgendwas( ).
Gibt es dafür irgendwo Beispiele?a-dead-trousers hat geschrieben: ↑08.05.2023 08:02Besser wäre meines Erachtens aber die Funktionsweisen anderes aufzuteilen und ein klassisches MVC Model aufzubauen. Da werden die Anzeige (Grid und Eventhandling), die Daten (Selektion und Speicherung) und die Verarbeitung (Modifikation und Businesslogik) von einander getrennt in Klassen implementiert.
Die Aussage ist nicht korrekt. ZCL_EVENTS muss ZCL_REPORT kennen, aber nicht umgekehrt. ZCL_EVENTS arbeitet dann wie beim Command-Pattern und delegiert den Aufruf. Wenn hier mit statischen Methoden gearbeitet wird, was nur in Ausnahmefällen gemacht werden sollte ( aus Gründen wie Mocking für Test, Erweiterungen etc ), wird keine Instanz genutzt sondern nur der Aufruf delegiert an ZCL_Report.a-dead-trousers hat geschrieben: ↑08.05.2023 08:02
z.B.: Eine Methode ZCL_REPORT=>SHOW_DETAIL die von ZCL_EVENTS im Ereignis ON_DOUBLE_CLICK aufgerufen wird. Natürlich müssen dann beide Klassen eine Instanz des jeweils anderen kennen um miteinander kommunizieren zu können.