Dynamische Typisierung

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

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

Dynamische Typisierung

Beitrag von Gast ( / / 0 / 3 ) »
Hallo zusammen,

ich sitze vor folgendem Problem:
Ich habe eine interne Tabelle mit verschiedenen Feldtypisierungen.

Bsp.:

Code: Alles auswählen.

Begin of type t_pers,
 mzbt   type p0000-mzbt,
 ghkl   type p0000-ghkl,
 kkjl   type p0000-kkjl,
end of t_pers.
Jetzt kann mein Programm in unterschiedlichen Betriebsarten ausgeführt werden. Je nach Betriebsart müsste ich zur weiteren Verwendung das erste Feld des Typs t_pers ändern.

Wenn z.B. die Betriebsart 2 ausgewählt wurde, dann soll die Typisierung folgendermaßen aussehen.

Code: Alles auswählen.

Begin of type t_pers,
 wwxy   type p0000-wwxy,
 ghkl   type p0000-ghkl,
 kkjl   type p0000-kkjl,
end of t_pers.
Meine Frage ist nun die folgende. Kann man die Feldtypen irgendwie zur laufzeit per Stringvariable generieren? So ähnlich wie bei der Dynamischen Selektion.

Ich dachte mir, ich schreibe die Felder, die sich ändern können in einen Arbeitsbereich. Meinetwegen so:

Code: Alles auswählen.

begin of type t_dyntype,
   name(20) type c,
   type(30) type c,
end of t_dyntype

Data: wa_dyntype type t_dyntype.
Dann frag ich ab, welche Betriebsart ausgewählt wurde. Und fülle je nach Betriebsart die Felder des Arbeitsbereiches WA_DYNTYPE unterschiedlich.

Code: Alles auswählen.

Bsp.

Select Case betart.   "Betriebsart
  When '1'.
    wa_dyntype-name = 'mzbt'.
    wa_dyntype-type = 'p0000-mzbt'.
  When '2'.
    wa_dyntype-name = 'wwxy'
    wa_dyntype-type = 'p0000-wwxy'
Endcase.

Anstelle der fixen Typisierungen in dem Typ t_pers werden dann die beiden Felder der WA_DYNTYPE gesetzt.

Geht so etwas? Und wenn ja, wie lautet die Syntax?
Ich hab in der SAP Bibliothek bisher nichts finden können.

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Geht es nicht einfacher, wenn du einfach beides in eines reinmachst?

Code: Alles auswählen.

Begin of type t_pers, 
 mzbt   type p0000-mzbt, 
 wwxy   type p0000-wwxy, 
 ghkl   type p0000-ghkl, 
 kkjl   type p0000-kkjl, 
end of t_pers.
Mit sowas kann man doch auch arbeiten.

Beitrag von Gast ( / / 0 / 3 ) »
Nein, geht leider nicht. Die Sache ist die, dass ich die interne Tabelle anschließend sortiere und mit den Ereignissen AT NEW ***, AT LAST usw. arbeite.

Alternativ wäre, dass ich für jede Betriebsart eine eigene interne Tabelle anlege mit unterschiedlichen Typen. Aber ich hätte es gerne was eleganter, sofern das möglich ist.

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Anonymous hat geschrieben:Nein, geht leider nicht. Die Sache ist die, dass ich die interne Tabelle anschließend sortiere und mit den Ereignissen AT NEW ***, AT LAST usw. arbeite.

Alternativ wäre, dass ich für jede Betriebsart eine eigene interne Tabelle anlege mit unterschiedlichen Typen. Aber ich hätte es gerne was eleganter, sofern das möglich ist.
ach das Problem mit "AT NEW xyz", das kannst umgehen wenn du beim LOOP das ASSIGNING machst.

Beitrag von Gast ( / / 0 / 3 ) »
In wie fern? Was bewirkt denn ASSIGNING?

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Anonymous hat geschrieben:In wie fern? Was bewirkt denn ASSIGNING?
Mit assinging machst du sozusagen einen Zeiger auf die Jeweilige Zeile.
Vorteile:
- "AT NEW" macht nicht plötzlich igenwelche "#"
- leicht bessere performance, da Zeiger und deshalb keine Werteübergabe an eine Workarea
- und wenn du was ändern willst, geht das direckt ohne ein MODIFY

Beitrag von Gast ( / / 0 / 3 ) »
Hmmm...okay !!! Danke schonmal.

Aber was sagst du zur Fragestellung dynamische Typisierung. Geht so etwas in ABAP?


So in der Art wie beim dynamischen SELECT

Code: Alles auswählen.

SELECT [dynfeld] FROM [dyntab] where [dynbed]
in den [] stehen dann jeweils Variablen mit bestimmtem Inhalt in form einer Zeichenkette.

Beitrag von ion ( / / 0 / 3 ) »
Du könntest natürlich auch dynamisch ein ABAP generieren un das wiederum ausführen, entweder transient über einen subroutine Pool oder direkt mit Table insert im Repository (INSERT REPORT).
-> SUBMIT

Code: Alles auswählen.

TYPES: line(72) TYPE c. 
DATA:  itable TYPE STANDARD TABLE OF line. 
APPEND 'REPORT testrep.' TO itable. 
APPEND 'WRITE ''test''.' TO itable. 
INSERT REPORT 'Z_TESTREPORT' FROM itable. 
oder einfacher eine dynamische Generierung von Datenobjekten :

Code: Alles auswählen.

DATA: dref  TYPE REF TO DATA,
      table LIKE dd02l-tabname VALUE 'USR02'.

FIELD-SYMBOLS: <fs> TYPE ANY.

CREATE DATA dref TYPE (table).
ASSIGN dref->* TO <fs>.
Das Feldsymbol fs enthält nun einen Zeiger auf die neue, dynamische Structur ...

Beitrag von ion ( / / 0 / 3 ) »
Anonymous hat geschrieben:Hmmm...okay !!! Danke schonmal.

Aber was sagst du zur Fragestellung dynamische Typisierung. Geht so etwas in ABAP?


So in der Art wie beim dynamischen SELECT

Code: Alles auswählen.

SELECT [dynfeld] FROM [dyntab] where [dynbed]
in den [] stehen dann jeweils Variablen mit bestimmtem Inhalt in form einer Zeichenkette.
Du kannst natürlich dynamisch eine Tabelle in Deinem Select unterbringen :

SELECT COUNT( * ) FROM (table) .... in runden Klammern

Beitrag von Gast ( / / 0 / 3 ) »
Ok...danke schonmal!

Könnte ich denn auch in einer internen Tabelle ein Feld anlegen, welches ein Feld-Symbol ist???

Also so:

Code: Alles auswählen.

Types: Begin of type my_type,
          <fs1>,
          zzabc type p0000-zzabc,
          zzdef type p0000-zzdef,
       end of type my_type.
das Feldsymbol wurd voher typisierung und per Assign einem bestimmten Feld zugewiesen.

Würde das gehen? :?:

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

da fehlt noch was.

Du hättest zwar den "Zeiger" in der Tabelle, aber das Feld mit dem Inhalt müsstes Du auch noch irgendwo haben.

Vielleicht machst Du ein "neutrales" Feld (Character 16) hinter das Field-Symbol und läßt das Field-Symbol drauf zeigen (im richtigen Format), dann ginge es.

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

6
Antw.
6443
Views
Dynamische Typisierung?
von cortex » 18.03.2014 09:10 • Verfasst in ABAP Objects®
1
Antw.
903
Views
Dynamische Typisierung durch Changing Parameter
von Coffeebean » 11.07.2021 12:31 • Verfasst in ABAP Objects®
10
Antw.
4848
Views
Problem: Unterprogramm und Parameter(typisierung)
von MacLeod » 25.01.2012 16:31 • Verfasst in ABAP® Core
1
Antw.
1336
Views
Problem bei ASSIGN COMPONENT mit dynamischer Typisierung
von Luca2501 » 17.09.2020 11:09 • Verfasst in ABAP® Core
4
Antw.
1857
Views
Typisierung bei Select-Options und Methoden-Exportparameter
von cecslucas » 06.08.2019 11:40 • 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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 20 / 2426
Zeilenumbrüche ersetzen
vor 23 Stunden von ralf.wenzel 6 / 210
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1584

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

Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 20 / 2426
Zeilenumbrüche ersetzen
vor 23 Stunden von ralf.wenzel 6 / 210
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1584

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 649
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2280
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8864