Hi ABAP-Freunde!
Ich nutze die Klasse CL_SALV_TREE um einen Baum darzustellen, der Überordner und Ordner-Items enthält. Alle Objekte des Baums haben eine Checkbox. Wenn ich eine Checkbox bei einem Überordner anhake, dann nutze ich das Event ON_CHECKBOX_CHANGE, um alle Unterknoten auch anzuhaken. Mein Problem wird dann schlimmer, wenn es viele Unterknoten gibt: Es dauert dann einige Sekunden, bevor alle Unter-Checkboxen angehakt sind. Das Problem tritt aber auch auf, wenn ich nur ein Item anhake und es hat wohl nichts damit zu tun, dass ich alle Unterknoten anhake. Mir ist aufgefallen, dass das Dynpro dann auch eine kleine Bewegung macht. Eine Spalte wird erst breiter und dann wieder schmaler. Auch bei einem Item dauert es bestimmt eine halbe Sekunde bis das Dynpro zur Ruhe kommt.
Ich habe das Ganze mal gedebuggt. Die lange Laufzeit entsteht dann, wenn gar kein Code mehr ausgeführt wird Hat jemand eine Idee, an was das liegen könnte?
Edit sagt: Beim Abhaken der Checkboxen dauert es auch länger.
Das sind die ganzen Operationen die im Tree-Control (OCX) auf dem Client ausgeführt werden müssen.
Ich weiß jetzt leider nicht wie der SALV-Tree funktioniert, aber vom "normale" Tree-Control (und Model) weiß ich, dass man das Control auch vor "vollendete" Tatsachen stellen kann und alle Operationen (Einfügen, Ändern, Löschen) einmal als Tabelle übergeben kann und dann ist die Verarbeitung auch um einiges schneller als für jeden Knoten extra das auf-/zuklappen zu durchlaufen.
lg ADT
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.
Hmm....aber ich hab dem SALV_TREE doch alle Daten übergeben. Er steht ja bereits vor vollendeten Tatsachen, denn die lange Laufzeit startet ja erst, wenn er - so wie es nach Deiner Erklärung scheint - auf dem Client neu rendert. Oder ist das so zu verstehen, dass ich ihm quasi sage, dass er auf dem Client nur x,y und z neu rendern muss?
sapperlot22 hat geschrieben:Oder ist das so zu verstehen, dass ich ihm quasi sage, dass er auf dem Client nur x,y und z neu rendern muss?
Genau!
Leider weiß ich nicht, wie man das beim SALV macht und ob das überhaupt möglich bzw. nötig ist (weil das SALV das evtl. schon von sich aus macht)
Schau mal mit dem Debugger nach wann und vorallem wie der SALV folgende Methoden aufruft:
CL_ITEM_TREE_CONTROL=>UPDATE_NODES_AND_ITEMS
CL_ITEM_TREE_CONTROL=>ADD_NODES_AND_ITEMS
Wenn hier immer ALLE Items/Nodes übergeben werden, ist irgendwas faul. Entweder ist der SALV nicht auf Performance ausgelegt oder du hast in deinem Coding etwas eingebaut, was dazu führt, dass jedes Mal der gesamte Tree neu aufgebaut werden muss.
lg ADT
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.