Nur mit Field-Symbole arbeiten..geht das?

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

Nur mit Field-Symbole arbeiten..geht das?

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo liebe Abap-Gemeinde.

Ich hatte mir zuvor da noch keine so großen Gedanken gemacht, aber jetzt wo ich zu dem Punkt gekommen bin, auch mit den erstellten zu arbeiten, da frag ich mich ob das überhaupt möglich ist.

Aber von vorn.
Ich erstelle dynamisch eine tiefe Struktur und gleichzeitig dazu noch ne int. Tabelle mit dem Befehl (GENERATE SUBROUTINE POOL). Wie schon gesagt, alles dynamisch, also es existiert kein DDIC Objekt dazu.

Nach dem generieren habe ich 2 Datanreferenzen (type ref to data) wo einer auf die struktur zeigt, und der 2te auf die int Tabelle welche als Aufbau die Struktur hat.

Nun weiße ich diese Datenreferenzen auf Feldsymbole:

Code: Alles auswählen.

 ASSIGN rd_struct->* TO <fs_struc>.
  ASSIGN rd_tab->* TO <fs_tab>.
nun ist es so, dass ich logischerweise Daten in die Struktur schreiben will und diese dann auch in der Tabelle sichern will.

Aber wie greife ich auf die einzelnen Werte zu???

Der Aufbau der Struktur ist in etwa so:

Code: Alles auswählen.

feld
Tabelle
   Feld
   Feld
   Feld
Tabelle
   Feld
   Feld
   Feld
Tabelle
   Feld
   Feld
   Feld
Tabelle
   Feld
   Tabelle
      Feld
      Feld
Sprich die Struktur besitzt ein Feld und dann noch 4 Tabellen und in der 4ten Tabelle ist nochmal eine Tabelle.

Ich hoffe das ist ansatzweise verständlich was ich da schreib ;)

Wie komme ich nun auf die einzelnen komponenten der Struktur?
Ich weiß da gibts nen Befehl:
ASSIGN COMPONENT name OF STRUCTURE struc TO <fs>.

Aber den "name" kenn ich nicht und "struc" gibt es nur als Feldsymbol.

THX 4 Help

Gruß
Markus

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


Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hab grad soweit getestet und gemerkt, dass man bei dem Befehl
ASSIGN COMPONENT name OF STRUCTURE struc TO <fs>.

Bei struc auch ein Feldsymbol angeben kann. Als Name nehm ich nen index (fortlaufende Zahl).


somit hab ich in <fs> die Componente der Struktur welche zahl grad in index steht.
blöd dabei ist, dass die Unterstrukturen in der Struktur eine Komponente sind, sprich ich hab in <fs> die unterstruktur stehen.

Gibt es ne möglichkeit abzufragen ob ein FeldSymbol auf ein einzlnes Feld zeigt oder auf eine Struktur oder was auch immer?
Damit ich die Felder dieser Unterstruktur auch einzeln ansprechen kann.

Thx 4 help.

gruß
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Habs gefunden.

Code: Alles auswählen.

TYPE-POOLS: sydes.
DATA:
       desc              TYPE sydes_desc.

DESCRIBE FIELD <fs> INTO desc.
da kann ich dann feststellen obs ne struktur ist oder nur ein feld...bei strukturen, kann ich sogar die Feldnamen auslesen.
Da is eigentlich der Hacken...das steht nur da, wenn es eine Struktur ist.
Mein erstes Feld, also das allererste in der gesamtstruktur, das erkenn ich zwar mit dem Befehl, aber ich kenn den Namen nicht des Feldes, als name steht der Funktionsgruppen Name als Ergebnis drin :?: :!:

Kann mir vllt dazu jemand noch was schreiben? Wie ich den Namen der ersten Komponente herausfind?

THX
Gruß
Markus

Beitrag von black_adept (Top Expert / 4093 / 128 / 940 ) »
Lies mal die Doku zu der Klasse CL_ABAP_STRUCTDESCR. Damit solltest du weiterkommen.

Da bekommst du auch deine Feldnamen in korrekter Schreibweise ( in der SYDES-Tabelle werden längere Feldnamen nämlich über 2 Tabellenzeilen verteilt- probier es einfach mal aus )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
black_adept hat geschrieben:Lies mal die Doku zu der Klasse CL_ABAP_STRUCTDESCR. Damit solltest du weiterkommen.

Da bekommst du auch deine Feldnamen in korrekter Schreibweise ( in der SYDES-Tabelle werden längere Feldnamen nämlich über 2 Tabellenzeilen verteilt- probier es einfach mal aus )
Hi black_adept.

Ja, danke erstmal. Damit gehts, aber leider auch nur halb. Hier ist es nun genau andersrum...da bekomm ich von meiner Oberstruktur die Feldnamen (also das eine Feld und die 4 Tabellen(bzw. sind ja auch nur Strukturen), aber die Feldnamen der einzelnen Tabellen, an die komm ich net ran.

So schauts aus:

Code: Alles auswählen.

  DATA:
     descr_ref TYPE REF TO cl_abap_structdescr,
     descr_ref2 TYPE REF TO cl_abap_structdescr.

  FIELD-SYMBOLS:
    <comp_wa> TYPE abap_compdescr,
    <comp_wa2> TYPE abap_compdescr.



  descr_ref ?= cl_abap_typedescr=>describe_by_data( <fs_struc> ).

  WRITE: / 'Typename     :', descr_ref->absolute_name.
  WRITE: / 'Kind         :', descr_ref->type_kind.
  WRITE: / 'Length       :', descr_ref->length.
  WRITE: / 'Decimals     :', descr_ref->decimals.
  WRITE: / 'Struct Kind  :', descr_ref->struct_kind.
  WRITE: / 'Components'.
  WRITE: / 'Name              Kind   Length   Decimals'.

  LOOP AT descr_ref->components ASSIGNING <comp_wa>.
    IF <comp_wa>-type_kind EQ 'u'.

      descr_ref2 ?= cl_abap_typedescr=>describe_by_data( <comp_wa> ).

      LOOP AT descr_ref2->components ASSIGNING <comp_wa2>.
        WRITE: / <comp_wa2>-name, <comp_wa2>-type_kind,
                 <comp_wa2>-length, <comp_wa2>-decimals.
      ENDLOOP.
    ELSE.
      WRITE: / <comp_wa>-name, <comp_wa>-type_kind,
             <comp_wa>-length, <comp_wa>-decimals.
    ENDIF.
  ENDLOOP.
Im 2ten Loop wollte ich eben von einer gefundenen Struktur wieder die einzelnen Felder rausbekommen...aber da gibt er mir die Informationen zu der Tabelle (bzw. is ja noch nur ne Struktur) zurück...
Wo hab ich denn da nun wieder nen Denkfehler drin?

Thx 4 help

Gruß
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Ich habs ;)

Code: Alles auswählen.

 descr_ref ?= cl_abap_typedescr=>describe_by_data( <fs_struc> ).

  LOOP AT descr_ref->components ASSIGNING <comp_wa>.

    IF <comp_wa>-type_kind = 'u'.
      ASSIGN COMPONENT sy-tabix  OF STRUCTURE <fs_struc> TO <gubbel>.
      descr_ref2 ?= cl_abap_typedescr=>describe_by_data( <gubbel> ).

      LOOP AT descr_ref2->components ASSIGNING <comp_wa2>.

        IF <comp_wa2>-type_kind = 'u'.
          ASSIGN COMPONENT sy-tabix  OF STRUCTURE <gubbel> TO <gubbel2>.
          descr_ref3 ?= cl_abap_typedescr=>describe_by_data( <gubbel2> ).

          LOOP AT descr_ref3->components ASSIGNING <comp_wa3>.

            WRITE: / <comp_wa3>-name, <comp_wa3>-type_kind,
                   <comp_wa3>-length, <comp_wa3>-decimals.
          ENDLOOP.
        ELSE.
          WRITE: / <comp_wa2>-name, <comp_wa2>-type_kind,
                 <comp_wa2>-length, <comp_wa2>-decimals.
        ENDIF.
      ENDLOOP.
    ELSE.
      WRITE: / <comp_wa>-name, <comp_wa>-type_kind,
             <comp_wa>-length, <comp_wa>-decimals.
    ENDIF.
  ENDLOOP.
So bekomm ich alle Feldnamen der Struktur ...natürlich muss man das nun etwas anpassen...sonst weiß man ja nicht welches Feld wo hin gehört ;) aber das sollte dann hoffentlich nicht so schlimm sein.

Jetzt muss ich auch nur noch testen, ob das irgendwie dynamisch geht, ich weiß ja eigentlich nicht wie tief die Struktur ist :oops:

Gruß
Markus

Seite 1 von 1

Vergleichbare Themen

10
Antw.
3974
Views
Arbeiten mit Field-Symbols
von spaceman21th » 17.05.2006 15:47 • Verfasst in ABAP® für Anfänger
5
Antw.
4041
Views
At New <field> gibt immer field trotz gelichen fields
von mnd » 27.04.2012 15:42 • Verfasst in ABAP® für Anfänger
1
Antw.
1243
Views
Symbole im Textcontrol ausgeben
von Gast » 02.02.2006 17:26 • Verfasst in ABAP® Core
8
Antw.
7619
Views
Symbole im Alv-Grid anzeigen
von pohlmann-schwarza » 18.09.2008 10:24 • Verfasst in ABAP Objects®
7
Antw.
5615
Views
Kürzel für Symbole / ICON
von cut1 » 14.12.2006 15:32 • 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 11 Stunden von msfox 18 / 11013
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 27 / 4131
IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 115

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 11 Stunden von msfox 18 / 11013
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 27 / 4131
IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 115

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 115
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3050
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9644