Felder einer Tabelle auslesen

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

Felder einer Tabelle auslesen

Beitrag von cut1 (Specialist / 121 / 0 / 0 ) »
Hallo,

ich möchte von einer DDIC Tabel die Struktur auslesen und Klassen basiert arbeiten.

Code: Alles auswählen.

  CALL METHOD cl_abap_structdescr=>describe_by_name
    EXPORTING
      p_name         = va_string
    receiving
      p_descr_ref    = rf_des
    EXCEPTIONS
      type_not_found = 1
      others         = 2
Über diese Methode bekomme ich eine Referenz auf ein "Objekt" vom Type
cl_abap_typedescr zurück. Ich weis das die Felder der Struktur in einer Tabelle mit dem Namen 'COMPONENTS' hinterlegt ist. (Das sieht man im Debugger wenn man einen Doppelclick auf die Referenzvariable macht.

Leider kann ich auf diese Tabelle mittels rf_des->components nicht zugreifen.

Wo habe ich da den Denkfehler ??

folgende Variante funktioniert:

Code: Alles auswählen.

 data rf_des2         type ref to cl_abap_structdescr.
 rf_des2 ?= cl_abap_typedescr=>describe_by_name( va_string ).
leider weis ich nicht wie ich in der 2. Variante die Exceptions abfangen kann ?!

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


Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Punkt 1:
Deine Variable ref_des zeigt das Objekt aus Sicht von CL_ABAP_TYPEDESCR. Diese Klasse kennt aber kein Attribut COMPONENTS, daher ist es im Programm auch nicht adressierbar.
Der Debugger weiss, dass das zurück gelieferte Objekt vom Typ CL_ABAP_STRUCTDESCR ist und kann die entsprechenden Attribute darstellen.

Punkt 2:
Umschließe Deinen Methodenaufruf mit einem Try-Catch-Block:

Code: Alles auswählen.

TRY.
    rf_des2 ?= cl_abap_typedescr=>describe_by_name( va_string ). 
  CATCH cx_sy_move_cast_error.
ENDTRY.
Bei der Fehlerklasse (das Ding nach CATCH) bin ich mir aus dem Stegreif nicht ganz sicher, der Editor wird Dir da aber helfen. Lies vor allem mal die F1-Hilfe zu TRY.

Das ganze fällt untrer das Stichwort "Casting". Punkt 2 ist ein sog. "Widening Cast".

Hope this helps.

Gruß,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

klar ist das 'ne hübsche Sache, mal die Komponenten einer Struktur auszulesen.

Aber es ist auch immer interessant, was man mit den Komponenten machen will.

Wenn es nur darum geht, mal in jeder Komponente nachzuschauen, ob was drinsteht, oder sich was geändert hat, gibt es dazu Mittel, die etwas einfacher sind, als der "Strauß" der Struktur-Info-Werkzeuge.

Code: Alles auswählen.

WHILE sy-subrc = 0.
   ASSIGN COMPONENT sy-index OF STRUCTURE bseg TO <fs>.
* mach was mit <fs>
ENDWHILE
(Aus der Hilfe abgeschrieben! Aber damit klappert man die Felder ab ...)
Man kann das auch mit DO. ENDDO. oder anders machen.

Gruß
babap

Beitrag von babap (Expert / 681 / 1 / 1 ) »
...
und wenn es denn dann doch was modernes sein soll und dazu auch noch soooo universell, daß es die Exceptions abfängt, dann geht das so:

Code: Alles auswählen.

data: LR_DES type ref to CL_ABAP_STRUCTDESCR.
data: HR_DES type ref to CL_ABAP_TYPEDESCR.

field-symbols: <LT_COMPONENTS> type ABAP_COMPDESCR.


call method CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME
  exporting
    P_NAME      = 'BSEG'
  receiving
    P_DESCR_REF = HR_DES
  exceptions
    others      = 2.

if not HR_DES is initial.
  LR_DES ?= HR_DES.
  loop at LR_DES->COMPONENTS assigning <LT_COMPONENTS>.

* mach was mit <lt_components>
* Anzahl Stellen, Variablentype etc.

  endloop.
endif.
Die zurückgegebene Referezvariable hat einen anderen Typ, als die, mit der man die Tabelle "abnudeln" kann.

Also muß man "umreferenzieren". Das mach das Beispielcoding aus der Hilfe gleich mit der Zusweisung '?='.

Bei der "extended Version" mit Exceptions fischt man erst mit der "ersten Angel" und hängt dann auf die "andere Angel" um.

Code: Alles auswählen.

lr_des ?= hr_des.
Gruß
babap

Beitrag von cut1 (Specialist / 121 / 0 / 0 ) »
erstmal danke allerseits... das mit dem '"Widening Cast" ist anfänglich verwirrend .... *g was man ja von SAP nicht behaupten kann ....

anyway ... danke für die Erklärungen .... et läuft !.

gruss cut1

Seite 1 von 1

Vergleichbare Themen

6
Antw.
6526
Views
Felder bzw. Komponentennamen einer Tabelle auslesen
von pohlmann-schwarza » 27.05.2008 09:30 • Verfasst in ABAP® für Anfänger
3
Antw.
3728
Views
Felder der Q-Struktur in HR auslesen.
von danielA. » 03.01.2007 16:08 • Verfasst in ABAP® Core
3
Antw.
1295
Views
ALV - Felder zu Variante auslesen
von bapimueller » 26.09.2024 16:58 • Verfasst in ABAP® Core
1
Antw.
1800
Views
kundeneigene Felder auslesen mit BAPI_MATERIAL_GETALL
von Szel » 25.09.2013 17:05 • Verfasst in ABAP® Core
2
Antw.
3057
Views
Beim Batch Input Dynpro-Felder auslesen
von Thomas Koßmann » 30.05.2005 15:44 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 4 Stunden von msfox 18 / 10920
Dialog-Container mit Toolbar/Status
vor 7 Stunden von black_adept gelöst 27 / 4022
IT0024 Qualifikationen CP-ID
vor 9 Stunden von ArjenR 1 / 69

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.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 4 Stunden von msfox 18 / 10920
Dialog-Container mit Toolbar/Status
vor 7 Stunden von black_adept gelöst 27 / 4022
IT0024 Qualifikationen CP-ID
vor 9 Stunden von ArjenR 1 / 69

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 9 Stunden von ArjenR 1 / 69
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3003
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9593