dynamische Struktur abgrasen

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

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

dynamische Struktur abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo,

bin gerade in einem Badi, was über die Signatur (=Schnittstelle) u. a. eine Variable I_PARAMETER_STRUCTURE vom Typ TABNAME mitbringt, in der verschiedene DDIC-Strukturen stehen können als CHAR30. Diesen Strukturen gemein sind u. a. die Felder FALNR und PATNR. Die möchte ich absaugen.

Mein Wunsch ist es, eine einzige Variable zu definieren, die abhängig vom Inhalt in I_PARAMETER_STRUCTURE den passenden Typ erhält. So spare ich mir viele IF-Anweisungen, weil ich schreibfaul bin.

Ich habe es probiert mit:

Code: Alles auswählen.

  DATA: lr_data               TYPE REF TO data.
  DATA: lr_container          TYPE REF TO cl_ishmed_any_container.
  FIELD-SYMBOLS <parameter>   TYPE any.

CREATE OBJECT lr_container.
GET REFERENCE OF <parameter> INTO lr_data.
lr_container->set_content(
EXPORTING
          i_content   = lr_data
          i_deep_copy = cl_ishmed_any_container=>co_true ).
<parameter> erhält die Werte von PATNR und FALNR bereits über die Badi-Schnittstelle und kleineren Anpassung mittels ASSIGN, ich kann sie nur nicht auslesen, weil es keine Struktur ist.

Eine andere, noch einfachere Möglichkeit, die ich probierte, ist diese:

Code: Alles auswählen.

        data: l_type TYPE TABNAME,
              l_tdyn  type REF TO data. "dynamischer Typ

        l_type = I_PARAMETER_STRUCTURE.

        FIELD-SYMBOLS: <ls_dyn> TYPE any. "dynamische Struktur

        CREATE DATA l_tdyn type (l_type).
        ASSIGN l_tdyn->* TO <ls_dyn>. "<ls_occupancy>. "<ls_doc_list>.

        l_patnr = <ls_dyn>-patnr.
        l_falnr = <ls_dyn>-falnr.
Bei Zuweisung von l_patnr und l_falnr knallt es, weil <ls_dyn> keine Struktur ist. Wie bringe ich dem Compiler bei, dass ich eine Struktur mit Feldern will? ;-)
Natürlich bekomme ich die Sache anders zum Laufen, aber ich möchte elegant programmieren, stehe aber gerade auf dem Schlauch. :-)

VG
sapdepp

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


Re: dynamische Struktur abgrasen

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Auf alle Fälle deine zweite Variante und Zugriff auf die Felder mittels ASSIGN COMPONENT ... OF STRUCTURE ... TO ...

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
sapdepp

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: dynamische Struktur abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Und schon geht's.

Da ich in <PARAMETER> ja die Struktur quasi schon drin habe, hab ich das Coding noch ausgedünnt.

Code: Alles auswählen.

      
IF <parameter> IS ASSIGNED.

  data:
*       l_tabname TYPE TABNAME,
*       l_tdyn    type REF TO data, "dynamischer Typ
        l_comp1   TYPE STRING,
        l_comp2   TYPE STRING.

*  l_tabname = I_PARAMETER_STRUCTURE.

  FIELD-SYMBOLS:
*                <ls_tdyn> TYPE any, "dynamische Struktur
                 <l_patnr> type any,
                 <l_falnr> TYPE any.

*  CREATE DATA l_tdyn type (l_tabname).

*  ASSIGN l_tdyn->* TO <ls_tdyn>. "<ls_occupancy>. "<ls_doc_list>.

  l_comp1 = `PATNR`.
  l_comp2 = `FALNR`.
  ASSIGN COMPONENT l_comp1 OF STRUCTURE <parameter> to <l_patnr>. "<ls_tdyn>.
  ASSIGN COMPONENT l_comp2 OF STRUCTURE <parameter> to <l_falnr>. "<ls_tdyn>.

ENDIF.
Passt. Thanks!!!

Re: dynamische Struktur abgrasen

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
a-dead-trousers hat geschrieben:Auf alle Fälle deine zweite Variante und Zugriff auf die Felder mittels ASSIGN COMPONENT ... OF STRUCTURE ... TO ...

lg ADT
Meine bevorzugte Variante ( aber allgemein und nicht im ISH), da im weiteren Verlauf des Programms besser lesbar, wenn man weiß, dass die Felder definitiv in der Übergabestruktur sind:

Code: Alles auswählen.

DATA: BEGIN OF ls_known_data,
        patnr type ...,
        falnr type ...,
      END OF ls_known_data.

....
MOVE-CORRESPONDING <ls_dyn> to ls_known_data.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: dynamische Struktur abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Das ist natürlich noch einfacher. ;-)

Seite 1 von 1

Vergleichbare Themen

3
Antw.
4376
Views
Dynamische Struktur
von PeterPaletti » 13.07.2015 16:05 • Verfasst in ABAP® für Anfänger
1
Antw.
11380
Views
Dynamische Struktur anlegen
von Hunter » 01.06.2006 12:16 • Verfasst in ABAP Objects®
4
Antw.
2614
Views
CL_SALV_TABLE - Dynamische Struktur
von zer0 » 12.03.2013 11:44 • Verfasst in ABAP Objects®
4
Antw.
3639
Views
Dynamische Struktur bei Feldsymbol
von BesenWesen » 10.08.2006 09:54 • Verfasst in ABAP® für Anfänger
5
Antw.
6613
Views
RTTI - Dynamische Struktur erzeugen
von Thomas R. » 28.04.2017 11:33 • Verfasst in ABAP® Core

Ü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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140