Objekte in ALV Grid ausgeben

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Objekte in ALV Grid ausgeben

Beitrag von codeknecht (ForumUser / 4 / 0 / 0 ) »
Hallo zusammen,

nach einigen Jahren ABAP Abstinenz mit Abstechern in die .NET Welt bin ich zurück in der ABAP Welt und stehe direkt vor einem Problem.

Folgendes habe ich vor. Ich habe eine Klasse Kunden, welche einige öffentliche Attribute und Methoden enthält. Attribute sind z.B. die Adressdaten, Methoden z.B. eine zum erzeugen von Aufträgen. Außerdem habe ich einen ORM Mapper erstellt, also Datensätze aus der DB ausgelesen und für jeden Datensatz eine eigene Klasseninstanz erzeugt. Dabei habe ich einige Daten aus der DB in öffentliche Attribute der Klasseninstanzen überführt. Als Ergebnis habe ich nun eine interne Tabelle, welche aus Objektreferenzen besteht. Soweit so bekannt.

Ich möchte nun die ausgelesenen Objekte in einem ALV Grid darstellen, konkret möchte ich die öffentlichen Attribute als Spalten verwenden. Als Ergebnis möchte ich eine Liste mit den Kundennummern und den Adressdaten haben. Durch Auswahl eines Datensatzes möchte ich eine bestimmte Methode der Klasseninstanz aufrufen.

Wie kann ich Objekte in einer ALV Liste ausgeben?
Mein erster Ansatz ist, dass ich die Liste meiner Objekte vor der Grid Ausgabe durchlaufe. Dabei schreibe ich alle Atribute in eine separate interne Tabelle. Jeder Datensatz hält zusätzlich eine Referenz auf das ursprüngliche Objekt. Nach auswahl eines DAtensatzes kann ich die selektierten Datensätze ermitteln und auf das Objekt zugreifen.

Geht das auch ohne den Umweg über eine separate itab? Das Handling würde ich mir gerne sparen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Objekte in ALV Grid ausgeben

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
pfuuuu...
Ich würd mal behaupten, dass das nicht funktionieren wird.
(Lass mich aber gerne eines besseren belehren)
Ich hab nur ungefähr eine Idee wie es vielleicht (Chance < 10%) funktionieren könnte:

Code: Alles auswählen.

types:
  begin of ts_object,
    object type ref to ...
  end of ts_object.
Und im Feldkatalog die Spalten mittels FIELDNAME = 'OBJECT->ATTRIBUTE' definieren.

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.

ECC: 6.18
Basis: 7.50

Re: Objekte in ALV Grid ausgeben

Beitrag von codeknecht (ForumUser / 4 / 0 / 0 ) »
Hallo,

danke für deine Antwort, auch wenn sie nicht so ausgefallen sit, wie ich gehofft habe :-) Ich habe es einmal wie folgt versucht:

Code: Alles auswählen.

types: begin of my_insplot,
  inspobj type ref to zcl_insplot,
  end of my_insplot.

data: itab_objects type STANDARD TABLE OF my_insplot,
         myobject type REF TO zcl_insplot,
         wa_objects type my_insplot,
         wa_fieldcat type lvc_s_fcat,
         GT_FIELDCAT TYPE LVC_T_FCAT.
* Erzeugen meines Objektes welches auf dem Grid ausgegeben werden soll

create OBJECT myobject.

myobject->aufnr = '4711'.
wa_objects-inspobj = myobject.

* Objekt der Liste mit Referenzen anfügen
append wa_objects to itab_objects.

*Feldkatalog erstellen, auch versucht was passiert, wenn nur fieldname angegeben wurde

        wa_fieldcat-fieldname = 'ZCL_INSPLOT->AUFNR'.
        wa_fieldcat-ref_table ='AFKO'.
        wa_fieldcat-ref_field = 'AUFNR'.
        wa_fieldcat-coltext = 'Fertigungsauftrag'.
        wa_fieldcat-seltext = wa_fieldcat-coltext.
        wa_fieldcat-outputlen = '10'.
        append wa_fieldcat to gt_fieldcat.
        clear wa_fieldcat.

 CREATE OBJECT r_container
    EXPORTING
      container_Name = 'CONTAINER_ALV'.

  CREATE OBJECT R_Grid
    EXPORTING
      i_parent = R_Container.

  CALL METHOD R_Grid->SET_TABLE_FOR_FIRST_DISPLAY
    CHANGING
      IT_FIELDCATALOG = GT_FIELDCAT
      it_outtab       = itab_objects.
Ich erhalte immer einen Dump
Kategorie ABAP Programmierfehler
Laufzeitfehler GETWA_NOT_ASSIGNED
ABAP Programm SAPLSLVC
Anwendungskomponente BC-SRV-ALV
Datum und Zeit 11.12.2012 16:28:41



Kurztext
Feldsymbol ist noch nicht zugewiesen.
Es scheitert momentan also an dem Feldkatalog. Folgendes habe ich schon als Fieldname versucht:
  • OBJECT->AUFNR
    ZCL_INSPLOT->AUFNR
    MYOBJECT->AUFNR

Re: Objekte in ALV Grid ausgeben

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also mit der Schreibweise kann das System auch nichts anfangen (weil intern der absolute Name anders ausschaut -> ) - daher würde ich an deiner Stelle mit den RTI-Services die Eigenschaften von deinem Public Attribut -> hier also z.Bsp. die AUFNR - holen und dort hat es dann auch den absoluten Namen und diesen Namen würde ich dann in das Feld Fieldname stellen.

Gruss Jens
thanks Jens

Re: Objekte in ALV Grid ausgeben

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
hi!

Versuch mal 'inspobj->aufnr' als Feldname.
'inspobj' ist der Name des Feldes innerhalb der Struktur und '->aufnr' ist der Zugriff auf das Attribut.
'OBJECT', 'ZCL_INSPLOT' und 'MYOBJECT' sind innerhalb der Strktur nicht bekannt.

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.

ECC: 6.18
Basis: 7.50

Re: Objekte in ALV Grid ausgeben

Beitrag von codeknecht (ForumUser / 4 / 0 / 0 ) »
Hallo,

leider hat beides nicht den gewünschten Effekt gebracht. Der Fehler ist nach wie vor, dass das Feldsymbol nicht zugewiesen ist.
Über RTTI habe ich zwar den Namen der Klasse erreicht, das reicht aber offensichtlich nicht.

Code: Alles auswählen.

data: r_desc type ref to cl_abap_classdescr.
r_desc ?= cl_abap_typedescr=>describe_by_object_ref( wa_objects-inspobj ).

data: objname type string.
concatenate r_desc->absolute_name '->aufnr' into objname.
        wa_fieldcat-fieldname = objname.
Ich fürchte fasst, ich muss mich mit den klassischen Mitteln zufrieden geben.

Re: Objekte in ALV Grid ausgeben

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
codeknecht hat geschrieben:

Code: Alles auswählen.

concatenate r_desc->absolute_name '->aufnr' into objname.
Muss '->aufnr' nicht UPPER-Case sein?
Gruß Hendrik

Re: Objekte in ALV Grid ausgeben

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Wie soll denn das überhaupt funktionieren?

Die interne Tabelle die im Grid dargestellt werden soll hat genau ein Feld - nämlich "inspobj". Und das gilt auch für ihren Zeilentyp.
Irgendwo muss ja festgelegt werden, welche Überschrift und welches Feld im Grid dargestellt werden sollen. Dazu wird irgendwo ganz tief im Coding über den Feldkatalog geloopt und jedes Feld des Feldkatalogs wird via ASSIGN dem zugehörigen Feld einer Struktur zugewiesen, die dem Zeilentyp der Tabelle entspricht.
Dummerweise vergisst SAP aber bei einem fehlerhaften ASSIGN eine Fehlermeldung zu senden oder einfach zum nächsten Feld weiterzugehen sondern teilt das dem User dadurch mit dass in der nachfolgenden Verarbeitung dann auf das nicht zugewiesene Feldsymbol zugegriffen wird ( wie du ja gemerkt hast ) und dann dumpt.

Somit wird das was du da vorhast also nie funktionieren, da du einen vorhandenen Feldnamen angeben musst und nur "INSPOBJ" in deinem Fall erlaubt ist.


P.S. Wenn du das Feld "INSPOBJ" in den Feldkatalog aufnimmst solltest du eigentlich auch einen Dump erhalten - aber der sollte dann viel viel tiefer im System vergraben sein. Irgendwo da wo SAP mit dem Control zu sprechen versucht sollte es zu einem Fehler kommen, weil eine Objektreferenz eben nicht dargestellt werden kann.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Objekte in ALV Grid ausgeben

Beitrag von codeknecht (ForumUser / 4 / 0 / 0 ) »
Hallo Stefan,

ich schließe aus deiner Antwort, dass ich die Objekte nur indirekt ausgeben kann, indem ich zunächst eine neue interne Tabelle erzeuge. Diese enthält für jedes Attribut eine Spalte. Ich durchlaufe dann alle meine Objekte und schreibe die Werte in die entsprechenden Spalten.

Im PAI kümmere ich mich dann darum, das entsprechende Objekt zu finden und damit weiterzuarbeiten.

Siehst du noch eine andere Möglichkeit? Wenn nicht muss ich mich wohl damit zufrieden geben.

Re: Objekte in ALV Grid ausgeben

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
codeknecht hat geschrieben:Hallo Stefan,

ich schließe aus deiner Antwort, dass ich die Objekte nur indirekt ausgeben kann, indem ich zunächst eine neue interne Tabelle erzeuge. Diese enthält für jedes Attribut eine Spalte. Ich durchlaufe dann alle meine Objekte und schreibe die Werte in die entsprechenden Spalten.

Im PAI kümmere ich mich dann darum, das entsprechende Objekt zu finden und damit weiterzuarbeiten.

Siehst du noch eine andere Möglichkeit? Wenn nicht muss ich mich wohl damit zufrieden geben.
Ich würd's zumindest genau so machen.
Evtl. sogar einfach deine Tabelle mit den Objektreferenzen um Spalten für die jeweils wichtigen Attribute erweitern und dann reinkopieren.
Dann hast du beim Selektieren einer zeile auch gleich die korrekte Objektreferenz im Zugriff und "normalerweise" sollte SAP beim automatischen Aufbau des Feldkatalogs auch deine Referenzspalte unter den Tisch fallen lassen, so dass diese auch keine Probleme bereitet.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

6
Antw.
2996
Views
Mandantenfeld im ALV Grid ausgeben
von jondahl11 » 25.09.2007 10:25 • Verfasst in ABAP® Core
0
Antw.
1236
Views
ALV Grid als Liste ausgeben
von jondahl11 » 26.09.2007 09:53 • Verfasst in ABAP® Core
1
Antw.
1388
Views
Html Container in ALV-Grid ausgeben
von Katta » 07.08.2007 15:24 • Verfasst in ABAP® für Anfänger
7
Antw.
17721
Views
ALV grid automatisch mit opt. Spaltenbreite ausgeben
von Guido » 24.08.2006 16:44 • Verfasst in ABAP® für Anfänger
3
Antw.
3761
Views
ALV GRID führende Nullen ausgeben
von michael.schoeffer » 13.01.2006 15:05 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.