Cursor setzen im ALV Tree (CL_SALV_TREE)

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Cursor setzen im ALV Tree (CL_SALV_TREE)

Postby Angelie88 » Thu Aug 23, 2012 12:49 pm

Hallo Zusammen,

habe ein kleines Problem! Ich bastle gerade an einer Dialogtransaktion, links ist ein Tree, wo ein Datensatz ausgewählt werden kann. Rechts erscheint dann der Datensatz im Detail!

Jetzt kann es passieren, das der aktuell ausgewählte Datensatz in dieser Anwendung geändert wird. Wenn dann der Anwender jetzt einen anderen Datensatz aus dem Baum auswählt, erscheint eine Meldung "Datensatz wurde nicht gespeichert, möchten Sie ohne Speichern fortfahren".
Jetzt zum Problem, wenn der Anwender auf NEIN klickt, soll zum letzten Datensatz zurückgesprungen werden, daher soll der "alte" Datensatz auch im Baum markiert werden.

Diese willkürliche Markierung des Datensatzes (Nodes) im Baum bekomme ich noch nicht hin, welche Methode muss ich aufrufen? :shock:

Folgende Objekte verwende ich:
DATA: gr_container TYPE REF TO cl_gui_custom_container,
gr_tree TYPE REF TO cl_salv_tree,
nodes TYPE REF TO cl_salv_nodes,
node TYPE REF TO cl_salv_node.

Schon mal vielen Dank im Voraus! :D
Angelie88
..
..
 
Posts: 13
Joined: Thu Aug 23, 2012 12:49 pm

Re: Cursor setzen im ALV Tree (CL_SALV_TREE)

Postby Jonny2227 » Thu Aug 23, 2012 2:35 pm

Sali,

wie schaut denn dein Coding aus wenn du auf die Auswahl der Zeile im Tree reagierst ?!

Du holst dir doch mit der Methode GET_SELECTIONS den selektierten Satz im Tree - damit bekommst du eine Referenze auf das Objekt CL_SALV_SELECTIONS_TREE und dort hat es ja die Methode set_selected_nodes - also muss du dir den Satz merken der ausgewählte wurde bevor dein Popup kommt und wenn der Anwender Nein sagt - setzt du mit der Methode halt wieder die Selektion auf diesen Eintrag !


Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: Cursor setzen im ALV Tree (CL_SALV_TREE)

Postby Angelie88 » Thu Aug 23, 2012 4:14 pm

Hallo Jens,

Danke für Deine schnelle Antwort! Es funktioniert! Muss dass nur noch ein bisschen rund machen!

Zum Verständnis die Auswahl im Tree erfolgt bis dato per Maus-Doppelklick über den Eventhandler und erhalte den aktuellen node_key zurück. Das Problem ist auch dieses Event wird vor bzw. unabhängig vom PAI ausgeführt.

Definition
METHODS:
on_double_click FOR EVENT double_click OF cl_salv_events_tree
IMPORTING node_key columnname.

Eine weitere Problematik (das müsste dann alles sein) ist das komplette Refreshen des Tree's, habe alles neu intialisiert aber es ist alles leer? Sprich erst FREE auf Container, Tree, Nodes und dann wieder alles aufgebaut. Wo ist mein Gedankenfehler?

Beste Grüße
Norbert
Angelie88
..
..
 
Posts: 13
Joined: Thu Aug 23, 2012 12:49 pm

Re: Cursor setzen im ALV Tree (CL_SALV_TREE)

Postby Jonny2227 » Fri Aug 24, 2012 8:33 am

Sali,

was meinst du mir - läuft unabhängig von PAI etc. ? Mit dem Objekt CL_SALV_TREE benötigst du doch eigentlich kein eigenes Dynpro - kannst du zwar machen ist aber nicht notwendig - dann wird das SAP Standard Dynpro genommen. Das dein Event unabhängig von PAI aggiert ist so korrekt - OO ist etwas anders als die bisherige Ereignisgesteuerte ABAP Programmierung - das solltest du dir dann anschauen genauer.
Wenn du deinen Tree - wahrscheinlich dann im PBO deines Dynpros neu initiaslisiert - ist es klar, dass alles leer ist, weil du damit den Tree Aufbau zerstörst - deine Tree Reference kapselt so lange du damit arbeiten willst ja deine Daten (siehe auch hier den OO Ansatz) daher ist ein init (bzw. nur auf Teilbereiche z.Bsp. Variablen, interne Tabellen etc. auch zwischendrin) oder free nur ganz am Ende notwendig oder du willst halt ganz neu beginnen mit einer Verarbeitung etc.

Gruss Jens
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Re: Cursor setzen im ALV Tree (CL_SALV_TREE)

Postby Angelie88 » Fri Aug 24, 2012 3:11 pm

Hallo Jens,

"Läuft unabhängig vom PAI", das war auf das Event bezogen! Es läuft alles soweit!

Das andere noch offene Problem ist, das der Arbeitsvorrat, welcher im linken Tree angezeigt wird, sich ändern kann! Daher soll über ein Refresh (automatisch oder manuell) der Tree bzw. die Daten neu angezeigt/eingelesen werden. Ich habe alles gelöscht aber nach dem neuen PBO Durchlauf, ist alles leer. Obwohl alles wieder durchlaufen bzw. aufgebaut (theoretisch) wird. Wie kann ich das sauber lösen?

Speicher freigeben:
FREE: gr_events, gr_tree, gr_container.
REFRESH: gt_service.
*************************

PBO-Flow:
IF cl_salv_tree=>is_offline( ) EQ if_salv_c_bool_sap=>false.
CREATE OBJECT gr_container
EXPORTING
container_name = 'CONTAINER1'.
ENDIF.


* build tree
TRY.
cl_salv_tree=>factory(
EXPORTING
r_container = gr_container
IMPORTING
r_salv_tree = gr_tree
CHANGING
t_table = gt_service ).
CATCH cx_salv_no_new_data_allowed cx_salv_error.
EXIT.
ENDTRY.

* get data
PERFORM daten_holen.
....
Angelie88
..
..
 
Posts: 13
Joined: Thu Aug 23, 2012 12:49 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 2 guests