nun möchte ich auch meine Beitragsprämiere feiern :)
Folgendes Problem liegt vor:
Ich habe ein Dynpro mit 3 Docking Containern, in jedem von diesem befindet sich ein ALV-Control. Links angebracht ist ein Baum der Klasse cl_gui_alv_tree, in der Mitte und rechts davon zwei ALV-Grids.
Im Tree sind mehrere Unterbäume vorhanden in dem Sinne, als dass es mehrere Knoten gibt, deren Parentnode '&VIRTUALROOT' also der Wurzelknoten ist.
Wechselt der Anwender mittels Markierung zwischen diesen Unterbäumen, passt sich die Ausgabe in den ALV-Grids entsprechend eines durch den gerade markierten Knoten definierten Filterkriteriums an. Für dieses Verhalten ist das Event 'selection_changed' auf den Tree registriert.
Nun hatte ich vor, für eine spezifische Kategorie an hinzugefügten Blättern die Möglichkeit zu eröffnen, in die SE80 und in die die bei diesem Knoten hinterlegte Klasse abzuspringen (mittels Funktionsbaustein 'RS_TOOL_ACCESS').
Dazu wollte ich das Event 'link_clicked' auf den Baum registrieren.
Beim Ausführen des Programms tritt jedoch die Fehlemeldung 'lllegal Event Combination' auf.
Dies ist dem Umstand geschuldet, dass bei Instanziierung des Baumes der Parameter 'item_selection' für das 'selection_changed'-Event zwingend 'abap_false' sein muss. Für das 'link_clicked' (und auch andere wie 'checkbox_change') muss dies jedoch 'abap_true' sein.
Ich hoffe, dass ich gerade einfach ein Brett vorm Kopf habe und irgendwas noch fundamental falsch verstehe/ausführe, weil das wäre schon eine traurige Limitation. Die Funktion wäre echt super, sie läuft auch einwandfrei, wenn ich 'selection_changed' abstelle und 'item_selection' auf abap_true bei der Erzeugung des ALV-Treeobjekts stelle.
Das ganze ist Teil meiner Bachelorthesis und eher eine "Begeisterungsanforderung" als wirklich dringlich, interessiert an einer Lösung/einem Workaround wäre ich trotzdem.
Kurz gesagt:
SAP hat diese Möglichkeit ausgeschlossen und mir ist nichts bekannt wie man das umgehen könnte.
Das Problem hier ist (vermutlich), dass auch ein Link_Click im Grunde einen Selection_Changed auslösen kann und dass das Event-Handling im Control-Framework nicht dafür ausgelegt ist zwei Events gleichzeitig zu verarbeiten. Es gibt diesbezüglich übrigens auch in anderen Controls ähnliche Ausnahmen was das Registrieren von Ereignissen betrifft.
Ein Workaround wäre, alles auf den Link_Click zu legen. Man kann dann im Handler entscheiden, wenn der Klick auf Spalte (= Item) 1 erfolgt ist, dann erfolgt der Wechsel in der ALV-Grid Anzeige und bei Klick auf Spalte 2 erfolgt der Aufruf der Workbench.
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.
Alternativ könnte man auch mit rechtem und linken Mausklick arbeiten. Man kann neben Event SELECTION_CHANGED auch die Events NODE_CONTEXT_MENU_REQUEST und NODE_CONTEXT_MENU_SELECTED registrieren und diese zu alternativen Schandtaten verwenden . Sieht schick aus, wenn man abhängig vom Nodekey diverse Möglichkeiten via Kontextmenü anbieten kann.
P.S. Es gibt die Kontextmenüs auch für die Items, wenn man da dann noch genauer sein möchte.