ABAP- ABAP

ABAP/4
Paradigma Objektorientiert , strukturiert , zwingend
Entworfen von SAP SE
Erstmals erschienen 1983 ; Vor 38 Jahren ( 1983 )
Stabile Version
7.55 / 2. September 2020 ; vor 11 Monaten ( 2020-09-02 )
Schreibdisziplin Statisch , stark , sicher , nominativ
Betriebssystem Plattformübergreifend
Webseite scn .sap .com /community /abap%20scn .sap .com /community /abap
Wichtige Implementierungen
SAP R/2 , SAP R/3 , SAP S/4HANA
Beeinflusst von
Ziel-C , COBOL , SQL

ABAP (Advanced Business Application Programming, ursprünglich Allgemeiner Bericht-Aufbereitungs-Prozessor , Deutsch für "Gesamtbericht Vorbereitung Prozessor") ist eine High-Level - Programmiersprache von dem deutschen erstellten Software - Unternehmen SAP . Es ist derzeit neben Java als Programmiersprache für den SAP NetWeaver Application Server positioniert, der Teil der SAP NetWeaver- Plattform zum Erstellen von Geschäftsanwendungen ist.

Einführung

ABAP ist eine der vielen anwendungsspezifischen Sprachen der vierten Generation ( 4GLs ), die erstmals in den 1980er Jahren entwickelt wurden. Es war ursprünglich die Berichtssprache für SAP R/2 , eine Plattform, die es großen Unternehmen ermöglichte, Mainframe-Geschäftsanwendungen für die Materialwirtschaft und die Finanz- und Betriebsbuchhaltung zu erstellen. ABAP stellt die Integration zwischen unabhängiger Software her.

ABAP verwendet eine Abkürzung für sein A llgemeiner B erichts- A ufbereitungs- P rozessor , Deutsch für "generic Bericht Vorbereitung Prozessor", wurde aber später auf den englischen umbenannt A dvanced B usiness A pplikation P rogramming . ABAP war eine der ersten Sprachen, die das Konzept der Logischen Datenbanken (LDBs) beinhaltete, das einen hohen Abstraktionsgrad von der/den grundlegenden Datenbankebene(n) bietet, die alle Plattformen, Sprachen und Einheiten unterstützt.

Die Sprache ABAP wurde ursprünglich von Entwicklern verwendet, um die SAP R/3- Plattform zu entwickeln. Es sollte auch von SAP-Kunden zur Erweiterung von SAP-Anwendungen verwendet werden – Kunden können benutzerdefinierte Berichte und Schnittstellen zur ABAP-Programmierung entwickeln. Die Sprache war auf eher technische Kunden mit Programmiererfahrung ausgerichtet.

ABAP bleibt die Sprache für die Erstellung von Programmen für das Client-Server- R/3- System, das 1992 erstmals von SAP veröffentlicht wurde. Mit der Entwicklung der Computerhardware in den 1990er Jahren wurden immer mehr Anwendungen und Systeme von SAP in ABAP geschrieben. Bis 2001 wurden alle bis auf die grundlegendsten Funktionen in ABAP geschrieben. 1999 veröffentlichte SAP zusammen mit R/3-Release 4.6 eine objektorientierte Erweiterung von ABAP namens ABAP Objects.

Die aktuelle Entwicklungsplattform NetWeaver von SAP unterstützt sowohl ABAP als auch Java .

ABAP hat eine Abstraktion zwischen den Geschäftsanwendungen, dem Betriebssystem und der Datenbank. Dadurch wird sichergestellt, dass Anwendungen nicht direkt von einem bestimmten Server oder einer bestimmten Datenbankplattform abhängen und problemlos von einer Plattform auf eine andere portiert werden können.

SAP Netweaver läuft derzeit auf UNIX ( AIX , HP-UX , Solaris , Linux ), Microsoft Windows , i5/OS auf IBM System i (ehemals iSeries, AS/400) und z/OS auf IBM System z (ehemals zSeries, S .). /390). Unterstützte Datenbanken sind HANA , SAP ASE (ehemals Sybase), IBM DB2 , Informix , MaxDB , Oracle und Microsoft SQL Server (die Unterstützung für Informix wurde in SAP Basis Release 7.00 eingestellt).

ABAP-Laufzeitumgebung

Alle ABAP-Programme befinden sich in der SAP-Datenbank. Sie werden nicht in separaten externen Dateien wie Java- oder C++-Programmen gespeichert. In der Datenbank existiert der gesamte ABAP-Code in zwei Formen: Quellcode, der mit den Werkzeugen der ABAP Workbench angezeigt und bearbeitet werden kann; und generierter Code, eine binäre Darstellung, die mit Java- Bytecode vergleichbar ist . ABAP-Programme werden unter der Kontrolle des Laufzeitsystems ausgeführt, das Teil des SAP-Kernels ist. Das Laufzeitsystem ist verantwortlich für die Verarbeitung von ABAP-Anweisungen, die Steuerung der Ablauflogik von Dynpros und die Reaktion auf Ereignisse (z. B. ein Benutzer, der auf eine Bildschirmschaltfläche klickt); insofern ist sie als Virtual Machine vergleichbar mit der Java VM zu sehen. Ein wesentlicher Bestandteil des ABAP-Laufzeitsystems ist das Database Interface, das datenbankunabhängige ABAP-Anweisungen ("Open SQL") in Anweisungen umwandelt, die vom zugrunde liegenden DBMS ("Native SQL") verstanden werden. Die Datenbankschnittstelle wickelt im Auftrag von ABAP-Programmen die gesamte Kommunikation mit der relationalen Datenbank ab; Es enthält auch zusätzliche Funktionen wie das Puffern von Tabellen und Daten, auf die häufig zugegriffen wird, im lokalen Speicher des Anwendungsservers.

SAP-Systeme und -Landschaften

Alle SAP-Daten sind vorhanden und alle SAP-Software läuft im Kontext eines SAP-Systems . Ein System besteht aus einer zentralen relationalen Datenbank und einer oder mehreren Anwendungen ("Instanzen"), die auf die Daten und Programme in dieser Datenbank zugreifen. Ein SAP-System enthält mindestens eine Instanz, kann aber auch mehr enthalten, meist aus Gründen der Dimensionierung und Performance. In einem System mit mehreren Instanzen sorgen Load-Balancing-Mechanismen dafür, dass die Last gleichmäßig auf die verfügbaren Anwendungsserver verteilt wird.

Installationen des Web Application Servers ( Landschaften ) bestehen typischerweise aus drei Systemen: einem für die Entwicklung; eine für Tests und Qualitätssicherung; und einer für die Produktion. Die Landschaft kann mehr Systeme enthalten (zB separate Systeme für Unit-Tests und Pre-Production-Tests) oder weniger (zB nur Entwicklung und Produktion, ohne separate QA); dennoch ist drei die gebräuchlichste Konfiguration. ABAP-Programme werden erstellt und im Entwicklungssystem einem ersten Test unterzogen. Anschließend werden sie an die anderen Systeme in der Landschaft verteilt. Diese Aktionen finden unter der Kontrolle des Change and Transport System (CTS) statt, das für die Kontrolle der Parallelität (z Produktionssysteme.

Der Web Application Server besteht aus drei Schichten: der Datenbankschicht; die Anwendungsschicht; und die Präsentationsschicht. Diese Schichten können auf derselben oder auf verschiedenen physischen Maschinen ausgeführt werden. Die Datenbankschicht enthält die relationale Datenbank und die Datenbanksoftware. Das Wissen der Anwendungsschicht enthält die Instanz oder Instanzen des Systems. Alle Anwendungsprozesse, einschließlich der Geschäftsvorgänge und der ABAP-Entwicklung, laufen auf der Anwendungsschicht. Die Präsentationsschicht handhabt die Interaktion mit Benutzern des Systems. Der Online-Zugriff auf ABAP-Anwendungsserver kann über eine proprietäre grafische Oberfläche, die als "SAP GUI" bezeichnet wird, oder über einen Webbrowser erfolgen.

Softwareschichten

ABAP-Software wird in Softwarekomponenten eingesetzt. Beispiele hierfür sind:

  • SAP_BASIS ist die erforderliche technische Basisschicht, die in jedem ABAP-System benötigt wird.
  • SAP_ABA enthält Funktionalitäten, die für alle Arten von Geschäftsanwendungen wie Geschäftspartner- und Adressverwaltung benötigt werden.
  • SAP_UI bietet die Funktionalität zum Anlegen von SAP-UI5-Anwendungen.
  • BBPCRM ist ein Beispiel für eine Geschäftsanwendung, in diesem Fall die CRM-Anwendung
  • SAP ABAP ist eine ERP-Programmiersprache.

Transaktionen

Eine Transaktion in der SAP-Terminologie ist die Ausführung eines Programms. Die normale Ausführung von ABAP-Code im SAP-System ist die Eingabe eines Transaktionscodes (zB VA01 ist der Transaktionscode für "Kundenauftrag anlegen"). Transaktionen können über systemdefinierte oder benutzerspezifische, rollenbasierte Menüs aufgerufen werden. Sie können auch gestartet werden, indem der Transaktionscode direkt in ein Befehlsfeld eingegeben wird, das in jedem SAP-Bild vorhanden ist. Transaktionen können auch programmatisch über die ABAP-Anweisungen CALL TRANSACTION und LEAVE TO TRANSACTION aufgerufen werden. Der allgemeine Begriff einer Transaktion wird in der SAP-Terminologie als Logical Unit of Work (LUW) bezeichnet; die Kurzform des Transaktionscodes ist T-Code .

Arten von ABAP-Programmen

Wie in anderen Programmiersprachen ist ein ABAP-Programm entweder eine ausführbare Einheit oder eine Bibliothek, die anderen Programmen wiederverwendbaren Code zur Verfügung stellt und nicht eigenständig ausführbar ist.

ABAP unterscheidet zwei Arten von ausführbaren Programmen:

  • Berichte
  • Modulpools

Berichte folgen einem relativ einfachen Programmiermodell, bei dem ein Benutzer optional einen Satz von Parametern eingibt (zB eine Auswahl über einen Teilsatz von Daten) und das Programm dann die Eingabeparameter verwendet, um einen Bericht in Form einer interaktiven Liste zu erstellen. Der Begriff "Bericht" kann insofern etwas irreführend sein, als Berichte auch so gestaltet werden können, dass sie Daten ändern ; Der Grund, warum diese Programme als Berichte bezeichnet werden, ist die "listenorientierte" Natur der von ihnen erzeugten Ausgabe.

Modulpools definieren komplexere Muster der Benutzerinteraktion unter Verwendung einer Sammlung von Bildschirmen. Der Begriff „Bildschirm“ bezieht sich auf das tatsächliche, physische Bild, das der Benutzer sieht. Jedes Dynpro besitzt außerdem eine "Ablauflogik", die sich auf den von den Dynpros implizit aufgerufenen ABAP-Code bezieht, der in einen "PBO" (Process Before Output) und "PAI" (Process After Input) Abschnitt unterteilt ist. In der SAP-Dokumentation bezeichnet der Begriff „Dynpro“ (dynamisches Programm) die Kombination des Dynpros und seiner Ablauflogik.

Die nicht ausführbaren Programmtypen sind:

  • Module einschließen
  • Subroutinen-Pools
  • Funktionsgruppen
  • Objektklassen
  • Schnittstellen
  • Typpools

Ein INCLUDE-Modul wird zum Zeitpunkt der Generierung in die aufrufende Einheit aufgenommen; es wird oft verwendet, um große Programme zu unterteilen.
Subroutinen-Pools enthalten ABAP-Subroutinen (Codeblöcke, die von FORM/ENDFORM-Anweisungen eingeschlossen und mit PERFORM aufgerufen werden).
Funktionsgruppen sind Bibliotheken in sich abgeschlossener Funktionsbausteine ​​(umschlossen von FUNCTION/ENDFUNCTION und aufgerufen mit CALL FUNCTION).
Objektklassen und -schnittstellen ähneln Java-Klassen und -Schnittstellen; die ersten definieren einen Satz von Methoden und Attributen, die zweiten enthalten "leere" Methodendefinitionen, für die jede Klasse, die die Schnittstelle implementiert, expliziten Code bereitstellen muss.
Typpools definieren Sammlungen von Datentypen und Konstanten.

ABAP-Programme bestehen aus einzelnen Sätzen (Anweisungen). Das erste Wort in einer Anweisung wird als ABAP-Schlüsselwort bezeichnet. Jede Anweisung endet mit einem Punkt. Wörter müssen immer durch mindestens ein Leerzeichen getrennt sein. Aussagen können beliebig eingerückt werden. Bei Schlüsselwörtern, Zusätzen und Operanden unterscheidet das ABAP-Laufzeitsystem nicht zwischen Groß- und Kleinschreibung.

Anweisungen können über eine Zeile hinausgehen. Sie können mehrere Anweisungen in einer einzigen Zeile haben (dies wird jedoch nicht empfohlen). Zeilen, die in der ersten Spalte mit einem * beginnen, werden vom ABAP-Laufzeitsystem als Kommentarzeilen erkannt und ignoriert. Doppelte Anführungszeichen (") zeigen an, dass der Rest einer Zeile ein Kommentar ist.

Entwicklungsumgebung

Es gibt zwei Möglichkeiten, in ABAP zu entwickeln. Die Verfügbarkeit ist abhängig vom Release des ABAP-Systems.

ABAP-Workbench

Die ABAP Workbench ist Teil des ABAP-Systems und wird über das SAP GUI aufgerufen . Es enthält verschiedene Werkzeuge zum Bearbeiten von Programmen. Die wichtigsten davon sind (Transaktionscodes sind in Klammern angegeben):

  • ABAP Editor zum Schreiben und Bearbeiten von Reports, Modulpools, Includes und Subroutinenpools (SE38)
  • ABAP Dictionary zur Verarbeitung von Datenbanktabellendefinitionen und Abruf globaler Typen (SE11)
  • Menu Painter zur Gestaltung der Benutzeroberfläche (Menüleiste, Standardsymbolleiste, Anwendungssymbolleiste, Funktionstastenbelegung) (SE41)
  • Screen Painter zur Gestaltung von Bildern und Ablauflogik (SE51)
  • Function Builder für Funktionsbausteine ​​(SE37)
  • Class Builder für ABAP Objects Klassen und Interfaces (SE24)

Der Object Navigator (Transaktion SE80) bietet eine einzige integrierte Schnittstelle zu diesen verschiedenen Werkzeugen.

ABAP-Entwicklungstools

Die ABAP Development Tools ( ADT ), früher bekannt als "ABAP in Eclipse", sind eine Reihe von Plugins für die Eclipse-Plattform zur Entwicklung von ABAP.

In diesem Szenario installiert der ABAP-Entwickler die benötigten Tools auf seinem Rechner und arbeitet lokal, wobei eine kontinuierliche Synchronisation mit dem Backend erfolgt.

ABAP Dictionary

Das ABAP Dictionary enthält alle Metadaten zu den Daten im SAP-System. Es ist eng mit der ABAP Workbench verknüpft, indem jegliche Referenz auf Daten (zB eine Tabelle, ein View oder ein Datentyp) aus dem Dictionary bezogen wird. Entwickler verwenden die ABAP Dictionary-Transaktionen (direkt oder über den SE80 Object Navigator innerhalb der ABAP Workbench), um diese Metadaten anzuzeigen und zu pflegen.

Wenn ein Wörterbuchobjekt geändert wird, verweist ein Programm, das auf das geänderte Objekt verweist, beim nächsten Ausführen des Programms automatisch auf die neue Version. Da ABAP interpretiert wird, ist eine Neukompilierung von Programmen, die auf geänderte Dictionary-Objekte verweisen, nicht erforderlich.

Es folgt eine kurze Beschreibung der wichtigsten Arten von Dictionary-Objekten:

  • Tabellen sind Datencontainer, die in der zugrunde liegenden relationalen Datenbank vorhanden sind. In den meisten Fällen besteht eine 1-zu-1-Beziehung zwischen der Definition einer Tabelle im ABAP Dictionary und der Definition derselben Tabelle in der Datenbank (gleicher Name, gleiche Spalten). Diese Tabellen werden als "transparent" bezeichnet. Es gibt zwei Arten von intransparenten Tabellen: "Pooled"-Tabellen existieren als eigenständige Entitäten im ABAP Dictionary, werden aber auf Datenbankebene zu großen physischen Tabellen ("Pools") zusammengefasst. Gepoolte Tabellen sind oft kleine Tabellen, die beispielsweise Konfigurationsdaten enthalten. "Clustered"-Tabellen werden physisch in "Cluster" basierend auf ihren Primärschlüsseln gruppiert; Nehmen wir beispielsweise an, dass eine gruppierte Tabelle H "Kopf"-Daten über Verkaufsrechnungen enthält, während eine andere gruppierte Tabelle D die Rechnungsposten enthält. Jede Zeile von H würde dann physisch mit den zugehörigen Zeilen von D innerhalb einer "Cluster-Tabelle" in der Datenbank gruppiert. Diese Art des Clusterings, die die Leistung verbessern soll, ist auch in einigen, wenn auch nicht allen, relationalen Datenbanksystemen als native Funktionalität vorhanden.
  • Indizes bieten einen beschleunigten Zugriff auf Tabellendaten für häufig verwendete Auswahlbedingungen. Jede SAP-Tabelle verfügt über einen „Primärindex“, der implizit mit der Tabelle erstellt wird und dazu dient, die Eindeutigkeit des Primärschlüssels zu erzwingen. Zusätzliche Indizes (eindeutig oder nicht eindeutig) können definiert werden; diese werden als "Sekundärindizes" bezeichnet.
  • Views haben den gleichen Zweck wie in der zugrunde liegenden Datenbank: Sie definieren Teilmengen von Spalten (und/oder Zeilen) aus einer oder - mittels einer Join-Bedingung - mehreren Tabellen. Da Ansichten virtuelle Tabellen sind (sie verweisen auf Daten in anderen Tabellen), nehmen sie nicht viel Platz ein.
  • Strukturen sind komplexe Datentypen, die aus mehreren Feldern bestehen (vergleichbar mit struct in C/C++).
  • Datenelemente liefern den semantischen Inhalt für ein Tabellen- oder Strukturfeld. Zum Beispiel können Dutzende von Tabellen und Strukturen ein Feld enthalten, das den Preis (für ein Endprodukt, Rohmaterial, Ressource, ...) angibt. Alle diese Felder könnten das gleiche Datenelement "PRICE" haben.
  • Domänen definieren die strukturellen Eigenschaften eines Datenelements. Beispielsweise könnte dem Datenelement PRICE eine Domäne zugeordnet sein, die den Preis als numerisches Feld mit zwei Dezimalstellen definiert. Domänen können auch semantischen Inhalt tragen, indem sie eine Liste möglicher Werte bereitstellen. Beispielsweise könnte eine Domäne "BOOLEAN" ein Feld vom Typ "character" mit der Länge 1 und ohne Beachtung der Groß-/Kleinschreibung definieren, würde aber auch die möglichen Werte auf "T" (true) oder "F" (false) beschränken.
  • Suchhilfen (Nachfolger der mittlerweile veraltet „Matchcodes“) erweiterte Suchstrategien zur Verfügung stellen , wenn ein Benutzer die möglichen Werte für ein Datenfeld zu sehen. Die ABAP-Laufzeit bietet eine implizite Hilfestellung (durch Auflistung aller Werte für das Feld, z.
  • Sperrobjekte implementieren Sperren auf Anwendungsebene, wenn Daten geändert werden.

ABAP-Syntax

Diese kurze Beschreibung der ABAP-Syntax beginnt mit dem allgegenwärtigen Programm " Hello world ".

Hallo Welt

REPORT TEST.
WRITE 'Hello World'.

Dieses Beispiel enthält zwei Anweisungen: REPORTund WRITE. Das Programm zeigt eine Liste auf dem Bildschirm an. In diesem Fall besteht die Liste aus der einzelnen Zeile „Hello World“. Die REPORTAnweisung weist darauf hin, dass dieses Programm ein Bericht ist. Dieses Programm könnte ein Modulpool sein, nachdem die REPORTAnweisung durch ersetzt wurde PROGRAM.

Verkettete Aussagen

Aufeinanderfolgende Anweisungen mit identischem ersten Teil (ganz links) können mit dem Kettenoperator zu einer "verketteten" Anweisung zusammengefasst werden :. Der gemeinsame Teil der Anweisungen wird links vom Doppelpunkt geschrieben, die unterschiedlichen Teile werden rechts vom Doppelpunkt geschrieben und durch Kommas getrennt. Der Doppelpunkt-Operator wird ohne Leerzeichen direkt an das vorangehende Token angehängt (dasselbe gilt für die Kommas in der Token-Liste, wie in den folgenden Beispielen zu sehen ist).

In WRITEAnweisungen wird häufig Verkettung verwendet . WRITEakzeptiert nur ein Argument. Wenn Sie also beispielsweise drei Felder aus einer Struktur namens FLIGHTINFO anzeigen möchten, müssen Sie Folgendes codieren:

WRITE FLIGHTINFO-CITYFROM.
WRITE FLIGHTINFO-CITYTO.
WRITE FLIGHTINFO-AIRPTO.

Die Verkettung der Aussagen führt zu einer lesbareren und intuitiveren Form:

WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-AIRPTO.

In einer Kettenanweisung ist der erste Teil (vor dem Doppelpunkt) nicht nur auf den Anweisungsnamen beschränkt. Der gesamte gemeinsame Teil der aufeinanderfolgenden Anweisungen kann vor dem Doppelpunkt stehen. Beispiel:

REPLACE 'A' WITH 'B' INTO LASTNAME.
REPLACE 'A' WITH 'B' INTO FIRSTNAME.
REPLACE 'A' WITH 'B' INTO CITYNAME.

könnte in verketteter Form umgeschrieben werden als:

REPLACE 'A' WITH 'B' INTO: LASTNAME, FIRSTNAME, CITYNAME.

Bemerkungen

ABAP hat 2 Möglichkeiten, Text als Kommentar zu definieren :

  • Ein Sternchen (*) in der äußersten linken Spalte einer Zeile macht die gesamte Zeile zu einem Kommentar
  • Ein doppeltes Anführungszeichen (") an einer beliebigen Stelle in einer Zeile macht den Rest dieser Zeile zu einem Kommentar

Beispiel:

***************************************
** Program: BOOKINGS                 **
** Author: Joe Byte, 07-Jul-2007     **
***************************************

REPORT BOOKINGS.

* Read flight bookings from the database
SELECT * FROM FLIGHTINFO
  WHERE CLASS = 'Y'       "Y = economy
  OR    CLASS = 'C'.      "C = business
(...)

Räume

Code in ABAP ist Whitespace-sensitiv.

x = a+b(c).

weist der Variablen x den Teilstring der Variablen a zu, beginnend bei b mit der durch die Variable c definierten Länge.

x = a + b( c ).

weist der Variablen x die Summe der Variablen a und das Ergebnis des Aufrufs der Methode b mit dem Parameter c zu.

ABAP-Anweisungen

Im Gegensatz zu Sprachen wie C/C++ oder Java, die eine begrenzte Menge sprachspezifischer Anweisungen definieren und die meisten Funktionalitäten über Bibliotheken bereitstellen, enthält ABAP eine umfangreiche Menge an eingebauten Anweisungen. Diese Anweisungen verwendeten traditionell satzartige Strukturen und vermieden Symbole, was ABAP-Programme relativ ausführlich macht. In neueren Versionen der ABAP-Sprache ist jedoch ein knapperer Stil möglich.

Ein Beispiel für anweisungsbasierte Syntax (deren Syntax aus COBOL stammt) im Vergleich zu ausdrucksbasierter Syntax (wie in C/Java):

ADD TAX TO PRICE.
* is equivalent to
PRICE = PRICE + TAX .

Datentypen und Variablen

ABAP bietet eine Reihe von integrierten Datentypen. Darüber hinaus kann jede im ABAP Dictionary definierte Struktur, Tabelle, View oder jedes Datenelement zur Typisierung einer Variablen verwendet werden. Als Typen können auch Objektklassen und Interfaces verwendet werden.

Die integrierten Datentypen sind:

Typ Beschreibung
ich Ganze Zahl
P Gepackte Dezimalzahl
F Gleitkomma
n Zeichen numerisch
C Charakter
D Datum
T Zeit
x Hexadezimal (Rohbyte)
STRING String mit variabler Länge
XSTRING Rohbyte-Array mit variabler Länge

Datumsvariablen oder Konstanten (Typ D) enthalten die Anzahl der Tage seit dem 1. Januar 1 n. Chr.. Zeitvariablen oder Konstanten (Typ T) enthalten die Anzahl der Sekunden seit Mitternacht. Eine Besonderheit beider Typen ist, dass sowohl als Integer als auch als Zeichenkette (mit internem Format "YYYYMMDD" für Datumsangaben und "hhmmss" für Uhrzeiten) zugegriffen werden kann, die für die Datums- und Uhrzeitbehandlung verwendet werden können. Das folgende Code-Snippet berechnet beispielsweise den letzten Tag des Vormonats (Hinweis: SY-DATUM ist eine systemdefinierte Variable, die das aktuelle Datum enthält):

DATA LAST_EOM    TYPE D.  "last end-of-month date

* Start from today's date
  LAST_EOM = SY-DATUM.
* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to "01",
* giving the first day of the current month
  LAST_EOM+6(2) = '01'.
* Subtract one day
  LAST_EOM = LAST_EOM - 1.

  WRITE: 'Last day of previous month was', LAST_EOM.

Alle ABAP-Variablen müssen explizit deklariert werden, um verwendet werden zu können. Sie können entweder mit Einzelanweisungen und expliziter Typisierung oder seit ABAP 7.40 inline mit abgeleiteter Typisierung deklariert werden .

Explizit typisierte Deklaration

Normalerweise werden alle Deklarationen am Anfang des Codemoduls (Programm, Unterprogramm, Funktion) vor der ersten ausführbaren Anweisung platziert; Diese Platzierung ist eine Konvention und keine erzwungene Syntaxregel. Die Deklaration besteht aus Name, Typ, Länge (sofern zutreffend), zusätzlichen Modifikatoren (z. B. Anzahl der implizierten Dezimalstellen für ein gepacktes Dezimalfeld) und optional einem Anfangswert:

* Primitive types:
DATA: COUNTER      TYPE I,
      VALIDITY     TYPE I VALUE 60,
      TAXRATE(3)   TYPE P DECIMALS 1,
      LASTNAME(20) TYPE C,
      DESCRIPTION  TYPE STRING.

* Dictionary types:
DATA: ORIGIN       TYPE COUNTRY.

* Internal table:
DATA: T_FLIGHTS    TYPE TABLE OF FLIGHTINFO,
      T_LOOKUP     TYPE HASHED TABLE OF FLT_LOOKUP.

* Objects:
DATA: BOOKING      TYPE REF TO CL_FLT_BOOKING.

Beachten Sie die Verwendung des Doppelpunkts, um aufeinanderfolgende DATA-Anweisungen zu verketten.

Inline-Deklaration

Seit ABAP 7.40 können Variablen inline mit folgender Syntax deklariert werden :

DATA(variable_name) = 'VALUE'.

Für diese Art der Deklaration muss der Typ statisch erschlossen werden können, zB durch Methodensignatur oder Datenbanktabellenstruktur.

Diese Syntax ist auch in OpenSQL-Anweisungen möglich:

SELECT * FROM ekko into @DATA(lt_ekko) WHERE ebeln EQ @lv_ebeln.

ABAP-Objekte

Die Sprache ABAP unterstützt die objektorientierte Programmierung durch eine Funktion, die als "ABAP Objects" bekannt ist. Dies trägt dazu bei, Anwendungen zu vereinfachen und besser kontrollierbar zu machen.

ABAP Objects ist vollständig kompatibel mit der bestehenden Sprache, so dass man bestehende Anweisungen und Modularisierungseinheiten in Programmen verwenden kann, die ABAP Objects verwenden, und ABAP Objects auch in bestehenden ABAP-Programmen verwenden kann. Die Syntaxprüfung ist in ABAP Objects-Programmen stärker, und einige syntaktische Formen (normalerweise ältere) bestimmter Anweisungen sind nicht zulässig.

Objekte bilden eine Kapsel, die den Charakter mit dem jeweiligen Verhalten verbindet. Objekte sollen es Programmierern ermöglichen, ein reales Problem und seine vorgeschlagene Softwarelösung eins zu eins abzubilden. Typische Objekte in einem Geschäftsumfeld sind zB 'Kunde', 'Auftrag' oder 'Rechnung'. Ab Release 3.1 enthält das Business Object Repository (BOR) des SAP Web Application Server ABAP Beispiele für solche Objekte. Das BOR-Objektmodell wird im nächsten Release in ABAP Objects integriert, indem die BOR-Objekttypen in die ABAP-Klassenbibliothek migriert werden. Eine umfassende Einführung in die Objektorientierung insgesamt würde den Rahmen dieser Einführung in ABAP Objects weit sprengen. Diese Dokumentation stellt eine Auswahl von Begriffen vor, die in der Objektorientierung universell verwendet werden und auch in ABAP Objects vorkommen. In den folgenden Abschnitten wird weiter auf die Verwendung dieser Begriffe in ABAP Objects eingegangen. Am Ende dieses Abschnitts finden Sie eine Liste weiterführender Literatur mit einer Auswahl von Titeln zur Objektorientierung.

  • Objekte sind Instanzen von Klassen. Sie enthalten Daten und bieten Dienste an. Die Daten bilden die Attribute des Objekts. Die Dienste werden als Methoden (auch als Operationen oder Funktionen bezeichnet) bezeichnet. Normalerweise arbeiten Methoden mit privaten Daten (den Attributen oder dem Zustand des Objekts), die nur für die Methoden des Objekts sichtbar sind. Somit können die Attribute eines Objekts nicht direkt vom Benutzer geändert werden, sondern nur durch die Methoden des Objekts. Dies garantiert die interne Konsistenz des Objekts.
  • Klassen beschreiben Objekte. Aus technischer Sicht sind Objekte Laufzeitinstanzen einer Klasse. Theoretisch können beliebig viele Objekte basierend auf einer einzigen Klasse erstellt werden. Jede Instanz (Objekt) einer Klasse hat eine eindeutige Identität und ihre eigenen Werte für ihre Attribute.
  • Objektreferenzen sind eindeutige Adressen, die verwendet werden können, um Objekte in einem Programm zu identifizieren und darauf zu zeigen. Objektreferenzen ermöglichen den Zugriff auf die Attribute und Methoden eines Objekts.

In der objektorientierten Programmierung haben Objekte in der Regel folgende Eigenschaften:

  • Kapselung – Objekte beschränken die Sichtbarkeit ihrer Ressourcen (Attribute und Methoden) für andere Benutzer. Jedes Objekt hat eine Schnittstelle, die bestimmt, wie andere Objekte mit ihm interagieren können. Die Implementierung des Objekts ist gekapselt, dh außerhalb des Objekts selbst unsichtbar.
  • Vererbung - Eine vorhandene Klasse kann verwendet werden, um eine neue Klasse abzuleiten. Abgeleitete Klassen erben die Daten und Methoden der Oberklasse. Sie können jedoch vorhandene Methoden überschreiben und auch neue hinzufügen.
  • Polymorphismus – Identische (identisch benannte) Methoden verhalten sich in verschiedenen Klassen unterschiedlich. In ABAP Objects wird Polymorphismus durch Umdefinieren von Methoden bei der Vererbung und durch die Verwendung von Konstrukten namens Interfaces implementiert.

CDS-Ansichten

Die ABAP Core Data Services (ABAP CDS) sind die Implementierung des allgemeinen CDS-Konzepts für den AS ABAP. ABAP CDS ermöglicht die Definition semantischer Datenmodelle auf der zentralen Datenbank des Anwendungsservers. Auf dem AS ABAP können diese Modelle unabhängig vom Datenbanksystem definiert werden. Die Entitäten dieser Modelle bieten gegenüber bestehenden Datenbanktabellen und Views, die im ABAP Dictionary definiert sind, erweiterte Zugriffsfunktionen, die eine Optimierung von Open-SQL-basierten Anwendungen ermöglichen. Dies wird besonders deutlich, wenn ein AS ABAP eine SAP-HANA-Datenbank verwendet, da deren In-Memory-Eigenschaften optimal umgesetzt werden können.

Die Datenmodelle werden mit Hilfe der im ABAP CDS bereitgestellten Data Definition Language (DDL) und Data Control Language (DCL) in der ABAP CDS-Syntax definiert. Die über diese Sprachen definierten Objekte sind in das ABAP Dictionary integriert und werden hier auch verwaltet.

CDS-Quellcode kann nur in den Eclipse-basierten ABAP Development Tools (ADT) programmiert werden. Die Data Definition Language (DDL) und die Data Control Language (DCL) verwenden unterschiedliche Editoren.

Merkmale

SAP NW ABAP SQL-Joins SQL-Set-Operationen SELECT-Klauseln
7,40 SP05
  • INNERE VERBINDUNG
  • LINKE ÄUSSERE VERBINDUNG
  • RECHTER ÄUSSERER JOIN
  • UNION
  • UNION ALLE
  • WO
  • GRUPPIERE NACH
  • HABEN
  • WIE
7,40 SP08
7,50
7,51
  • CROSS JOIN
SAP NW ABAP Literale Rechenzeichen Bedingte Ausdrücke
7,40 SP05
  • In der SELECT-Liste, zB literal als FieldName
  • Als RHS-Wert
  • +
  • -
  • *
  • boolesche Operatoren
    • NICHT, UND, ODER
  • Vergleichsoperatoren
    • ZWISCHEN, =, <>, <, >, <=, >=, LIKE
    • IS [NOT] NULL (Nur in der WHERE-Bedingung)
7,40 SP08
  • / (Float-basierte Division)
7,50
7,51
  • Funktion als RHS-Wert
SAP NW ABAP Aggregatfunktionen Numerische Funktionen String-Funktionen
7,40 SP05
  • AVG( [DISTINCT] )
  • MAX
  • MINDEST
  • SUMME( [DISTINCT] )
  • ANZAHL( [DISTINCT] )
  • ZÄHLEN(*)
  • CEIL
  • MOD
  • SUBSTRING
  • LPAD
7,40 SP08
  • Abs
  • DIV (Ganzzahlbasierte Division)
  • DIVISION (Dezimalbasierte Division)
  • FUSSBODEN
  • RUNDEN
  • CONCAT
  • ERSETZEN
7,50
  • CONCAT_WITH_SPACE
  • INSTR
  • LINKS
  • LÄNGE
  • LTRIM
  • RECHTS
  • RPAD
  • RTRIM
7,51
  • AVG( [AS] ), um den Rückgabetyp anzugeben
  • FLTP_TO_DEC
  • OBERER, HÖHER
  • UNTERE
SAP NW ABAP Byte-String-Funktionen Datums- und Uhrzeitfunktionen Andere Funktionen
7,40 SP05
  • CAST in eingebaute DDIC-Typen, zB abap.fltp
7,40 SP08
  • VERSCHMELZEN
  • WÄHRUNGSUMRECHNUNG
  • EINHEITENUMRECHNUNG
  • DECIMAL_SHIFT
7,50
  • BINTOHEX
  • HEXTOBIN
  • DATS_DAYS_BETWEEN
  • DATS_ADD_DAYS
  • DATS_ADD_MONTHS
  • DATS_IS_VALID
  • TIMS_IS_VALID
  • TSTMP_IS_VALID
  • TSTMP_CURRENT_UTCTIMESTAMP
  • TSTMP_SECONDS_BETWEEN
  • TSTMP_ADD_SECONDS
  • WERFEN
    • auf Datenelemente, zB CHAR80
    • kann verschachtelt werden
7,51
  • ABAP_SYSTEM_TIMEZONE
  • ABAP_USER_TIMEZONE
  • TSTMP_TO_DATS
  • TSTMP_TO_TIMS
  • TSTMP_TO_DST
  • DATS_TIMS_TO_TSTMP
  • WERFEN
    • KONSERVIERUNGSART
    • SSTRING zu anderen Typen
    • CLNT, LANG, TIMS, UNIT auf Datenelemente vom Typ CHAR und SSTRING
    • CHAR, SSTRING, NUMC zu ACCP und umgekehrt
    • Aggregatfunktion als Operand
SAP NW ABAP Bedingte (CASE) Ausdrücke Erweiterbarkeit (Nicht verwaltete) Assoziationen
7,40 SP05
  • "Simple" CASE (verhält sich wie switch-Anweisung)
  • Verschachtelte CASE-Anweisungen
  • $EXTENSION.* (Unterstützung für Datenbanktabellenerweiterungen)
  • Pfadausdrücke in
    • SELECT-Liste
    • FROM-Klausel
    • WHERE-Klausel
    • HAVING-Klausel
  • Filterbedingungen in Pfadausdrücken, zB Products._Texts[ lagu = 'EN' ] as english_name
7,40 SP08
  • "Gesuchter" CASE (verhält sich wie if ... else if)
  • ANSICHT ERWEITERN
7,50
  • CASE-Ausdrücke können als Operanden in CAST-Funktionen verwendet werden
  • ANSICHT ERWEITERN mit Eingabeparametern, Pfadausdrücken, Konvertierungen, Datums- und Zeitfunktionen
7,51
  • Funktion als RHS-Wert
  • EXTEND VIEW mit Aggregatfunktionen, GROUP BY-Klauseln und UNIONs
  • Assoziationsdefinitionen in Ansichten mit UNIONs
  • Standardfilter für Assoziationen (WITH DEFAULT FILTER)
  • Kardinalität "to many" (*:) kann in Pfadfiltern angegeben werden
SAP NW ABAP Sitzungsvariablen Eingabeparameter Sonstiges
7,40 SP05
  • Schlüsselelemente
7,40 SP08
  • Eingabeparameter bei den meisten DBs
7,50
  • $session.user (sy-uname)
  • $session.client (sy-mandt)
  • $session.system_language (sy-langu)
  • Eingabeparameter auf AnyDB
  • Tabellenfunktion (nur SAP HANA)
7,51
  • $session.system_date (sy-datum)
  • Metadatenerweiterungen

Interne Tabellen in ABAP

Interne Tabellen sind ein wichtiges Merkmal der ABAP-Sprache. Eine interne Tabelle wird ähnlich wie ein Vektor von Strukturen in C++ oder ein Vektor von Objekten in Java definiert. Der Hauptunterschied zu diesen Sprachen besteht darin, dass ABAP eine Sammlung von Anweisungen bereitstellt, um den Inhalt interner Tabellen einfach aufzurufen und zu manipulieren. Beachten Sie, dass ABAP keine Arrays unterstützt; Die einzige Möglichkeit, ein Datenobjekt mit mehreren Elementen zu definieren, besteht darin, eine interne Tabelle zu verwenden.

Interne Tabellen sind eine Möglichkeit, variable Datensätze einer festen Struktur im Arbeitsspeicher von ABAP abzulegen und bieten die Funktionalität dynamischer Arrays. Die Daten werden zeilenweise gespeichert, wobei jede Zeile dieselbe Struktur hat.

Interne Tabellen werden vorzugsweise verwendet, um den Inhalt von Datenbanktabellen aus einem Programm heraus zu speichern und zu formatieren. Darüber hinaus sind interne Tabellen in Verbindung mit Strukturen ein wichtiges Mittel, um komplexe Datenstrukturen in einem ABAP-Programm zu definieren.

Das folgende Beispiel definiert eine interne Tabelle mit zwei Feldern im Format der Datenbanktabelle VBRK.

* First define structured type
TYPES: BEGIN OF t_vbrk,
         VBELN TYPE VBRK-VBELN,
         ZUONR TYPE VBRK-ZUONR,
       END OF t_vbrk.

* Now define internal table of our defined type t_vbrk
DATA : gt_vbrk TYPE STANDARD TABLE OF t_vbrk,
       gt_vbrk_2 TYPE STANDARD TABLE OF t_vbrk.   "easy to define more tables

* If needed, define structure (line of internal table)
* Definition with type or with reference to internal table:
DATA : gs_vbrk TYPE t_vbrk,
       gs_vbrk_2 LIKE LINE OF gt_vbrk_2.

* You can also define table type if needed
TYPES tt_vbrk TYPE STANDARD TABLE OF t_vbrk.

Geschichte

Die folgende Liste gibt nur einen groben Überblick über einige wichtige Meilensteine ​​in der Geschichte der Sprache ABAP. Weitere Informationen finden Sie unter ABAP - Releasespezifische Änderungen .

Ausführung Veröffentlichungsdatum Wesentliche Änderungen
4.6C Mai 2000
  • ABAP-Objekte
6.40 2004
7,0 2006
  • Switch-Framework/Erweiterungskonzept
7.02
  • Ausdrücke wie
    check lcl=>mi(1) + abs( -2 ) >= 3.
    
7,40 2012-11-29
  • „Code-Pushdown“ – Verwenden Sie erweiterte Funktionen aus der zugrunde liegenden Datenbank
  • Konstruktorausdrücke (NEW, VALUE, REF, CONV, CAST, EXACT, COND, SWITCH)
  • Teilweise implementierte Schnittstellen von Testklassen
  • Tabellenausdrücke
  • Interne Tabellenzeilenexistenz-/Zeilenindexfunktionen
7,40 SP05 Dezember 2013
  • MOVE-CORRESPONDING für interne Tabellen
  • LET-Ausdruck in Konstruktorausdrücken
  • ENTSPRECHENDER Operator
  • CDS-Ansichten
  • ABAP Managed Database Procedures
7,40 SP08 September 2014
  • FOR-Ausdrücke
  • Konstruktoroperator REDUCE
  • Startwert für Konstruktorausdrücke
  • GROUP BY für interne Tabellen
  • Filterausdrücke und Standardwerte für Tabellenausdrücke
  • Open-SQL-Inline-Deklarationen nach der INTO-Anweisung
  • Optionale Schnittstellenmethoden
7,50 November 2015
  • Neuer integrierter Datentyp INT8
  • Relationaler Ausdruck IS INSTANCE OF
  • Open SQL-Hostausdrücke
  • Open-SQL-Ausdrücke ROUND, CONCAT, LPAD, LENGTH, REPLACE, RIGHT, RTRIM und SUBSTRING
  • Open SQL-Pfadausdrücke
  • Open SQL SELECT UNION
  • Open SQL INSERT FROM-Unterabfrage
7,51 Oktober 2016
  • Aufzählungen
  • Allgemeine Tabellenausdrücke in Open SQL
  • Open SQL/CDS CROSS JOIN
  • CDS-Client-Handling
  • Metadatenerweiterungen in CDS
  • Datum und Uhrzeit in Open SQL/CDS
  • Gleitkomma auf Open SQL/CDS
7,52 September 2017
  • Virtuelle Sortierung interner Tabellen
7,54 September 2019
  • Neue integrierte Datentypen
  • Neuer integrierter ABAP-Typ utclong
  • Berechnungsaufgaben
  • Dezimalstellen in Zeitstempeln
  • Kundenhandhabung
  • Erweiterungen der INTOKlausel
  • Definition von Assoziationen
  • Neue Aggregatfunktion STRING_AGG
  • Neue integrierte Funktionen
  • Zusatz DISTINCToptional in AggregatfunktionCOUNT
  • Fensterausdrücke
  • SQL-Bedingungen überarbeitet
  • Zeitliche Hierarchien
  • Neue Hierarchienavigatoren
  • Aggregierte Ausdrücke in SQL-Ausdrücken
  • CAST Matrix überarbeitet
  • Strikter Modus in der Syntaxprüfung
  • Syntaxprüfung für Literale und Hostkonstanten
  • Anmerkung für Datenbankhinweise
  • Anmerkungen zum Freigeben von Elementen
  • Angeben von CDS-Entitäten nach USING
  • Anführungszeichen für logische Schemata
  • Ergänzung in placeder Erklärunglate numbering
  • Zusatz in class ... unique
  • Externer Name einer Aktion
  • Statische Feldsteuerung
  • Beliebiger Name für Handlermethoden
  • Verhaltenspool Keine Ausnahmen
  • Sprache zur Entitätsmanipulation
  • TYPE STRUCTURE FOR
  • Antwortinformationen
  • Absolute Typnamen
  • Unternehmensdienstleistungen
  • Berechtigungsprüfungen in Updates
  • Impliziter Nachrichtentyp in IF_T100_DYN_MSG
  • Verwenden von Testklassen
  • Ergänzung COMBINATION MODE OR|ANDder ErklärungGRANT SELECT ON
  • Ergänzung REDEFINITIONder ErklärungGRANT SELECT ON
  • Prädikat VOID
  • Ergänzung IN SCENARIOder ErklärungGRANT SELECT ON
  • Allgemeine Aspektbedingung der Anweisung DEFINE ROLE
  • Neue Variante INHERITING CONDITIONS FROM SUPER
  • Verschiedene REPLACINGBetreiber
  • Definition eines generischen Aspekts
  • DCL-Einschränkungen für ABAP CDS-Hierarchien
  • DCL-Einschränkungen für transaktionale Projektionsansichts-Entitäten
7.55 September 2020
  • Die interne ABAP-Anweisung EXPORT NAMETAB kann nicht mehr verwendet werden und führt zu einem Laufzeitfehler.
  • Die interne ABAP-Anweisung IMPORT NAMETAB wird aus Gründen der Abwärtskompatibilität teilweise noch unterstützt. Jeder Zugriff auf Einträge für DDIC-Tabellentypen führt zu einem Laufzeitfehler. Jeder andere Zugriff führt zu Fehlern von ATC.
  • Die frühere native Datenbanktabelle DDNTF für separate Nametab-Feldbeschreibungen wird nicht mehr unterstützt und wird gelöscht.
  • Es ist jetzt möglich, in CDS-Projektionsansichten neue Assoziationen zu externen Datenquellen zu definieren.
  • Es steht eine neue Art von CDS-View zur Verfügung: die CDS-View-Entität.
  • Der Standardwert des Profilparameters rdisp/max_alt_modes, der die mögliche Anzahl von ABAP-Sitzungen pro Benutzersitzung bestimmt, wurde von 6 auf 16 erweitert und entspricht nun der maximalen Anzahl von ABAP-Sitzungen pro Benutzersitzung.
  • In den Zuweisungen hinter dem Zusatz NEXT des Konstruktoroperators REDUCE können nun die Berechnungszuweisungsoperatoren +=, +=, *=, /= oder &&= verwendet werden und es gelten die jeweiligen Regeln.
  • Unterstützung von Perl-kompatiblen regulären Ausdrücken
  • Wörtliche Ersetzungen
  • Neue behandelbare Ausnahme CX_SY_STRING_SIZE_TOO_LARGE
  • Formatierungsoption WÄHRUNG für dezimale Gleitkommazahlen
  • SQL: Neue Aggregatfunktion ALLOW_PRECISION_LOSS
  • SQL: Optionale Fensterrahmenangabe innerhalb einer Fensterfunktion
  • SQL: Neue Fensterfunktionen FIRST_VALUE und LAST_VALUE
  • SQL: Neue Datums-/Uhrzeit-Konvertierungsfunktionen für TIMESTAMPL, DATS und TIMS
  • SQL: Neue Zeitstempelfunktionen UTCL_CURRENT, UTCL_ADD_SECONDS und UTCL_SECONDS_BETWEEN
  • SQL: Neue Datumsfunktionen DATN_DAYS_BETWEEN, DATN_ADD_DAYS und DATN_ADD_MONTHS
  • SQL: Neue Zusätze nach der ORDER BY-Klausel: NULLS FIRST und NULLS LAST
  • SQL: Neue Aggregatfunktionen MEDIAN, STDDEV, VAR, CORR und CORR_SPEARMAN
  • SQL: Neue Geometriekonvertierungsfunktion as_geo_json
  • SQL-Bedingungen überarbeitet
  • SQL: Neue Fensterfunktion NTILE
  • SQL: SELECT, INTO target - Hostvariablen können jetzt auch inline deklariert werden, auch wenn die FROM-Klausel dynamisch ist
  • SQL: Neue Typkonvertierungsfunktionen to_clob und to_blob
  • SQL: Neue Währungsumrechnungsfunktion Währungsumrechnung
  • SQL: Streaming und Locators können jetzt für SQL-Ausdrücke verwendet werden
  • SQL: Weitere in elementaren SQL-Ausdrücken erlaubte Datentypen
  • SQL: Optionen zum Laden der Hierarchie
  • SQL: Typisierte Literale
  • SQL: Neue Stringfunktionen
  • SQL: Ergänzung zur UPDATE FROM-Klausel
  • SQL: Strenger Modus der Syntaxprüfung
  • CDC-Zugriff: Überprüfen Sie mit dem Element IS [NOT] INITIAL in einer Literalbedingung
  • CDC-Zugriff: Zusatzumgehung, wenn
  • CDC-Zugriff: Überprüfen Sie den Benutzernamen in den Benutzerbedingungen
  • CDC-Zugriff: Datentypen
  • CDC-Zugriff: Bedingungen für die Seitenumgehung
  • Deklaration von CX_NO_CHECK-Ausnahmen

Siehe auch

Verweise

Externe Links