Nein, ich verwende die Struktur LVC_S_FCAT und häng mittels APPEND meine itab dran.a-dead-trousers hat geschrieben: Ich nehme mal an du verwendest die LVC_FIELDCATALOG*- Bausteine um die interne Tabelle für die Ausgabe zu erstellen.
Die glaub ich können sowieso nicht mit Referenzen umgehen, vom ALV ganz zu schweigen
Meine ALV soll editierbar sein und ich meine gelesen zu haben, dass das von CL_SALV_TABLE nicht unterstützt wird.a-dead-trousers hat geschrieben: Und wenn du dir das Erstellen des Feldkataloges sparen willst, kannst statt dem ALV den CL_SALV_TABLE verwenden.
Habe mal das von dir erstellte Programm bei mir eingebaut. So ganz steig ich noch nicht dahinter.a-dead-trousers hat geschrieben: Ne, was du braucht sind die RTTI-Klassen.
Mit meinem Beispiel als Grundlage kannst du dir die LT_COMPONENTS aller verwendeten Strukturen ermitteln. Diese Komponenten-Tabelle erweiterst du dann noch um zusätzliche Zeilen (Felder) für die Speicherung der jeweiligen Klassen(-Instanzen).
Code: Alles auswählen.
Klasse1_Attribut1 type Char.
Klasse1_Attribut2 type Dec.
Klasse1_Attribut3 type Int.
Klasse1 type ref to Klasse1
Klasse2_Attribut1 type Char.
Klasse2_Attribut2 type Dec.
Klasse2_Attribut3 type Int.
Klasse2 type ref to Klasse2
Klasse3_Attribut1 type Char.
Klasse3_Attribut2 type Dec.
Klasse3_Attribut3 type Int.
Klasse3 type ref to Klasse3
In etwa, ja. Leider entspricht nicht exakt jede DB-Tabelle einer Klasse. Das einlesen der Daten in die entsprechende Klasse ist daher etwas umständlich. Zwar soll später im ALV ein Objekt eine Zeile darstellen, allerdings beinhaltet die Zeile noch weitere Attribute. Mal etwas anschaulicher: Ich hab ein Gertä, das verfügt über Parameterblöcke, die verfügen über Parameter. Zum Gerät lasse ich mir die Parameterblöcke im ALV anzeigen. Dort entspricht dann ein Parameterblock-Objekt einer Zeile, allerdings beinhaltet diese Zeile auch noch Spalten/Felder, die Auskunft zum aktuellen Parameter gibt. Beim Doppelklick auf einen Parameterblock öffnet sich unterhalb ein ALV mit den entsprechenden Parametern. Diese kann ich ändern. Aber auch hier entspricht nicht eine Zeile genau einem Objekt, denn in dieser Zeile des ALVs stehen auch noch Infos zum Parameterblock.a-dead-trousers hat geschrieben: Du hast so ne Art SDO gemacht, wo jede Klasse einer DB-Tabelle entspricht und jedes Objekt der Klassen einer jeweiligen Zeile.
Ja, ist eine statische Struktur für meine ALV.a-dead-trousers hat geschrieben:Wie hast du die interne Struktur/Tabelle für die Anzeige des ALVs erstellt? Vermutlich Statisch.
Kennst du im Standard einen Report, der sowas macht und den ich mir anschauen kann? Vermutlich nicht. =/a-dead-trousers hat geschrieben: Du könntest dir uU einen Klasse-zu-Struktur-Wrapper schreiben, der egal welche Klasse du anzeigen möchtest, die entsprechenden Informationen darstellt.
Wenn ich dich richtig verstanden habe, denke ich aber, dass das der richtige Weg sein könnte. Hoffe nur, dass ich das hinbekomme. Wenn jemand im Standard einen Report kennt, der ähnlich vor geht, immer her damit.a-dead-trousers hat geschrieben: Mir schwebt da sowas vor indem du mit CL_ABAP_CLASSDESCR alle PUBLIC-Attribute der Klasse ausliest. Sind es normale Elemente (CL_ABAP_ELEMDESCR) fügst du zur LT_COMPONENT eine neue Felddefinition hinzu. Handelt es sich um Referenzen einer Klassen gehts du eine Rekursionsebene tiefer und wiederholst das ganze (Sprich alle PUBLIC-Attribute auslesen, ...) am Ende jeder Verarbeitungsebene fügst du noch ein Feld ein, welches die Klasse darstellt.
Die CL_ABAP_TYPEDESCR sind noch eine recht "neue" Technologie in SAP und werden auch nur in den vertiefenden Programmierkursen (z.b. BC351) behandelt.newbie007 hat geschrieben:Wenn ich dich richtig verstanden habe, denke ich aber, dass das der richtige Weg sein könnte. Hoffe nur, dass ich das hinbekomme. Wenn jemand im Standard einen Report kennt, der ähnlich vor geht, immer her damit.
Code: Alles auswählen.
system-call OBJMGR perform GARBAGE COLLECTION.
Jetzt frage ich mich nur, ob das in meinem Fall überhaupt notwendig ist.a-dead-trousers hat geschrieben:...dann musst du dafür eine Methode definieren die die erforderlichen "Zerstörungen" vornimmt
Also muss ich mir erst alle Referenzen holen, die auf das Objekt zeigen und diese dann mittels CLEAR löschen? Das ist in meinem Fall irgendwie total umständlich wie ich finde....black_adept hat geschrieben:du musst "nur" alle Referenzen auf das zu löschende Objekt entfernen und danach das Objekt selber. Damit ist es dann vogelfrei und der Garbagecollector wird es abräumen sobald er der Meinung ist, dass es mal wieder Zeit wird für Ordnung zu sorgen.