Show TOC

Dynamische ProgrammierungLocate this document in the navigation structure

In ABAP wird unter dynamischer Programmierung unter anderem die Verwendung von nicht vollständig typisierten oder untypisierten Datenobjekten verstanden. Dies erlaubt es, generische Unterprogramme und Methoden zu erstellen, die abhängig von den Typen der Eingabedaten arbeiten. Die RTTS (Runtime Type Services) erlauben es, programmatisch die Eigenschaften von Typen zu verarbeiten (RTTI - Runtime Type Information). Ein verwandter Service ist der RTTC (Runtime Type Creation), welcher es ermöglicht, während der Programmausführung neue Typen zu erstellen und entsprechende Datenobjekte zu erzeugen.

Weitere Techniken der dynamischen Programmierung sind dynamische Token-Angaben und die vollständig generische Programmerstellung. Diese beiden Techniken müssen aber sehr vorsichtig verwendet werden, da sie in einem Programm leicht Ausnahmen auslösen können. Weiterhin können sie erhebliche Sicherheitsrisiken darstellen, wenn Eingaben, die von außen in ein Programm gelangen, für dynamische Programmanteile verwendet werden. Hier müssen entsprechende Überprüfungen, z.B. mit der Klass cl_abap_dyn_prg, stattfinden, um Missbrauch zu vermeiden.

Zugriff auf generische Datenobjekte

Feldsymbole spielen eine wichtige Rolle bei der Verwendung generischer Typen. Durch Verwendung des Befehls ASSIGN COMPONENT kann mittels Feldsymbol auf Komponenten nicht vollständig bekannter Strukturen zugegriffen werden.

Beispiel

Die Methode get_c2_structure der Klassse cl_my_class liefert eine Referenz auf eine Struktur, die mindestens die ganzzahlige Komponente c2 enthält, ansonsten aber unspezifiziert bleibt.

               DATA struc TYPE REF TO DATA.


               FIELD-SYMBOLS: <struc> TYPE DATA,
                <comp> TYPE i.

struc = cl_my_class=>get_c2_structure( ).

ASSIGN struc->* TO <struc> CASTING.
ASSIGN COMPONENT 'C2' OF <struc> TO <comp>.
            

RTTI

Durch Beschreibungsmethoden in Typbeschreibungsklassen realisierte Bestimmung von Datentypen während der Programmlaufzeit.

Beispiel

Erstellen einer internen Tabelle components, die Informationen zu den Spalten der Datenbanktabelle T100 enthält.

               DATA(components) =
  CAST cl_abap_structdescr(
       cl_abap_typedescr=>describe_by_name( 'T100' )
       )->components.