Struktur dynamisch bearbeiten


Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Moderatoren: Jan, Steff

Struktur dynamisch bearbeiten

Beitragvon isp » 02.08.2018, 14:28

Hallo zusammen,
ich habe ein folgendes Problem, vllt. hat jemand von euch was ähnliches schon mal bearbeitet.

ich habe verschiedene Strukturen mit den Daten zur Verfügung. Einige Felder dieser Strukturen brauche ich auch für meine Prüfungen.

d.h. es soll der Typ einer Struktur dynamisch erkannt werden, dann über diese Struktur loopen und alle Felder in eine iTab : Feldname in die Spalte "FELDNAME" und inhalt dieses Feldes in die Spalte "FELDINHALT" der internen Tabelle speichern.

Ich habe über RTTI Klassen schon mal gelesen und ausprobiert. leider komme ich nicht weiter, bzw. die Komponenten einer Struktur ermitteln klappt es, aber weiter in die tiefe Strukturen spricngen und weiter bearbeiten nicht gescahfft. ich denke es ist mit einem Rekursiven Aufruf einer Methode klappen soll. Habe aber leider keine Erfahrung damit.

meine Probleme:
- mindestens ein Feld dieser Struktur ist von dem Typ Tabellentyp oder Struktur. d.h. in der Loop-Schleife diese Strukturen durchgehen und in die iTab speichern.
- wenn ein Feld vom Typ eine Tabelle ist, dann sollen diese Felder auch in iTab übernommen werden. dann werden in der iTab zwei gleiche Feldnamen auftauchen.

aber das ist eigentlich auch nicht schlimm...

Also eine Bitte, hat jemand einen Beispiel vllt. oder eine Lösung, wie ich über eine Struktur dynamisch loopen kann bis alle Felder ermittel werden und in eine iTab gespeichert werden?

Vielen Dank!
Gruß
isp
ForumUser
 
Beiträge: 31
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Struktur dynamisch bearbeiten

Beitragvon black_adept » 02.08.2018, 15:31

Was willst du denn machen? Serialisierung einer evtl. auch tiefen Struktur?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2982
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 495 mal
Ich bin: Freiberufler/in

Re: Struktur dynamisch bearbeiten

Beitragvon ralf.wenzel » 02.08.2018, 18:32

Das ist eigentlich nicht so schwer. Du schreibst eine Methode, die per RTTI die Komponenten ausliest und als Tabelle zurückgibt und die sich selbst aufruft (mit jedem einzelnen Komponentennamen). Das ist das, was du mit rekursivem Aufruf meintest. Hab ich schon gemacht, funktioniert.


Ralf
ralf.wenzel
Top Expert
 
Beiträge: 3048
Registriert: 18.09.2004, 13:03
Wohnort: Hamburg
Dank erhalten: 169 mal
Ich bin: Freiberufler/in

Re: Struktur dynamisch bearbeiten

Beitragvon tofralu » 03.08.2018, 09:39

Hallo..

Wenn es nur das ist:
d.h. es soll der Typ einer Struktur dynamisch erkannt werden, dann über diese Struktur loopen und alle Felder in eine iTab : Feldname in die Spalte "FELDNAME" und inhalt dieses Feldes in die Spalte "FELDINHALT" der internen Tabelle speichern.

Warum arbeitest du dann nicht mit Feldsymbolen und weist den Type "Any" aus?
tofralu
ForumUser
 
Beiträge: 28
Registriert: 11.04.2014, 10:52
Dank erhalten: 3 mal
Ich bin: sonstiges

Re: Struktur dynamisch bearbeiten

Beitragvon isp » 03.08.2018, 10:15

black_adept hat geschrieben:Was willst du denn machen? Serialisierung einer evtl. auch tiefen Struktur?


ja so eine Art... eine Struktur mit evtl. tiefen Strukturen in eine interne Tabelle klopfen.
isp
ForumUser
 
Beiträge: 31
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon isp » 03.08.2018, 10:27

ralf.wenzel hat geschrieben:Das ist eigentlich nicht so schwer. Du schreibst eine Methode, die per RTTI die Komponenten ausliest und als Tabelle zurückgibt und die sich selbst aufruft (mit jedem einzelnen Komponentennamen). Das ist das, was du mit rekursivem Aufruf meintest. Hab ich schon gemacht, funktioniert.


Ralf


gibt es vllt. eine Methode? oder Beispiel Koding?
isp
ForumUser
 
Beiträge: 31
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon 4byte » 03.08.2018, 10:41

Z.B. die Klasse cl_abap_structdescr

Beispielcoding:
Code: Alles auswählen

* Struktur holen
cl_abap_structdescr=>describe_by_name( )
* Dann die komponente
 lo_struct->get_components( ).

Z.B. Neue Komponente erzeugen
        ls_comp-name =  'CELL'.
        ls_comp-type ?= cl_abap_datadescr=>describe_by_name( 'LVC_T_STYL' ).
* Hinzufügen
        APPEND ls_comp TO me->lt_comp.
* Die neue Struktur erzeugen
        lo_struc_new = cl_abap_structdescr=>create( me->lt_comp ).
 


Nachtrag
Dient nur als Beispiel

Grüße 4Byte
Es gibt 10 Menschen die binär verstehen :)
4byte
ForumUser
 
Beiträge: 91
Registriert: 24.10.2017, 09:16
Dank erhalten: 24 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon isp » 03.08.2018, 10:59

4byte hat geschrieben:Z.B. die Klasse cl_abap_structdescr

Beispielcoding:
Code: Alles auswählen

* Struktur holen
cl_abap_structdescr=>describe_by_name( )
* Dann die komponente
 lo_struct->get_components( ).

Z.B. Neue Komponente erzeugen
        ls_comp-name =  'CELL'.
        ls_comp-type ?= cl_abap_datadescr=>describe_by_name( 'LVC_T_STYL' ).
* Hinzufügen
        APPEND ls_comp TO me->lt_comp.
* Die neue Struktur erzeugen
        lo_struc_new = cl_abap_structdescr=>create( me->lt_comp ).
 


Nachtrag
Dient nur als Beispiel

Grüße 4Byte

hi,
ja es werden mit dieser Methode erstmal alle Komponente einer Struktur ermittelt, und diese können dann in die iTab übernommen werden. ist ok.
ABER..
wenn ein Feld vom Typ eine tiefe Struktur ist, d.h. es soll dann über diese Struktur weitere Schleife laufen... usw. und hier habe ich ein Problem.. entweder kann man x-mal die Loop Schleifen einbauen, oder rekursive arbeiten... aber dafür habe ich keinen Beispiel gefunden.. :(
isp
ForumUser
 
Beiträge: 31
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon 4byte » 03.08.2018, 11:04

Na der rekursive Aufruf waäre dann ungefährt so:
Code: Alles auswählen
method get_struct
*Hole die Komponenten der Struktur
--> Siehe mein erster beitrag
*Hat die Struktur eine Komponente die wieder eine Struktur hat?
Ich Meine hierfür gibt es Fubas, die dir den Typ der Kopmponente holen. Weis ich grad nicht auswendig
*Wenn ja dann Aufruf der Methode get_struct
me->get_struct(importing is_struct)
*Wenn Nein Abbruch --> Kein rekursiver Aufruf mehr  

endmethod
 


Ich hoffe ich hab dich richtig verstanden :wink:
Es gibt 10 Menschen die binär verstehen :)
4byte
ForumUser
 
Beiträge: 91
Registriert: 24.10.2017, 09:16
Dank erhalten: 24 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon Icke0801 » 03.08.2018, 12:43

isp hat geschrieben:hi,
ja es werden mit dieser Methode erstmal alle Komponente einer Struktur ermittelt, und diese können dann in die iTab übernommen werden. ist ok.
ABER..
wenn ein Feld vom Typ eine tiefe Struktur ist, d.h. es soll dann über diese Struktur weitere Schleife laufen... usw. und hier habe ich ein Problem.. entweder kann man x-mal die Loop Schleifen einbauen, oder rekursive arbeiten... aber dafür habe ich keinen Beispiel gefunden.. :(


https://www.tricktresor.de/blog/laufzeitinformation-ueber-interne-tabelle/
--
Grüße aus der Endlosschleife
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 62
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 1 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon isp » 06.08.2018, 13:11

Icke0801 hat geschrieben:
isp hat geschrieben:hi,
ja es werden mit dieser Methode erstmal alle Komponente einer Struktur ermittelt, und diese können dann in die iTab übernommen werden. ist ok.
ABER..
wenn ein Feld vom Typ eine tiefe Struktur ist, d.h. es soll dann über diese Struktur weitere Schleife laufen... usw. und hier habe ich ein Problem.. entweder kann man x-mal die Loop Schleifen einbauen, oder rekursive arbeiten... aber dafür habe ich keinen Beispiel gefunden.. :(


https://www.tricktresor.de/blog/laufzeitinformation-ueber-interne-tabelle/


Danke. Diese Lösung geht aber auf die Bretter, sobald ein Feld als Tabellentyp typisiert ist.
isp
ForumUser
 
Beiträge: 31
Registriert: 29.02.2012, 12:25
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Struktur dynamisch bearbeiten

Beitragvon Icke0801 » 06.08.2018, 18:53

isp hat geschrieben:
Danke. Diese Lösung geht aber auf die Bretter, sobald ein Feld als Tabellentyp typisiert ist.


Ich hab grad kein System.
Was sagt der debugger?
--
Grüße aus der Endlosschleife
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 62
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 1 mal
Ich bin: Entwickler/in


Zurück zu ABAP Objects®

  Aktuelle Beiträge   
HUMV4-IDENT Handling Unit Tabelle
vor 4 Stunden von ewx 1 Antw.
Transaktion für Pflege Custom. Tabelle
vor 7 Stunden von DeathAndPain 4 Antw.
Kommunikation von Klassen und Methoden
vor 9 Stunden von 4byte 5 Antw.
CL_BCS_MESSAGE Fehler
Gestern von Haubi 3 Antw.
Alte Einträge aus der Tabelle SOFFCONT1, SOOD, SOST löschen
vor 21 Stunden von Tron 11 Antw.

  Ähnliche Beiträge beta
wie kann ich diese Struktur bearbeiten in OO??
19.12.2007, 13:11 von mazu 0 Antw.
Datenbanktabelle bearbeiten
25.09.2013, 13:24 von a-dead-trousers 6 Antw.
Splitterposition dynamisch setzen
05.10.2006, 09:53 von Nordlicht 3 Antw.
Methodennamen dynamisch ermitteln
09.11.2006, 13:24 von ST22 2 Antw.
Sturktur dynamisch erstellen
23.02.2007, 13:11 von babap 7 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]