RTTI - Dynamische Struktur erzeugen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

RTTI - Dynamische Struktur erzeugen

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo zusammen,

beim dynamischen Erzeugen einer Struktur laufe ich auf einen Fehler in:

cl_abap_structdescr=>get( EXPORTING p_components = lt_components[] ).

Die Ursache sind Feldnamen mit einem Trennstrich, die durch Verwendung von Strukturen als Typen in der Gesamtstruktur entstehen.

Hintergrund:
Die Ausgabestruktur wird per ALV-Layout festgelegt.
Dies wird ausgelesen und eine abgespeckte Struktur mit den Ausgabefeldern angelegt.
Die Daten werden dann mit dieser (dynamisch erzeugten) Struktur an die eigentliche Ausgaberoutine übergeben.

Code: Alles auswählen.

DATA:
  lo_struct_type  TYPE REF TO cl_abap_structdescr,
  lo_dref  TYPE REF TO data,
  lv_fieldname  TYPE text60,
  lt_components  TYPE cl_abap_structdescr=>component_table,
  lt_fieldcat TYPE kkblo_t_fieldcat.
"Auswahl der auszugebenden Felder
LOOP AT lt_fieldcat[] ASSIGNING FIELD-SYMBOL(<ls_fieldcat>) WHERE no_out EQ abap_false.
  INSERT INITIAL LINE INTO TABLE lt_components[] ASSIGNING FIELD-SYMBOL(<ls_component>).
  <ls_component>-name = <ls_fieldcat>-fieldname.
  lv_fieldname = '<ls_data>-' && <ls_fieldcat>-fieldname.
  ASSIGN (lv_fieldname) TO <lv_field>.
  <ls_component>-type ?= cl_abap_elemdescr=>describe_by_data( <lv_field> ).
ENDLOOP.
"Erzeugung der dynamischen Struktur
TRY.
    CLEAR: lo_dref.
    lo_struct_type = cl_abap_structdescr=>get( EXPORTING p_components = lt_components[] ). "<- Hier wird die Exception cx_sy_struct_creation geworfen
    CREATE DATA lo_dref TYPE HANDLE lo_struct_type.
  CATCH cx_sy_struct_creation.
    "Fehlerbehandlung noch nicht implementiert
ENDTRY.
ASSIGN lo_dref->* TO <ls_struc>.
"Zuweisung der auszugebenden Daten
MOVE-CORRESPONDING <ls_data> TO <ls_struc>.
Nun suche ich nach einer Möglichkeit die dynamische Struktur zu erstellen auch wenn Unterstrukturen (ohne Suffix) enthalten sind.
Die Namensgleichheit der Felder wird benötigt!.

Da RTTI nicht meine Stärke ist hoffe ich, dass es Lösungung für meine Problematik gibt.

MfG
Thomas R.

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


Re: RTTI - Dynamische Struktur erzeugen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin Thomas.
Hier im Forum gibt es mehrere Beiträge zu diesem Thema.
Ich empfehle :
http://www.abapforum.com/forum/viewtopi ... =3&t=17061

gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: RTTI - Dynamische Struktur erzeugen

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Jens,

danke für den Hinweis (den ich schon kannte).
Mein Coding funktioniert solange keine Unterstrukturen eingebunden sind, die im Feldkatalog aufgelöst wurden und dann eine Namensvergabe
Strukturname-Feldname
haben.

Beispiel:

Code: Alles auswählen.

TYPES:
  BEGIN OF INFO,
     Marker type Char1,
     Descr type text50,
  END of INFO,
  BEGIN of MyDATA,
    Nutzfeld1 type i,
    Moredata type info,
  end of MyDATA,
  MyDaten type standard table of Mydata.
DATA:
  MyTable type MyDaten.
Der S_ALV benennt dann im Feldkatalog die Felder folgendermaßen:
NUTZFELD
MOREDATA-MARKER
MOREDATA-DESCR

Und cl_abap_structdescr=>get() kann mit MOREDATA-MARKER bzw. MOREDATA-DESCR nicht umgehen.

MfG
Thomas R.

P.S. Aber jetzt wünsche ich erst einmal allen ein schönes langes Wochenende (egal wie das Wetter sein wird)

Re: RTTI - Dynamische Struktur erzeugen

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: RTTI - Dynamische Struktur erzeugen

Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
Du darfst dann auch nicht MOREDATA-FELD als Komponente einbinden, sondern musst INFO einbinden!
Evtl. musst du dafür <ls_component>-as_include = abap_true setzen.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Thomas R.


Re: RTTI - Dynamische Struktur erzeugen

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Zusammen,
Enno gab den entscheidenden Hinweis:
Die Felder der eingebundenen Struktur dürfen nicht einzeln eingebunden werden. Es wird nur das "Strukturfeld" Moredata mit AS_INCLUDE = abap_true eingebunden.
Somit bleibt nur noch die Strukturerkennung im S_ALV-Layout, aber das geht im schlimmsten Fall über die Trennstriche.

MfG
Thomas R.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1182
Views
Dynamische Suchhilfe erzeugen
von nopp » 16.11.2006 21:43 • Verfasst in ABAP® Core
7
Antw.
3290
Views
Dynamische Sammelsuchhilfe zur Laufzeit erzeugen
von AdrianSchm » 05.03.2018 18:02 • Verfasst in ABAP® Core
16
Antw.
2381
Views
Dynamische Maßnahme -> Infotyp feld erzeugen
von NLengner » 24.01.2020 07:59 • Verfasst in ABAP® für Anfänger
4
Antw.
2235
Views
Dictionary-Struktur aus Programm erzeugen....
von Arno Simon » 24.11.2005 08:51 • Verfasst in ABAP® Core
3
Antw.
4658
Views
Dynamische Struktur
von PeterPaletti » 13.07.2015 16:05 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 20 Stunden von Bright4.5 1 / 444
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2093
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8685