Auflösen von ?Absolute Typnamen?

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

Auflösen von ?Absolute Typnamen?

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

ich habe ein kleines Problem, vielleicht kann mir jemand dabei helfen.

Mit den Klassen zur Bestimmung von Typeigenschaften zur Laufzeit (Run-Time Type Identification RTTI) möchte ich den genauen Datentyp einer Variablen ermitteln.

Bei der Verwendung von RTTI, z. B. durch die Klasse CL_ABAP_TABLEDESCR kann ich aber nur den ?Absolute Typnamen? ermitteln.

So habe ich in einem Beispielprogramm (mit der Klasse CL_ABAP_TABLEDESCR) für eine Variable den absoluten Typnamen ?\PROGRAM=Y_TESTPROGRAMM\TYPE=%_TYPE0000000012? ermittelt. Nun stellt sich mir die Frage, wie ich diesen Typnamen auflösen kann, um an den eigentlichen Datentype zu kommen.


Gruß
Frank

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo frank_dengler,

ohne es ausprobiert zu haben, sollte es mit CL_ABAP_STRUCT=>DESCRIBE_BY_NAME( tabledescr->absolute_type ) möglich sein, die Beschreibung der Struktur deiner Tabelle zu erhalten.
Ob man dabei auch die Namen der Felder bekommt, hängt wohl von SAP-Release ab.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
frank_dengler hat geschrieben: ?\PROGRAM=Y_TESTPROGRAMM\TYPE=%_TYPE0000000012?
Das sieht ja so aus, als hättest du den Typ über die RTTS-Klassen dynamisch im Programm erzeugt, oder?
frank_dengler hat geschrieben: Nun stellt sich mir die Frage, wie ich diesen Typnamen auflösen kann, um an den eigentlichen Datentype zu kommen.
Was meinst Du denn mit dem "eigentlichen Datentyp"? DDIC? Oder so was wie c(12)?
Untersuchst du Tabellen, oder Strukturen oder einfache Datentypen?

Gruß BlackMail.

Beitrag von frank_dengler (ForumUser / 4 / 0 / 0 ) »
Hallo BlackMail,

danke für deine Antwort.

Folgendes zu deinen Fragen:
Das Feld/Variable für den ich den Typ ermittel will, wird momentan nicht dynamisch, sondern normal mit DATA erzeugt. Der Type kann sowohl aus dem DDIC stammen oder aber im Programm mittels TYPE definiert werden.

Ich benötige, wenns den geht, eine allgemeingültige Lösung, mit der ich den Type dieses Feldes ermittel kann.

Für den Fall das es sich bei der Variablen um eine interne Tabelle handelt habe ich eine eingeschränkte Lösung (siehe unten) für die Fälle 1 und 2 geht?s aber nicht für Fall 3.

Bevor ich es wieder vergesse ? ich arbeite mit dem Release 4.6C.

REPORT y_find_typ .

TYPES: my_tabletype_1 TYPE TABLE OF vbrk,
begin of my_structtype_1,
field1 type c,
field2 type i,
end of my_structtype_1.

DATA: my_tabledata_1 TYPE my_tabletype_1,
my_tabledata_2 type table of my_structtype_1,
my_tabledata_3 type table of c.

DATA: oref_abap_typedescr TYPE REF TO cl_abap_typedescr.
DATA: oref_abap_tabledescr TYPE REF TO cl_abap_tabledescr.

START-OF-SELECTION.

* Fall 1
* So hätte ich es gerne
oref_abap_typedescr =
cl_abap_typedescr=>describe_by_data( my_tabledata_1 ).

WRITE: / 'ABSOLUTE_NAME :', oref_abap_typedescr->absolute_name.

oref_abap_tabledescr ?= oref_abap_typedescr.

CALL METHOD oref_abap_tabledescr->get_table_line_type
RECEIVING
p_descr_ref = oref_abap_typedescr.

WRITE: / 'Type :', oref_abap_typedescr->absolute_name.

* Fall 2
* Das geht auch noch
oref_abap_typedescr =
cl_abap_typedescr=>describe_by_data( my_tabledata_2 ).

WRITE: / 'ABSOLUTE_NAME :', oref_abap_typedescr->absolute_name.

oref_abap_tabledescr ?= oref_abap_typedescr.

CALL METHOD oref_abap_tabledescr->get_table_line_type
RECEIVING
p_descr_ref = oref_abap_typedescr.

WRITE: / 'Type :', oref_abap_typedescr->absolute_name.

* Fall 3
* Hier habe ich ein Problem mit der Angabe \TYPE=%_TYPE0000000279
* kann ich nichts anfangen.
* Ich hätte gerne so was wie \TYPE=C
oref_abap_typedescr =
cl_abap_typedescr=>describe_by_data( my_tabledata_3 ).

WRITE: / 'ABSOLUTE_NAME :', oref_abap_typedescr->absolute_name.

oref_abap_tabledescr ?= oref_abap_typedescr.

CALL METHOD oref_abap_tabledescr->get_table_line_type
RECEIVING
p_descr_ref = oref_abap_typedescr.

WRITE: / 'Type :', oref_abap_typedescr->absolute_name.


Gruß
Frank

Beitrag von xxxx (ForumUser / 38 / 0 / 0 ) »
Hallo,

ev. mit:

TYPE-POOLS: SYDES.

data: TD TYPE SYDES_DESC.

DESCRIBE FIELD my_tabledata_3 INTO TD.

lg
Jo

Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
frank_dengler hat geschrieben:* Ich hätte gerne so was wie \TYPE=C
Diese Information bekommst Du doch über das Attribut TYPE_KIND der Klasse cl_abap_typedesc in Zusammenhang mit LENGTH und ggf. DECIMALS. Dieses müsstest du mit den Konstanten wie TYPEKIND_CHAR vergleichen.
xxxx hat geschrieben:DESCRIBE FIELD my_tabledata_3 INTO TD.
Ich würde diese Variante vermeiden, da sie ja nur intern verwendet werden soll. Im Detail habe ich es mir nicht angeguckt, aber es scheint, als würden die RTTI-Klassen auch die gleichen Infos liefern.

Gruß BlackMail.

Beitrag von frank_dengler (ForumUser / 4 / 0 / 0 ) »
Hallo BlackMail,

leider klappt das nicht so, im Fall 3 liefert mir das Attribut TYPE_KIND den Wert 'h', was ja auch richtig ist, denn es handelt sich ja um eine interne Tabelle. Ich möchte aber den Zeilentyp der Tabelle und dies wäre in diesem Fall "C".

Der Vorschlag von Jo (Danke) klappt wohl bei diesem konkreten Beispiel, ist aber für komplexe Strukturen nicht, dass was ich suche.


Viele Grüße
Frank

Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
frank_dengler hat geschrieben: leider klappt das nicht so, im Fall 3 liefert mir das Attribut TYPE_KIND den Wert 'h',
Dann hast Du aber im 3. Fall den TYPE_KIND von "oref_abap_tabledescr" und nicht von "oref_abap_typedescr" abgefragt.
Wenn Du vor der letzten WRITE-Anweisung TYPE_KIND abfragst erhältst Du TYPE_KIND = 'C'.

Natürlich kann es sein, dass der Zeilentyp kein einfacher Datentyp ist sondern wieder eine Struktur. In dem Fall musst Du von der Struktur zu den Komponenten navigieren (cl_abap_structdescr : get_components). Die Tabelle enthält für alle Komponenten eine Referenz auf cl_abap_datadescr).

Gruß BlackMail.

Beitrag von frank_dengler (ForumUser / 4 / 0 / 0 ) »
Hallo BlackMail,

ich sollte beim Lesen doch besser die Augen aufmachen, mit der Instanz oref_abap_typedescr bekomme ich das gewünschte Ergebnis.


Nochmals schönen Dank.
Gruß
Frank

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1606
Views
ABAP Buch für absolute Neulinge
von Sofi » 04.08.2009 15:55 • Verfasst in ABAP® für Anfänger
5
Antw.
2304
Views
Perioden auflösen ...
von jensschladitz » 05.05.2006 07:44 • Verfasst in ABAP® Core
0
Antw.
1558
Views
Festwert im ALV-Grid auflösen
von Hansi4u » 10.01.2006 20:54 • Verfasst in Dialogprogrammierung
11
Antw.
1767
Views
Material nach Stückliste auflösen
von Bright4.5 » 08.06.2021 15:09 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zeilenumbrüche ersetzen
vor 41 Minuten von rob_abc 4 / 26
Dialog-Container mit Toolbar/Status
vor 20 Stunden von tar gelöst 19 / 2085
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1444

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

Zeilenumbrüche ersetzen
vor 41 Minuten von rob_abc 4 / 26
Dialog-Container mit Toolbar/Status
vor 20 Stunden von tar gelöst 19 / 2085
SAP Trial Version für SAP Fiori
Gestern von tar 2 / 1444

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 505
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2143
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8738