Der Frontend wird entsprechend auch aktualisiert. Rufe ich die Methode get_checked_items auf, bekomme ich alle markierten Knoten zurück.
Jetzt habe ich noch eine Toolbar-Funktion 'Alle markieren', bei der ich alle Blätter ermittle und diese zwei Methoden (s.o.) anwende. Allerdings wird weder der Frontend aktualisiert, noch bekomme ich die Knoten beim Aufruf der Methode get_checked_items zurückgeliefert. Was mache ich falsch bzw. was läuft hier anders als bei dem Event on_checkbox_change ??? Danke und Gruss
ja das hatte ich ausprobiert. Mittlerweile ist das Problem gelöst. Das Event on_checkbox_change macht etwas mehr (leider nirgends dokumentiert - könnte man vielleicht durch System-Debugging rausbekommen). Ich bin anders draufgekommen.
Die Lösung sieht folgendermassen aus:
* layout structure is different !!!
LOOP AT lt_item_layout INTO wa_item_layout.
CLEAR wa_item_layout2.
MOVE-CORRESPONDING wa_item_layout TO wa_item_layout2.
wa_item_layout2-chosen = p_checked.
wa_item_layout2-u_chosen = 'X'. " Update Flag
APPEND wa_item_layout2 TO lt_item_layout2.
ENDLOOP.
* change node with new layout for item
CALL METHOD g_alv_tree->change_node
EXPORTING
i_node_key = leaf_node_key
i_outtab_line = wa_outtab
it_item_layout = lt_item_layout2.
Während beim event diese geänderten Item-Layout Infos erzeugt und übergeben werden, muss man sie ohne Event selbst erzeugen. Blöderweise sind die Strukturen der Tabelle it_item_layout in den Methoden auch noch unterschiedlich (deshalb das Mapping).
Zum Schluss dann noch folgender Aufruf:
* send updatet tree information to frontend
CALL METHOD g_alv_tree->frontend_update.
Ich habe eine "Alles Markieren" funktion wie oben beschrieben in mein Programm eingebaut. Jetzt habe ich da aber noch ein paar Problem zu denen ich für jede Hilfe dankbar wäre.
1. Die Funktion alle markieren funktioniert nur, wenn alle Knoten noch nicht geöffnet wurden. Kann ich da was machen, damit es auch bei geöffneten Knoten funktioniert? Im Moment wird ein Dump erzeugt.
2. Ich habe versucht die gleichen Methoden für ein "Alle deselektieren" Button zu verwenden. Habe dabei die CHOSE-Parameter auf initial zurück gesetzt und danach den Frontendupdate gemacht. Leider leert er die Chackboxen in meinem Tree nicht. Kann mir jemand einen Tip zum deselektieren geben?