Erste Schritte
Grundlegende Methoden und Konzepte anwenden
Mit lokalen Klassen arbeiten
Daten aus der Datenbank lesen
Mit strukturierten Datenobjekten arbeiten
Mit komplexen internen Tabellen arbeiten
Datenbankänderungen mit Business Objects implementieren
Das ABAP-RESTful-Anwendungsprogrammiermodell beschreiben

Mit grundlegenden Datenobjekten und Datentypen arbeiten

Objectives

After completing this lesson, you will be able to:
  • Deklarieren Sie Datenobjekte.
  • Ordnen Sie Werte zu.

Datenobjekte in ABAP

Ein Datenobjekt in einem ABAP-Programm bildet einen reservierten Bereich des Programmspeichers ab.

ABAP kennt drei Arten von Datenobjekten: Variablen, Konstanten und Literale.

Variablen

Eine Variable ist ein Datenobjekt mit einem Inhalt, der sich während der Laufzeit ändern kann. Eine Variable ist durch einen Namen gekennzeichnet. Der Name wird auch verwendet, um das Datenobjekt zur Laufzeit zu adressieren. Der Startwert einer ABAP-Variable ist immer wohldefiniert.

Konstanten

Konstanten ähneln Variablen. Im Gegensatz zu Variablen ist der Wert jedoch im Quelltext fest programmiert und darf sich während der Laufzeit nicht ändern. Konstanten haben wie Variablen einen Namen, über den sie wiederverwendet werden können.

Literale

Der Wert von Literalen ist ebenfalls im Quelltext fest programmiert. Im Gegensatz zu Konstanten haben Literale keinen Namen. Aus diesem Grund können Sie ein Literal nicht wiederverwenden. Verwenden Sie Literale nur, um die Werte für Konstanten und die Startwerte für Variablen anzugeben.

ABAP-Datenobjekte sind immer typisiert: Jedes Datenobjekt basiert auf einem Datentyp, der bestimmt, welche Art von Informationen es enthalten kann. Der Datentyp eines ABAP-Datenobjekts bleibt während der Programmausführung unverändert.

Deklaration von Variablen

Eine Variable in einem ABAP-Programm wird mit dem Schlüsselwort DATA deklariert.

Eine DATA-Anweisung besteht aus drei Teilen. Sehen wir uns die einzelnen Teile genauer an.

DATEN
Auf das Schlüsselwort DATA folgt der Name der Variablen. Der Name einer Variablen kann maximal 30 Zeichen umfassen. Er kann die Zeichen A-Z, die Ziffern 0-9 und einen Unterstrich enthalten. Der Name muss mit einem Buchstaben oder einem Unterstrich beginnen.
TYPE
Nach dem Zusatz TYPE wird der Typ der Variablen angegeben. Im Beispiel werden die eingebauten Typen I (für Integerzahlen) und STRING (Zeichenfolge mit variabler Länge) verwendet.
VALUE
Der Zusatz VALUE ist optional und kann verwendet werden, um einen Startwert für die Variable anzugeben. Wenn VALUE fehlt, wird die Variable mit einem Initialwert angelegt, der vom technischen Typ der Variable abhängt.

Quellen für ABAP-Datentypen

ABAP bietet folgende Quellen für Datentypen:

Eingebauter ABAP-Typ
ABAP weist einen Satz mit 14 eingebauten Datentypen für einfache numerische, zeichenartige und binäre Datenobjekte auf.
TYPES-Anweisung
Die Anweisung TYPES ermöglicht die Definition von Datentypen und deren Wiederverwendung an verschiedenen Stellen, je nach Ort der Definition.
ABAP Dictionary
Das ABAP Dictionary ist Bestandteil des ABAP Repository. Es verwaltet unter anderem globale Datentypen, die systemweit verfügbar sind. ABAP-Dictionary-Typen definieren nicht nur technische Eigenschaften, sondern fügen semantische Informationen, z.B. Bezeichner, hinzu. ABAP-Dictionary-Typen sind insbesondere bei der Implementierung von Benutzungsoberflächen nützlich.

Probieren Sie es aus: Vordefinierte ABAP-TYPES

  1. Legen Sie wie in der ersten Übung dieser Schulung eine neue globale Klasse an, die das Interface IF_OO_ADT_CLASSRUN implementiert.
  2. Kopieren Sie das folgende Code-Snippet in den Implementierungsteil der Methode if_oo_adt_classrun~main( ):
    Code Snippet
    12345678910111213141516171819202122232425
    * Data Objects with Built-in Types ********************************************************************** " comment/uncomment the following declarations and check the output DATA variable TYPE string. * DATA variable TYPE i. * DATA variable TYPE d. * DATA variable TYPE c LENGTH 10. * DATA variable TYPE n LENGTH 10. * DATA variable TYPE p LENGTH 8 DECIMALS 2. * Output ********************************************************************** out->write( 'Result with Initial Value)' ). out->write( variable ). out->write( '---------' ). variable = '19891109'. out->write( 'Result with Value 19891109' ). out->write( variable ). out->write( '---------' ).
  3. Drücken Sie STRG + F3, um die Klasse zu aktivieren, und F9, um sie als Konsolen-App auszuführen.
  4. Analysieren Sie die Konsolenausgabe. Entkommentieren Sie verschiedene Deklarationen der Variable. Probieren Sie eigene Deklarationen aus, um sich mit den Konzepten vertraut zu machen.

Konstanten und Literale

Deklaration von Konstanten

Eine Konstante ist ein Datenobjekt mit einem fest programmierten Wert, der während der Laufzeit nicht geändert werden darf. Ein Schreibzugriff auf eine Konstante führt zu einem Syntaxfehler.

In ABAP deklarieren Sie eine Konstante mit dem Schlüsselwort CONSTANTS. Eine CONSTANT-Anweisung besteht aus den gleichen Bestandteilen wie eine DATA-Anweisung. Der einzige Unterschied besteht darin, dass der Zusatz VALUE obligatorisch ist.

Der Zusatz VALUE kann in der Spezialform VALUE IS INITIAL verwendet werden, wenn der Wert der Konstante typgerecht initial sein soll.

Literale in ABAP

Literale sind anonyme Datenobjekte mit einem fest programmierten Wert. Literale werden häufig verwendet, um nicht-initiale Werte für Konstanten und nicht-initiale Startwerte für Variablen zu definieren.

Technisch gesehen können Sie überall in Ihrem Quelltext Literale verwenden. Um die Lesbarkeit und Wartbarkeit zu unterstützen, wird empfohlen, stattdessen Konstanten zu definieren und zu verwenden.

ABAP kennt drei Arten von Literalen:

  • Zahlenliterale sind ganze Zahlen mit oder ohne Vorzeichen. Zahlenliterale weisen in der Regel den Datentyp I auf. Nur wenn der Wert zu groß für den Datentyp I ist, wird Typ P mit ausreichender Länge und ohne Dezimalstellen verwendet.
  • Textliterale sind Zeichenketten in einfachen Anführungszeichen. Textliterale weisen den Typ C auf. Die Länge wird aus dem Inhalt in Anführungszeichen abgeleitet. Nachstehende Leerzeichen werden ignoriert.
  • Stringliterale sind Zeichenketten in einem Paar Backquotes (`). Stringliterale weisen den Typ STRING auf. Sie sollten verwendet werden, um Werte für Datenobjekte vom Typ String bereitzustellen.

Probieren Sie es aus: Datenobjekte

  1. Legen Sie wie in der ersten Übung dieser Schulung eine neue globale Klasse an, die das Interface IF_OO_ADT_CLASSRUN implementiert.
  2. Kopieren Sie das folgende Code-Snippet in den Implementierungsteil der Methode if_oo_adt_classrun~main( ):
    Code Snippet
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
    * Example 1: Local Types ********************************************************************** * Comment/Uncomment the following lines to change the type of my_var TYPES my_type TYPE p LENGTH 3 DECIMALS 2. * TYPES my_type TYPE i . * TYPES my_type TYPE string. * TYPES my_type TYPE n length 10. * Variable based on local type DATA my_variable TYPE my_type. out->write( `my_variable (TYPE MY_TYPE)` ). out->write( my_variable ). * Example 2: Global Types ********************************************************************** * Variable based on global type . " Place cursor on variable and press F2 or F3 DATA airport TYPE /dmo/airport_id VALUE 'FRA'. out->write( `airport (TYPE /DMO/AIRPORT_ID )` ). out->write( airport ). * Example 3: Constants ********************************************************************** CONSTANTS c_text TYPE string VALUE `Hello World`. CONSTANTS c_number TYPE i VALUE 12345. "Uncomment this line to see syntax error ( VALUE is mandatory) * constants c_text2 type string. out->write( `c_text (TYPE STRING)` ). out->write( c_text ). out->write( '---------' ). out->write( `c_number (TYPE I )` ). out->write( c_number ). out->write( `---------` ). * Example 4: Literals ********************************************************************** out->write( '12345 ' ). "Text Literal (Type C) out->write( `12345 ` ). "String Literal (Type STRING) out->write( 12345 ). "Number Literal (Type I) "uncomment this line to see syntax error (no number literal with digits) * out->write( 12345.67 ).
  3. Drücken Sie STRG + F3, um die Klasse zu aktivieren, und F9, um sie als Konsolen-App auszuführen.
  4. Probieren Sie mit dem Quelltext Verschiedenes aus, um sich mit den Konzepten vertraut zu machen.
    • Entkommentieren Sie verschiedene Deklarationen von my_type, und verwenden Sie F2 und F3, um die Definition der Variable my_variable zu analysieren.
    • Verwenden Sie F2 und F3, um die Definition der Variable airport zu analysieren.
    • Entkommentieren Sie die Definition der Konstante c_text2, um den Syntaxfehler anzuzeigen.
    • Entkommentieren Sie die letzte Quelltextzeile, um den Syntaxfehler anzuzeigen.
    • ...

Wertzuweisungen zu Datenobjekten

Verwenden Sie Wertzuweisungen, um den Wert von Variablen zu ändern.

In diesem Video erfahren Sie, wie das funktioniert.

Implizite Typkonvertierungen

Auch wenn ABAP eine typisierte Programmiersprache ist, können bei einer Wertzuweisung der Typ des Quellausdrucks und der Typ der Zielvariablen unterschiedlich sein. Ist dies der Fall, versucht die Laufzeit eine Typkonvertierung durchzuführen.

Wie in der Abbildung dargestellt, sollten Sie aus folgenden Gründen Typkonvertierungen nach Möglichkeit vermeiden:

  • Zusätzlicher Laufzeitverbrauch: Werte mit Typkonvertierungen benötigen mehr Laufzeit als Bewertungen mit identischen Typen.
  • Potenzielle Laufzeitfehler: Einige Kombinationen aus Quelltyp und Zieltyp können zu Laufzeitfehlern führen. Wenn beispielsweise die Zielvariable einen numerischen Typ l und der Quellausdruck einen zeichenartigen Typ aufweist, gibt die Laufzeit einen Fehler aus, wenn der Text nicht in eine Zahl übersetzt werden kann.
  • Möglicher Informationsverlust: Einige Kombinationen aus Quelltyp und Zieltyp führen nicht zu Laufzeitfehlern, sondern zu Datenverlust. Beispiel: Quelle und Ziel sind beide vom Typ C, aber der Typ der Zielvariable ist kürzer. Dann schneidet die Laufzeit den Wert der Quelle einfach ab.

Variablen zurücksetzen

Die Anweisung CLEAR ist eine spezielle Art der Wertzuweisung. Sie wird verwendet, um eine Variable auf ihren typgerechten Initialwert zurückzusetzen.

Notiz

Die CLEAR-Anweisung ignoriert den Startwert aus dem VALUE-Zusatz. Nach CLEAR enthält die Variable immer den typgerechten Initialwert.

Inline-Deklarationen in Wertzuweisungen

In diesem Video erfahren Sie mehr über Inline-Deklarationen und ihre Funktionsweise in Wertzuweisungen.