Du möchtest ABAP lernen und einen perfekten Einstieg in ABAP haben? Hier habe ich Dir die wichtigsten ABAP-Elemente kurz und knapp zusammengefasst. Gerade, wenn Du bereits Erfahrungen mit SAP ERP und einer anderen Programmiersprache hast, ist dieser Artikel perfekt für Dich.
Dieser Artikel kann auch als Cheatsheet benutzt werden. Das heißt, wenn Du einmal eine paar Elemente nachlesen möchtest.
Zudem hinaus sollte man einen guten Programmierstil besitzen. Es ist wichtig, ABAP effizient und performant einzusetzen. Die besten ABAP-Tricks beim Entwickeln erfährst Du in diesem Artikel.
Wichtige Transaktionen für ABAP-Entwicklung
Transaktionscode | Bezeichnung |
---|---|
SE11 | ABAP Dictionary |
SE38 | ABAP Editor |
SE37 | Function Builder |
SE24 | Class Builder |
SE41 | Menu Painter |
SE51 | Screen Painter |
SE80 | Object Navigator |
/NEX | Abmeldung ohne Sicherheitsabfrage |
ABAP Dictionary – SE11
In der Transaktion SE11 rufst Du das ABAP Dictionary auf. Hier kannst Du die wichtigsten ABAP-Objekte für die Programmierung erstellen. Unter anderem sind das folgende: Tabellen, Datentypen, Domänen, Suchhilfen, Strukturen, etc.
Vor allem sollte man sich immer den Unterschied zwischen einem Datentyp und einer Domäne vor Augen halten.
Domäne = technische Eigenschaften (z.B. Wertebereiche von Datenelementen) (technisches Attribut)
Datentyp = semantische Eigenschaften von Attribut, verweist immer auf eine Domäne (betriebswirtschaftliches Attribut)
Im ABAP-Code greift man auf ein Attribut oder ein Feld einer Tabelle über folgende Syntax zu: Tabellenname–Feldname
Du kannst eine F4-Hilfe definieren über eine Suchhilfe oder Domäne > Einzelwerte, Intervall oder Wertetabelle (bevorzugt).
In einer Tabelle kannst Du Einträge erfassen über die Transaktion SE16 oder im ABAP Dictionary in der Tabelle über „Hilfsmittel > Tabelleninhalt > Einträge erfassen„.
Beachte, dass NULL nicht der initiale Wert einer Variable sein muss.
Programmieren im ABAP Editor – SE38
Jede Anweisung endet mit einem Punkt (.).
DATA lv_string type STRING.
Durch das Schlüsselwort REPORT leitet man ein ausführbares Programm ein. Dieses Schlüsselwort steht vor der ID des Reports. Beachte, dass die ID des Reports im Namensraum des Unternehmens oder mit Y oder Z starten muss. Die Buchstaben A bis X sind für SAP reserviert. Wenn man mit diesen Anfangsbuchstaben einen Report erstellt, so benötigt man einen SAP-Entwicklerschlüssel.
REPORT Z_MUSTER.
Kommentare sind wichtig für die Lesbarkeit und das Verständnis Deines Programms. Mit einem Sternchen (*) am Anfang der Zeile kommentierst Du die komplette Zeile aus und mit Anführungszeichen („) den Teil der Zeile, der danach folgt.
Tipp: Mit „Strg + <“ kannst Du die komplette Zeile oder mehrere markierte Zeilen auskommentieren. Die zeilenweisen Kommentare kannst Du mit „Strg + Umschalt + <“ wieder einkommentieren bzw. entfernen.
* Das ist ein Kommentar über die gesamte Zeile DATA lv_string TYPE string. "Das ist ein Kommentar
Mit dem Wort WRITE kann man eine Zeichenkette ausgeben und dem Benutzer auf der SAP GUI anzeigen.
WRITE / 'Hello World'. WRITE: / 'Hello ' , 'World'. "Kettensatz WRITE: / 'Zahl 1:', 30 zahl01. " Zahl01 wird in Spalte 30 ausgegeben
Um Variablen lokal zu definieren, benutzt man das Schlüsselwort DATA. Mit einem Doppelpunkt nach diesem Wort kann man mehrere Variablen getrennt durch ein Komma (,) deklarieren.
DATA: lv_name TYPE string, lv_alter TYPE int.
Wie oben schon zu sehen typisiert man eine Variable mit dem Wort TYPE. Dadurch gibt man den Datentyp oder die Struktur an.
DATA ls_teilnehmer TYPE zteilnehmer. "Workarea
SAP ERP setzt auf eine Datenbank auf. Eine der häufigsten Tätigkeiten als ABAP-Entwickler ist es, Daten von einer Datenbanktabelle zu lesen und korrekt anzuzeigen. Der ABAP-Befehl für das Auslesen einer Datenbanktabelle ist SELECT.
SELECT * FROM zteilnehmer INTO wa_zteilnehmer. WRITE / wa_zteilnehmer. ENDSELECT.
Beim SELECT-Befehl kann man auch gleichzeitig nach dem Primärschlüssel sortieren, in dem man den Zusatz „ORDER BY PRIMARY KEY“ benutzt.
SELECT * FROM sflight WHERE carrid = 'LH' AND connid = '0400' ORDER BY PRIMARY KEY INTO @wa_sflight. ... ENDSELECT.
Möchte man die Ausgabe mit dem WRITE-Befehl übersichtlicher gestalten, eigen sich hierfür die beiden Befehle ULINE und SKIP. ULINE sorgt dafür, dass ein waagrechter Strich erzeugt wird. SKIP erzeugt eine Leerzeile. Man kann nach SKIP auch die Anzahl an Leerzeilen angeben. Im Standard wird eine Leerzeile erzeugt.
ULINE. "Waagrechter Strich SKIP. "1 Leerzeile SKIP 3. "3 Leerzeilen
Eines der nützlichsten und für ABAP-Neulinge sehr gewöhnungsbedürftiges Feature von SAP ERP und dem ABAP-Editor ist die Vorwärtsnavigation. Durch Doppelklick auf ein Schlüsselwort wird direkt in die Detailansicht des Schlüsselwortes navigiert. Das erleichter sehr die tägliche Arbeit, da man dadurch schneller die Definition findet oder in eine Detailansicht springen kann.
Im ABAP Editor (Transaktion SE38) oder der ABAP Workbench (Transaktion SE80) kommt man leicht in die Programmausführung über „System > Dienste > Reporting (Programmausführung)„. Man kann diese Transaktion auch direkt über den Transaktionscode SA38 aufrufen. Im ABAP Editor kann man direkt den Report über „Ausführen“ oder die F8-Taste testen bzw. ausführen.
Wichtige Schlüsselwörter für Berechnungen
In der Deklaration von Variablen sind weitere wichtige Schlüsselwörter notwendig: TYPE, LIKE, VALUE.
Mit dem Schlüsselwort TYPE ist es möglich, Variablen zu typisieren. Dabei bezieht man sich auf eine Typdefinition. Dabei wird der Datentyp angegeben. Wie bereits erläutert verweist der Datentyp auf eine Domäne, die die technische Definition vorgibt. Zudem hinaus kann man auch elementare Datentyp wie z.B. i, p, c oder n verwenden.
DATA zahl01 TYPE i. "i - Integer (Ganzzahlen) DATA zahl01 TYPE p DECIMALS 2. "Fließkommazahl mit zwei Nachkommastellen DATA geschlecht TYPE c LENGHT 1. "Character (Zeichen) fixer Länge, z.B. ' Test ' , Leerzeichen werden ignoriert --> 'Test' DATA zeichenkette type string. "Zeichenkette beliebiger Länge
Mit dem Schlüsselwort LIKE ist es möglich, eine Variable basierend auf andere Variablen, Typen oder Konstanten zu typisieren. Anders als bei TYPE bezieht man sich nun auf Datenobjekte.
DATA zahl1 TYPE p DECIMALS 2. DATA zahl2 LIKE zahl1. "Deklaration von zahl2 ist an Deklaration von zahl1 gebunden
Wenn man direkt bei der Datendefinition auch eine Variable initialisieren möchte, muss man das Schlüsselwort VALUE verwenden. Wenn dieser Wert nicht angegeben wird, erhält die Variable gemäß dem Datentyp den initialen Wert.
DATA zahl1 TYPE i VALUE 1. DATA zahl2 TYPE p DECIMALS 2 VALUE '1.23'.
Gerade wenn im ABAP-Code einzelne Werte öfters verwendet werden und dabei nicht verändert werden dürfen, sollte man auf Konstanten mit dem Schlüsselwort CONSTANTS zurückgreifen.
CONSTANTS zahl03 TYPE i VALUE 5.
In ABAP werden vier Grundrechnearten sowie die Potenzrechnung unterstützt. Dabei kann man sowohl den Operator als auch das Schlüsselwort verwenden:
Operation | Operator | Schlüsselwort |
---|---|---|
Addition | + | ADD x TO Y. |
Subtraktion | – | SUBTRACT x FROM Y. |
Multiplikation | * | MULTIPLY x BY y. |
Division | / | DIVIDE x BY y. |
Ganzzahldivision | x DIV y. | |
Modulo | x MOD y. | |
Potenzieren | ** |
Es gibt in ABAP kompatible und konvertible Attribute. Kompatible Attribute besitzen die gleichen technischen Eigenschaften und konvertible Attribute sind verträgliche Attribute, die umgewandelt werden müssen. Mit dem Schlüsselwort COMPUTE kann man konvertible Attribute umwandeln. Meistens wird das vom System intern bereits hinzugefügt und muss vom ABAP-Entwickler nicht mehr durchgeführt werden.
COMPUTE ergebnis = zahl1 + zahl2 "COMPUTE ist optional und wird vom System automatisch generiert
Bei der Ausgabe wird die Ausgabeposition entweder durch den Listen-Cursor oder mit dem Schlüsselwort UNDER definiert.
WRITE: / 'Zahl1' , zahl1, / 'Zahl2', zahl2 UNDER zahl1.
Systemstruktur sy bzw. syst
Die Systemstruktur sy bzw. syst wird sehr häufig in ABAP-Programmen verwendet. Denn hier werden zur Laufzeit wichtige Informationen gespeichert. Das Feld sy-subrc speichert zur Laufzeit den Erfolg einer Ausführung. So kann man einfach und leicht prüfen, ob z.B. eine Selektion erfolgreich verlaufen ist.
Im ABAP Dictionary (Transaktion SE11) kannst Du über „Datentyp > SYST“ die Attribute von SYST einfach und bequem anzeigen lassen. Eine Übersicht der wichtigsten Felder liefere ich Dir hier:
Attribut | Beschreibung |
---|---|
sy-subrc | Statuscode des letzten Befehls. 0 für erfolgreiche Ausführung |
sy-datlo | Lokales Datum des SAP-Benutzers |
sy-datum | Systemdatum des SAP-Applikationsservers |
sy-host | Name des SAP-Applikationsservers |
sy-index | Index des Schleifendurchlaufs |
sy-langu | Sprache des SAP-Benutzers |
sy-mandt | Mandant |
sy-tcode | Transaktionscode |
sy-uzeit | Uhrzeit des SAP-Anwendungsservers |
sy-uname | SAP-Benutzername |
sy-lsind | Index der Listenebene |
sy-tabix | Index der letzten (gelesenen) Zeile einer internen Tabelle |
sy-timlo | Lokale Uhrzeit des SAP-Benutzers |
Zeichenketten verändern – Die wichtigsten Operationen
Eine Zeichenkette mit dem Datentyp STRING ist eine der am meisten verwendete Datentyp im gesamten ABAP. Der große Vorteil besteht darin, dass man nicht zur Designtime, also während dem Entwickeln festlegen muss wie groß die Zeichenkette sein muss. Das ist gerade für den Entwickler angenehm. Zudem liefert ABAP mit einer großen Anzahl an Operationen mit denen man die Zeichenkette verändern kann.
Durch das Schlüsselwort SHIFT kann man eine Zeichenkette verschieben. Vor allem ist dieses Schlüsselwort nützlich, wenn man führende 0en entfernen möchte.
SHIFT telefon LEFT DELETING LEADING '0'. " Führende Nullen löschen und Zeichenkette nach links verschieben SHIFT feld LEFT DELETING LEADING SPACE. " Führende Leerzeichen löschen SHIFT telefon BY 2 PLACES RIGHT. "Zeichenkette um 2 Stellen nach rechts verschieben
Möchte man in einer Zeichenkette Zeichen oder ganze Wörter ersetzen, so verwendet man das Schlüsselwort REPLACE.
REPLACE ` ` IN telefon_international WITH national_vorwahl. "Datentyp string muss wegen Leerzeichen verwendet werden
Um überflüssige Leerzeichen zu entfernen, eignet sich CONDENSE.
CONDENSE telefon. CONDENSE telefon NO-GAPS. "Entfernt alle vorkommenden Leerzeichen
Eine der am meisten verwendete Operationen ist die Zusammenschließung von Textfeldern mit CONCATENATE.
CONCATENATE vorwahl_int vorwahl_nat telefon INTO telefon_int. CONCATENATE vorwahl_int vorwahl_nat telefon INTO telefon_int SEPERATED BY '-'. " Textfelder werden zusammengefügt und mit '-' getrennt
Wenn in einer Zeichenkette ein Muster zu erkennen ist, kann man mit SPLIT einen bestimmten Textabschnitt aus einer Zeichenkette herausschneiden.
SPLIT telefon_int AT '-' INTO vorwahl_int vorwahl_nat telefon.
Enorm nützlich und ebenfalls oft angewendet ist das direkte Positionieren in einer Zeichenkette. Wenn man die genaue Position eines Wortes oder Zeichens in einer Zeichenkette kennt, kann man dadurch das Wort leicht ermitteln. So möchte man z.B. den Buchungskreis oder die Belegnummer aus dem Objektschlüssel ermitteln und weiß, dass der Aufbau des Objektschlüssels definiert und immer gleich ist. Direkt nach der Zeichenkette gibt man mit der Zahl hinter dem Plus-Zeichen (+) den Index an, ab dem der Substring ermittelt werden soll. Hier beginnt man bei 0 zu zählen. Anschließend gibt man in Klammern () die Länge des Substrings an
vorwahl_int = telefon_int+0(3) "schneidet ein Textabschnitt der Länge 3 ab der Position 0 heraus ************************************************************************************************ DATA: lv_string TYPE STRING. lv_string = 'Hallo Welt.'. lv_string = lv_string+6(4). " Beginn 7. Zeichen (1. Zeichen wird mit Null gerechnet) und Länge 4. " --> "Welt"
Debugging von ABAP-Programmen
Debugging gehört zur der täglichen Arbeit eines ABAP-Entwicklers. Oft kann man nur beim Debugging die Fehler vollständig und komplett analysieren. Im Vergleich mit anderen Entwicklerwerkzeugen ist im SAP ERP-System das Debugging-Werkzeug sehr mächtig. Es erlaubt Dir, übersichtlich und einfach, die Werte und Logiken Deiner Programme zu analysieren und schnell die Fehler zu finden.
Breakpoints sind die Haltepunkte beim Debugging. Durch ein Breakpoint wird bei der Ausführung des Reports genau an dieser Stelle angehalten. Voraussetzung dafür ist natürlich, dass die Stelle auch ausgeführt wird. Alternativ kannst Du direkt über das OK-Feld durch „/h“ den Debugging-Modus starten und Du landest direkt nach der Ausführung des Reports im Debugging.
Man kann auch statische Breakpoints mit dem Schlüsselwort BREAK-POINT setzen. Dabei wird automatisch an dieser Stelle das Debugging gestartet. Man sollte dabei tunlichst darauf achten, dass diese Anweisung nicht in das Produktivsystem übernommen wird, da dadurch ansonsten jederzeit das Debugging startet.
BREAK-POINT.
Außerdem ist ein Watchpoint sehr interessant, da dadurch nur bei der definierten Bedingung das Debugging gestartet und das Programm angehalten wird.
Im Debugging klickt man mit dem Cursor auf eine Variable auf der der Watchpoint angewendet werden soll und drückt auf den Button „Watchpoint“. Anschließend kann man die gewünschte Bedingung angeben, bei der angehalten werden soll, wenn die Bedingung erfüllt wird. Gebe in der „Freie Bedingungseingabe“ die Bedingung mit „= ‚Wert‚“ ein (Ohne die Anführungszeichen). Auf Berater-Wiki ist das Anlegen von Watchpoints sehr gut erläutert.
Hier sind sehr nützliche Shortcuts, mit denen man im Debugger leichter navigieren kann:
Shortcut | Beschreibung |
---|---|
Shift + F5 | Debugger von Anfang des Programms |
F5 | Einzelschritt (auch in eine Methode/Funktionsbaustein hinein) |
F6 | Ausführen, Nächstes ausführbare Kommando (Methoden/Funktionsbausteine überspringen) |
F7 | Zurück aus der Methode/Funktionsbaustein |
F8 | Weiter, Sprung zum nächsten Breakpoint |
Möchte man beim Debugging unerwünschte Komponenten/Frameworks ausblenden, kann man das Layer-aware Debugging aktivieren. Dafür geht man folgendermaßen vor:
Debugger starten > Debugger-Layer Konfigurieren > Layer-Aware Debugging aktiv > Feld ‚Programme‘ ausfüllen > ‚Halte beim Eintritt‘ ankreuzen
Modifikation von transparenten Datenbanktabellen
Tabellen bildet das Fundament eines SAP ERP-Systems. In ihnen werden die wichtigen Stamm- und Bewegungsdaten gespeichert. Eine der wichtigsten Tätigkeiten eines ABAP-Entwicklers ist das Lesen, Ändern oder Löschen von Daten in einer Datenbank. Doch bevor es so weit kommt, müssen zuerst einmal die Tabellen definiert werden. Es gibt im Standard viele Tabellen, aber man kann im ABAP Dictionary auch eigene Tabellen definieren und pflegen.
Über die Transaktion SE11 (ABAP Dictionary) kannst Du Deine eigenen Tabellen definieren. Diese müssen im Namensraum liegen oder mit dem Buchstaben Y oder Z beginnen, da die anderen Buchstaben für SAP-Entwicklungen vorgesehen sind.
Mit dem Data Browser (SE16 oder SE16N) kannst Du die Einträge in Deiner Tabelle anzeigen lassen.
Eine Tabelle besteht aus Feldern, die einen Datentypen besitzen. Jeder Datentyp wiederum zeigt auf eine Domäne. Bei der Aktivierungsreihenfolge geht man also folgendermaßen vor: Domäne, Datentyp und Tabelle.
Bei manchen Feldern sind Referenzfelder notwendig. Möchte man Währungen (CURR) oder Mengen (QUAN) pflegen so muss man auch das Referenzfeld für Währungseinheiten (CUKY) oder Mengenfelder (UNIT) pflegen.
- CURR – CUKY
- QUAN – UNIT
Durch den Button „Fremdschlüssel“ kann man auch einen Fremdschlüssel definieren. Fremdschlüssel ist ein Feld in der Tabelle, das in einer anderen Tabelle ein Primärschlüssel ist. Somit haben die beiden Tabellen eine Beziehung und können durch einen Join verknüpft werden. Die Fremdschlüssel müssen dabei die gleiche Domäne haben.
Man hat auch die Möglichkeit, Append-Strukturen oder Include-Strukturen zu definieren. Beide erweitern durch weitere Felder die Tabelle.
Append-Strukturen sind genau einer Tabelle zugeordnet. Man kann dabei eine Append-Struktur anlegen, indem man im ABAP Dictionary (Transaktion SE11) in der Tabelle „Springen > Append-Struktur“ auswählt. Danach gibt man den Namen der Append-Struktur an und definiert die Felder.
Include-Strukturen hingegen sind ein mehrfach verwendeter Baustein. Sie gehören zu den Dictionary-Objekten. Über „Bearbeiten > Include > Einfügen“ kann man Include-Strukturen in die Tabelle einfügen.
Generell kann man eine Tabelle nur dann löschen, wenn sie nicht mehr verwendet wird. Ansonsten muss man vorher die Verwendung und Daten löschen bevor man die Tabelle an sich löschen kann.
Wenn hingegen eine Tabelle verändert wird, obwohl schon Daten in der Tabelle vorhanden sind, muss die Tabelle umgesetzt werden. Eine Umsetzung ist aber sehr einfach. Hierbei wird die neue Tabelle erstellt, die Daten in die neue Tabelle transferiert und die alte Tabelle gelöscht.
Für die Umsetzung verwendet man die Datenbank-Utility in der Transaktion SE14. Nach dem Aufruf gibt man die Tabelle ein, wählt den Radio-Button „Tabellen“ aus und klick auf „Bearbeiten“. Anschließend wählt man die Option „Daten erhalten“ aus und klickt auf „Aktivieren und Datenbank anpassen“.
Datum, Zeit, Mengen und Währungen
Um das aktuelle Datum zu ermitteln, kann man das Feld „sy-datum“ verwenden. Beim Datum und bei der Zeit gibt es verschiedene Formate, die man beliebig festlegen kann. Bei Operationen mit diesen Werten muss man darauf achten, welches Format gewählt wird.
DATA rechnungsdatum TYPE sy-datum. "Datumsformat: 'yyyymmdd' (z.B. '20150205') DATA rechnungsdatum2 TYPE d. monatsanfang+6(2) = '01'. "Monat ändern DATA zeitfeld TYPE t. "Format: HHMMSS DATA zeitfeld TYPE sy-uzeit.
Bei Mengen (QUAN) und Währungen (CURR) muss man stets darauf achten, dass das Referenzefeld mit angeben wird.
Bei manchen Feldern sind Referenzfelder notwendig. Möchte man Währungen (CURR) oder Mengen (QUAN) pflegen so muss man auch das Referenzfeld für Währungseinheiten (CUKY) oder Mengenfelder (UNIT) pflegen.
- Währungen (CURR) – Währungseinheiten (CUKY)
- Mengen (QUAN) – Mengenfelder (UNIT)
Auf Datenbanktabelle zugreifen
Im ABAP-Code verwendet das SAP-System selbst Open SQL. Es ähnelt von der Syntax und den Befehlen sehr stark dem nativen SQL. Deshalb können meist SQL-Experten ABAP-Code lesen.
Das SAP-System verwendet ein eigens entworfenen Berechtigungskonzept. Mit definierten Rollen in der Transaktion PFCG und der Benutzerverwaltung SU01 kann man die Berechtigungen verwalten. Im ABAP-Code selber kann man mit AUTHORITY-CHECK die Berechtigungen prüfen lassen.
PARAMETERS carrid TYPE spfli-carrid. AT SELECTION-SCREEN. AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD carrid ID 'ACTVT' FIELD '03'. IF sy-subrc <> 0. MESSAGE 'Keine Berechtigung' TYPE 'E'. ENDIF.
Beim Zugriff auf eine Tabelle werden Lese- und Schreibsperren gesetzt. Eine Lesesperre verhindert das Verändern von Daten. Eine Schreibsperre hingegen ist eine exklusive Sperre. Dadurch kann niemand anders lesend oder schreibend auf Datensätze zugreifen.
Bei der Interaktion mit der Datenbank gibt es folgende Operationen:
- INSERT – Einfügen von Datensätze
- UPDATE – Bestehende Datensätze verändern
- MODIFY – Datensatz anpassen oder einfügen
- DELETE – Datensatz löschen
INSERT (zieltabelle) FROM wa_zteilnehmer. UPDATE zteilnehmer FROM wa_zteilnehmer. MODIFY zteilnehmer FROM wa_zteilnehmer. "Gibt es den Datensatz, wird er angepasst, sonst eingefügt DELETE FROM zteilnehmer WHERE zzkurstitel = 'Netzwerktechnik'.
Achte vor allem beim DELETE-Befehl auf eine WHERE-Klausel, da ansonsten alle Daten gelöscht werden.
Logische Ausdrücke
Wenn Dein ABAP-Code ausschließlich durch Anweisungen besteht, ist wenig Logik enthalten. Man kann durch logische Ausdrücke bzw. Bedingungen festlegen, dass abhängig von einer Bedingung ABAP-Code ausgeführt wird. Möchte man z.B. abhängig vom Alter ausgeben, ob die Person volljährig ist, kann man das leicht mit If-Else-Anweisungen ausführen.
IF <Bedingung>. … ELSEIF <Bedingung>. … ELSEIF <Bedingung>. … ELSE. … ENDIF.
Dabei werden die Bedingungen von oben nach unten geprüft. Die erste Bedingung die positiv ist, wird durchlaufen. Anschließend verläuft der ABAP-Code nach dem ENDIF weiter. Sollte keine Bedingung von IF bzw. ELSEIF positiv sein, wird der Anweisungsblock nach ELSE ausgeführt. ELSEIF ist dabei optional und muss nicht angegeben werden.
Das Gleiche kann man mit einer CASE-Anweisung umsetzen. Hierbei wird anhand einer Variable ein Anweisungsblock ausgeführt. Wenn der Wert in WHEN nicht abgedeckt ist, wird OTHERS ausgeführt.
CASE <Abfrageobjekt>. WHEN '1'. … WHEN '2'. … WHEN OTHERS. … ENDCASE.
CASE sy-subrc. WHEN 0. WRITE: / 'In Ordnung'. WHEN 4. WRITE: / 'Fehler'. WHEN OTHERS. WRITE: / 'Unbekannter Fehler'. ENDCASE.
Schleifen
Schleifen ermöglichen es, wiederkehrende Aufgaben auszuführen und Listen oder Tabellen zu durchlaufen. Eine der bekanntesten Schleifen führt man mit dem SELECT-Befehl aus.
SELECT * FROM zteilnehmer2 INTO wa_zteilnehmer2 WHERE zzkurstitel = 'Netzwerktechnik'. ENDSELECT.
Eien DO-Schleife kann x-mal ausgeführt werden. Wenn man hinter dem Schlüsselwort DO keine Zahl angibt, erzeugt man dadurch eine Endlosschleifen. Man kann dabei auch eine DO-Schleife in einer DO-Schleife einfügen.
DO. "Endlosschleife … ENDDO. DO 50 TIMES. DO 100 TIMES. … ENDDO. ENDDO.
Eine WHILE-Schleife enthält eine Bedingung. Sie wird solange ausgeführt wie die Bedingung wahr / true ist. Direkt nach dem Schlüsselwort WHILE gibt man die Bedingung an.
WHILE sek > 0. WRITE: / sek. Sek = sek – 1. ENDWHILE.
Bei Schleifen kann man auf die Systemvariable SY-INDEX zurückgreifen. Hier wird der Index als Zählervariable bei Schleifendurchläufen gespeichert.
Möchte man vorzeitig eine Schleife verlassen, gibt es drei Abbruchanweisungen für Schleifen
- CONTINUE: Beendet den aktuellen Schleifendurchgang und startet einen neuen Schleifendurchlauf
- CHECK: Bei Nichterfüllen der Bedingung wird der aktuelle Schleifendurchgang beendet und ein neuer Schleifendurchlauf gestartet (CHECK <Bedingung>). Kann als Kombination von IF NOT und CONTINUE gesehen werden
- EXIT: Beendet die komplette Schleifenbearbeitung
Selektionsbildschirme
Selektionsbildschirme sind für einen SAP-Benutzer die Möglichkeit, Einfluss auf die Ausführung und das Ergebnis des ABAP-Reports zu nehmen. Denn nicht alle SAP-Benutzer müssen die Möglichkeit haben, die Ergebnismenge zu filtern und genau das anzeigen zu lassen was der SAP-Benutzer auch wirklich benötigt. Bei den Selektionsbildschirmen gibt es folgende Möglichkeiten:
- Klassische Dynpros: typische Anwendungstransaktionen
- Selektionsbilder: Darstellung der Parametereingabe
- Listausgabe: Ausgabe bei dem Ende der Verarbeitung eines Reports
Ein ABAP-Programm kann dabei in mehrere Ereignisblöcke untergliedert werden. Ein Ereignisblock endet mit der Definition des nächsten Ereignisblocks. Folgende Ereignisblöcke können verwendet werden:
- LOAD-OF-PROGRAM: Ausführung unmittelbar nach dem Laden des Programms
- INITIALIZATION: Prüfung, ob Report deklariert, danach Selektionsbildprozessor
- AT SELECTION-SCREEN: Nachdem der Anwender den Bildschirm gesehen und ausgefüllt hat
- START-OF-SELECTION: Übergabe an ABAP-Prozessor
Typischerweise wird vor AT SELECTION-SCREEN der Selektionsbildschirm mit PARAMETERS und SELECT-OPTIONS definiert. Denn direkt nach der Ausführung des Selektionsbildschirms wird der Ereignisblock nach AT SELECTION-SCREEN ausgeführt.
Mit dem Schlüsselwort PARAMETERS wird ein Eingabefeld erzeugt, mit dem der Benutzer eine Eingabe tätigen kann. Hierbei kann man wie bei der Datendefinition die Variable typisieren. Die Variable bzw. Eingabe des Benutzers ist dann zur Laufzeit im Zugriff.
PARAMETERS sek TYPE i DEFAULT 10 OBLIGATORY. "Pflichtfeld PARAMETERS geschlec TYPE char255 OBLIGATORY VALUE CHECK. "Nur hinterlegte/gültige Werte werden akzeptiert PARAMETERS kursti TYPE char255 DEFAULT 'SAP-Grundlagen' LOWER CASE. "Unterscheidung zwischen Groß- und Kleinschreibung PARAMETERS vollstli as checkbox. "Parameter als Checkbox PARAMETERS: initialw RADIOBUTTON GROUP rad1, non_sap RADIOBUTTON GROUP rad1, schaltja RADIOBUTTON GROUP rad1. "Radiobutton werden der Gruppe rad1 hinzugefügt
Mit TYPE nimmt man erneut Bezug auf einen Datentyp und mit LIKE Bezug auf ein Datenobjekt.
Um mehr als einen Parameter bzw. einen Bereich in einem Wert zu speichern, verwendet man einen SELECT-OPTIONS. SELECT-OPTIONS dient als Selektionstabelle und bildet dabei eine interne Tabelle. Bei diesem Schlüsselwort hat man dabei mehrere Möglichkeiten bzw. Zusätze:
- SIGN: logische Operand (<, =, >, …)
- OPTION: Behandlung der Grenzwerte
- LOW: Untergrenze des Intervalls, bei Einzelwert nur Einzelwert
- HIGH: Obergrenze, bei Einzelwerten leer
- NO-EXTENSION: nur eine Zeile kann ausgewählt werden, verhindert Mehrfachselektion
SELECT-OPTIONS gebdat FOR wa_zteilnehmer-geburtstdatum. “Erlaubt Mehrfachselektion IF wa_zteilnehmer-geburtsdatum IN gebdat. * Anweisungsblock ENDIF.
Die Zusätze DEFAULT, OBLIGATORY, LOWER CASE gelten ebenfalls bei SELECT-OPTIONS.
Bei SELECT-OPTIONS hat man sehr viele Gestaltungsmöglichkeiten. Man kann durch BEGIN OF LINE einen Zeilenblock gestalten. Einzelne Zeilen werden mit LINE definiert.
SELECTION-SCREEN BEGIN OF LINE.
Möchte man in einem Block auch eine Beschreibung hinzufügen, eignet sich das Schlüsselwort COMMENT.
SELECTION-SCREEN COMMENT (16) text-005. SELECTION-SCREEN COMMENT 24(60) text-005. “Text ab Position 24 mit der Länge 60
Bei Verwendung des Zusatzes FOR FIELD wird das Ausgabefeld mit einem über PARAMETERS oder SELECT-OPTIONS definierten Parameter oder Selektionskriterium desselben Programms verknüpft. Dadurch kann man die F1- und F4-Hilfen benutzen.
SELECTION-SCREEN COMMENT (20) text-002 FOR FIELD geschlec. “Text mit Parameter geschlec verknüpfen, erhält unter Umständen F1 und F4 Hilfe
Man kann außerdem den Zeilenblock mit weiteren Schlüsselwörtern gestalten. Mit TITLE fügt man einen Rahmentext und mit „WITH FRAME“ einen Rahmen hinzu. Zudem hinaus kann man POSITION für die Positionierung und „BEGIN OF BLOCK“ für die Blockdefinition verwenden.
SELECTION-SCREEN POSITION 24. “Position der nächsten Zeile ab 24 starten lassen SELECTION-SCREEN BEGIN OF BLOCK. SELECTION-SCREEN END OF BLOCK. SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE title.
Im ABAP-Editor (Transaktion SE38 bzw. SE80) gibt es die Möglichkeit, die Textelemente im Report zu pflegen. Diese Pflege ruft man über „Springen > Textelemente“, die F5-Taste oder den Button „Textelemente“ auf.
Beim ersten Aufruf werden die technischen Namen als Texte angezeigt. Wenn man hingegen die Selektionstexte pflegt (?…) mit einem Wort austauscht, dann werden die gepflegten Texte beim Selektionsbildschirm angezeigt.
Es gibt dabei folgende Textelemente:
- Textsymbole: anstatt von hart codierten Literalen
- Konvention bzw. Empfehlung: Beschreibung als Kommentar daneben das Literal in Kommentaren im ABAP-Code!
- Selektionstexte: anstatt des technischen Namens von Parametern und Selektionstabellen
- Anlegen:
- SE38, Report eingeben > Textelement auswählen > Ändern-Button
- im Quellcode > Springen > Textelemente > Selektionstexte
- Anlegen:
- Listüberschriften: Gestaltung von Listköpfen
Für jedes Selektionsbild kann man eine Variante anlegen.
- SE38 > Programmname > Varianten > Ändern > Anlegen/Anzeigen > Attribute (Variantenattribute anzeigen)
- Selektionsbild > Springen > Variante > Als Variante sichern/Button „Als Variante sichern“
Man kann dabei den Report mit der angelegten Variante starten:
- SE38 > Button „Mit Variante“
- System > Dienste > Reporting > Programmname eingeben > Button „Mit Variante“
- Selektionsbild aufrufen > Springen > Varianten > Holen
Ein Textsymbol besteht aus „TEXT-“ und einer dreistelligen Zahl. Beispiel: TEXT-001. Man kann ein Textelement entweder per Vorwärtsnavigation oder über den Button „Textelemente“ anlegen. Dabei klickt man einfach doppelt per Vorwärtsnavigation auf die dreistellige Zahl. Anschließend fragt einen das System, ob man das Textsymbol anlegen möchte, da es noch nicht existiert. Nach dem Speichern sollte man das Aktivieren nicht vergessen.
Nachrichten
Nachrichten dienen der Interaktion mit dem Benutzer. So weiß der Benutzer was im Programm vorgeht und erhält eine Rückmeldung über den Erfolg des Programms. Vor allem bei Falscheingaben sind Nachrichten sehr nützlich und sollten verwendet werden.
Eine Nachrichtenklasse kann man entweder im ABAP Editor (SE38 bzw. SE80) über „Springen > Nachrichten“ auswählen oder in der Transaktion SE91 pflegen.
Die Nachrichten werden in der Tabelle T100 gespeichert. Nachrichten sind kontextsensitiv. Mit dem Schlüsselwort MESSAGE kann man in der Nachrichtenzeile dem SAP-Benutzer Nachrichten ausgeben.
MESSAGE e002( zabap ). "e - Fehler; 002 - Nachricht in der zweiten Zeile; zabap - Nachrichtenklasse
Bei der Definition von Texten kann man einen Platzhalter definieren. Hierfür verwendet man das kaufmännische Und (&) in der Nachricht. Beim Aufruf der Nachricht wird automatisch die angegebene Variable mit dem Platzhalter ersetzt.
MESSAGE e002( zabap ) WITH lv_nr. "lv_nr ersetzt & in Zeile 2 in Nachrichtenklasse zabap
Generell gibt es folgende Nachrichtentypen:
- E – Fehlermeldungen
- I – Information (werden in einem Dialogfenster angezeigt)
- S – Statusmeldung (werden in der Statusleiste angezeigt)
- W – Warnungen
- A – Abbruchmeldung (werden in einem Dialogfenster angezeigt. Das laufende Programm bricht ab)
- X – Exit-Meldungen (brechen das laufende Programm ab und erzeugen einen Kurzdump)
Interne Tabelle
Eine interne Tabelle ist eine temporär gespeicherte Datenbanktabelle im ABAP-Programm. Man kann es als flüchtiger/volatiler Speicher bezeichnen, der im Arbeitsspeicher gespeichert wird. Ähnlich wie in ABAP deklarierte Strukturen. Strukturen besitzen jedoch nur eine Zeile, interne Tabellen besitzen beliebig viele Zeilen. Den Inhalt einer internen Tabelle bezeichnet man als Tabellenrumpf.
Der große Vorteil von internen Tabellen im Vergleich zu Datenbanktabellen ist der schnellere Zugriff. Anstatt öfters auf eine entfernte Datenbanktabelle zuzugreifen, bei der der Zugriff der Flaschenhals ist und für eine langsame Verarbeitung sorgt, muss eine interne Tabelle einmal befüllt werden, ist im Arbeitsspeicher zur Verfügung und sorgt für eine schnelle Verarbeitung.
Generell gibt es folgende Tabellentypen:
- Standardtabelle: Zugriff über Schlüssel oder Index
- Schlüssel: Zugriffszeit und Anzahl Zeiten direkt proportional, je mehr Zeilen, desto länger dauert es
- Index: Zugriffszeit wächst nur logarithmisch
- eindeutiger Schlüssel kann nicht definiert werden (mehrfach vorkommende Schlüssel), schnelles Füllen möglich
- Sortierte Tabelle
- Inhalt nach einem Schlüssel sortiert abgelegt
- Schlüssel kann eindeutig sein
- Standardtabelle und sortierte Tabellen sind Indextabellen
- Hash-Tabelle: Zugriff ausschließlich über eindeutigen Schlüssel
- eignet sich für sehr große Datenmengen
Es gibt dabei Standard- und benutzerdefinierte Schlüssel einer Tabelle:
- eindeutiger Schlüssel: Zeile kann nur einmal vorkommen (nicht mehrfach)
- nicht eindeutigen Schlüssel: Zeile darf mehrfach vorkommen
- Standardschlüssel: ist vom Zeilentyp der Tabelle abhängig
- benutzerdefinierter Schlüssel: zusammengesetzt aus beliebigen, frei definierbaren Teilmenge
Interne Standardtabelle anlegen
Bei der Anlage einer internen Tabelle geht man folgendermaßen vor:
- Deklaration eines Zeilentyps
- Deklaration eines Tabellentyps
- Deklaration der Tabelle
- Deklaration des Arbeitsbereiches
Dabei können die ersten beiden Schritte entfallen, wenn man auf bestehende Zeilen- oder Tabellentypen zurückgreift.
TYPES: BEGIN OF zeile_typ, zzkurstitel TYPE zteilnehmer-zzkurstitel, tkurspreis TYPE zteilnehmer-tkurspreis, END OF zeile_typ. ” Zeilentyp deklarieren (Schritt 1) TYPES itab_typ TYPE STANDARD TABLE OF zeile_typ. "Tabellentyp deklarieren, Tabelle besteht aus bestimmter Zeilentyp zeile1_typ (Schritt 2) *Zum Vergleich: Deklaration einer sortierten Tabelle mit eindeutigem Schlüssel: TYPES itab_typ TYPE SORTED TABLE OF zeile_typ WITH UNIQUE KEY zzkurstitel. DATA itab TYPE itab_typ. "Deklaration der Tabelle (Schritt 3) DATA wa_itab TYPE zeile_typ. "Arbeitsbereich deklarieren (Schritt 4)
Interne Standardtabelle mit Workarea füllen
Um eine interne Tabelle zu befüllen, sind folgende Schritte notwendig:
- Workarea füllen
- Interne Tabelle füllen
“Zeilenweise Füllung einer internen Tabelle SELECT * FROM zteilnehmer INTO wa_zteilnehmer. wa_itab-bezeichnung = wa_zteilnehmer-zzkurstitel. wa_itab-preis = wa_zteilnehmer-tkurspreis. "Workarea füllen APPEND wa_itab TO itab. "interne Tabelle füllen ENDSELECT. "Inhalte namensgleicher Felder einfügen SELECT * FROM zteilnehmer INTO wa_zteilnehmer. MOVE-CORRESPONDING wa_zteilnehmer TO wa_itab. "Workarea mit namensgleichen Feldern füllen APPEND wa_itab TO itab1. "Interne Tabelle füllen ENDSELECT. "Blockweises Einfügen der Zeilen (schnellste Variante) TYPES BEGIN OF zeile_typ. “Kein Kettensatz INCLUDE TYPE zeile_typ. TYPES minteiln TYPE i. TYPES END OF zeile_typ. TYPES ita_typ TYPE STANDARD TABLE OF zeile_typ. “Standardtabelle DATA itab TYPE itab_typ. SELECT * FROM zteilnehmer INTO CORRESPONDING FIELDS OF TABLE itab. "Array-Fetch, alle Inhalte von namensgleichen Felder werden blockweise in die interne Tabelle übertragen
Interne Tabelle mit Workarea verarbeiten
LOOP AT itab INTO wa_itab. “Zeilen satzweise in workarea übertragen " Andere Technik LOOP ASSIGNING … LOOP REFERENCE INTO … "Änderungen wa_itab-preis = 567. “Workarea Eintrag verändern MODIFY itab FROM wa_itab. “interne Tabelle von workarea aktualisieren INSERT wa_itab INTO itab INDEX zeilen_itab. "Eintrag der workarea in interne Tabelle an index zeilen_itab1 einfügen READ TABLE ITAB INDEX 3 INTO wa_itab. "über den Index 3 den Eintrag in die workarea laden READ TABLE itab INTO wa_itab WITH KEY zzkurstitel = 'SAP-Grundlagen'. "Nach einem Schlüssel suchen LOOP AT itab INTO wa_itab1. "Zeilen satzweise in workarea stellen DELETE TABLE itab FROM wa_itab.
Workareas und interne Tabelle mit Workarea löschen
CLEAR itab. "interne Tabelle löschen/leeren CLEAR wa_itab. "workarea löschen/leeren CLEAR: itab, wa_itab. "Die gleiche Anweisung als Kettensatz FREE itab. "gleich wie CLEAR (Speicherplatz bleibt reserviert), wobei der Speicherplatz freigegeben wird
Wiederverwendung von Programmen
Die Modularisierung bzw. Wiederverwendung von Programmen ist heutzutage ein zentraler Aspekt in der Programmierung. Schließlich ist es extrem mühsam, bei Änderungen x-beliebige Stellen anzupassen. Wenn man hingegen modular programmiert, kann man Entwicklungen wiederverwenden. Dadurch spart man Zeit bei der Entwicklung und Wartung von Programmen.
Außerdem ist der ABAP-Code dadurch übersichtlicher, da Details in Unterprogrammen, Funktionsbausteinen oder Klassen gekapselt werden können.
Die Modularisierung beschäftigt sich also damit, ein Programm in Komponenten zu zerlegen.
Es gibt dabei folgende Modularisierungs- bzw. Kapselungstechniken:
- globale ABAP-Klassen
- lokale ABAP-Klassen
- Funktionsgruppen
- Unterprogramme
- Verarbeitungsblöcke (z.B. START-OF-SELECTION)
Die Modularisierungstechniken im Detail lassen sich folgendermaßen untergliedern:
- Modularisierung des Quellcodes (Include-Programme)
- Programmteile „auslagern“: INCLUDE z_teilnehmer_deklaration.
- Prozeduren (besitzen Schnittstellen)
- Methoden
- Unterprogramme
- Funktionsbausteine
- ABAP-Klassen
Includes sind die einfachste Form der Modularisierung. Hier wird ein bestehender ABAP-Code in einen Include ausgelagert und kann durch das Schlüsselwort INCLUDE verwendet werden. Man kann sich das so vorstellen wie wenn man die inkludierte Programmierung anstelle des Schlüsselwortes verwendet hätte. Includes kann man im ABAP Editor durch die Vorwärtsnavigation anlegen oder durch Rechtsklick im ABAP Workbench und „Anlegen > Weitere (1) > Include„.
REPORT z_muster. INCLUDE labap_docutop. " Globale Definition
Des Weiteren bieten Methoden von Klassen ebenfalls die Möglichkeit, Quellcode wiederzuverwenden und auszulagern.
CALL METHOD (class)=>(meth) PARAMETER-TABLE param_tab EXCEPTION-TABLE ex_tab.
Unterprogramme werden im ABAP-Programm selber definiert und somit auch aufgerufen. Man benutzt sie für programminterne Modularisierung von Aufgaben. Die Steuerung erfolgt dabei zentral auf der oberen Ebene und die verarbeitenden Operationen werden im Unterprogramm ausgeführt. Durch das Schlüsselwort PERFORM werden Unterprogramme aufgerufen und durch FORM und ENDFORM definiert.
FORM itab_fuellen. " … ENDFORM. PERFORM itab_fuellen. “Unterprogramm itab_fuellen aufrufen
Bei Unterprogrammen sollte man den Gültigkeitsbereich stets beachten. Lokale Variablen haben nur in dem Unterprogramm ihren Gültigkeitsbereich. Man muss die Variablen explizit über die DATA-Anweisung deklarieren.
Einen fremden Report kann man mit SUBMIT aufrufen.
"Code, der zum Ausführen eines Berichts verwendet wird ZEXREPORT SCHREIBEN. SUBMIT ZEXREPORT with selection-table seltab via selection-screen. "Code zum Füllen der 'Parameter' und Ausführen des Berichts SUBMIT ZEXREPORT WITH param1 = 'Wert' WITH param2 = 'Wert'. "Report ausführen und danach zum aktuellen Programm zurückkehren SUBMIT ZEXREPORT AND RETURN. "Report über ein eigenes Selektionsbild ausführen SUBMIT ZEXREPORT VIA SELECTION-SCREEN. "Report mit Selektionsbildvariante absetzen SUBMIT ZEXREPORT USING SELECTION-SET 'VARIANTE'.
" Aufruf des Unterprogramms itab_liste PERFORM itab_liste USING par zzaehler_itab. " Definition des Unterprogramms itab_liste FORM itab_liste USING lok_par lok_zzaehler. " Anweisungsblock CHECK lok_par IS NOT INITIAL. ENDFORM. "Werte der lokalen Variablen werden an die globalen Variablen “übergeben”/haben die gleichen Werte, die Werte der lokalen Variablen gehen dabei “verloren”
"Aufruf von itab_fuellen - interne Tabelle übergeben PERFORM itab_fuellen USING itab. "Definition von itab_fuellen FORM itab_fuellen USING itab_universal TYPE table. "übergebene interne Tabelle definieren
" Ruft Unterprogramm in Report z_teilnehmerliste_a auf PERFORM itab_liste IN PROGRAM z_teilnehmerliste_a USING nvml zzaehler_itab.
" eigener Report wird beendet, z_teilnehmerliste_a wird ausgeführt SUBMIT z_teilnehmerliste_a VIA SELECTION-SCREEN. “Übergabe der beiden technischen Felder par1 und par2 SUBMIT z_teilnehmerliste_a WITH par1 = ‘X’ WITH par2 = ‘X’ VIA SELECTION-SCREEN. "Report ohne Selektionsbildschirm rufen SUBMIT z_teilnehmerliste_a WITH par1 = 'X'. "Selektionsbild des Folgereports wird nicht angezeigt " Eigener Report soll weiterlaufen SUBMIT z_teilnehmerliste_a VIA SELECTION-SCREEN AND RETURN. "nach dem fremden Report wird wieder der eigene Report ausgeführt
Funktionsbausteine bilden einen zentralen Aspekt in ABAP. Sie sind nicht mehr aktuell und modern, da sie durch ABAP-Klasen und dem objektorientierten Ansatz abgelöst wurden, aber sie sind immer noch in zahlreichen ABAP-Programmen präsent und werden genutzt.
Über den Function Builder in der Transaktion SE37 kann man Funktionsbausteine definieren. Funktionsbausteine besitzen eine Schnittstelle, die über folgende wichtige Parameter abgedeckt wird:
- Importing: Parameter, welche der Funktionsbaustein benötigt – Wertübergabe
- Exporting: Parameter, welche der Funktionsbaustein zurückgibt
- Changing: Sowohl Importing- als auch Exporting-Parameter
- Exceptions: Ausnahmen, werden über den Rückgabewert sy-subrc geregelt
Über den Function Builder kann man über die Funktion „Testen“ auch die Funktionsbausteine testen bzw. mit Werten ausführen.
Über „CALL FUNCTION“ wird ein Funktionsbaustein aufgerufen.
Über die Funktion „Muster“ kann man einfach und vordefiniert Funktionsbausteine im ABAP-Programm aufrufen. Die optionalen Parameter werden beim Einfügen auskommentiert eingeblendet.
CALL FUNCTION 'ALV_CONSISTENCY_CHECK' EXPORTING i_save = is_layo = is_variant = it_fcat = * IT_SORT = * IT_FILT = * IT_SGRP = * IT_HLINKS = it_outtab = .
CALL FUNCTION ‘WS_EXECUTE’ EXPORTING commandline = 'C:\TEMP\TEST.PDF' “zu öffnende Datei program = 'C:\Program Files (x86)\Adobe\reader 9.0\Reader\AcroRd32.exe' "ausführbares Programm . "Punkt nicht vergessen
CALL FUNCTION 'Z_FUBA_EXAMPLE' EXPORTING i_id = '1' IMPORTING e_detail = lv_detail.
Dabei muss man immer stets aus Sicht des Funktionsbausteins denken. Was bei der Definition im Funktionsbaustein ein IMPORT-Parameter ist, ist beim Aufruf ein EXPORT-PARAMETER. Und andersherum. Im Beispiel oben ist „i_id“ aus Sicht des Funktionsbausteins ein IMPORTING-Parameter und wird an den Funktionsbaustein übergeben. Der Funktionsbaustein gibt „e_detail“ als EXPORTING-Parameter zurück. Beim Aufruf muss man aber mit EXPORTING übergeben und mit IMPORTING entgegennehmen.
Mit ABAP-Klassen ist ABAP eine objektorientierte Sprache. Man spricht hier oft von ABAP OO. Mit der Objektorientierung öffnen sich neue Wege: Modularisierung, Wiederverwendbarkeit, Vererbung, Polymorphie, usw.
Ein Objekt ist die Instanz einer Klasse.
Bei ABAP-Klassen verwendet man Instanzen, Attribute, Methoden und verschiedene Sichtbarkeiten. Bei den Sichtbarkeiten sind PUBLIC, PRIVATE, PROTECTED möglich. Bei den Methoden spricht man oft vom sogenannten Scope. Jede Methode ist entweder eine Instanzmethode (eine Instanz der Klasse ist notwendig) oder Klassenmethode (statische Methode, Instanz der Klasse ist nicht notwendig).
Man kann Klassen entweder im Class Builder (Transaktion SE24) oder lokal im ABAP Editor oder ABAP Workbench definieren und implementieren. Lokale Klassen sind nur in dem Programm verfügbar, wohingegen globale Klassen in jedem Programm verwendet werden können.
Im Class Builder kann man über die Funktion „Testen“ die Methoden einer Klasse testen bzw. ausführen.
CLASS lcl_my_local_class DEFINITION. PUBLIC SECTION. CLASS-METHODS main. ENDCLASS. CLASS lcl_my_local_class IMPLEMENTATION. METHOD main. WRITE: / ‘Hello World!’. ENDMETHOD. ENDCLASS. START-OF-SELECTION. CALL METHOD lcl_my_local_class=>main( ). "Methode aufrufen
Für die Datenübergabe gibt es zentrale Speicherbereiche auf die man zugreifen kann, um sich die Übergabe zu sparen und die Daten temporär zentral zu „lagern“. Dabei gibt es folgende Möglichkeiten:
- Dateien
- Datenbanktabellen
- Arbeitsspeicherbereiche
- Globales SAP Memory
- Lokales SAP Memory
- ABAP Memory
- Shared Objects
Das globale SAP Memory steht während der Anmeldedauer des SAP-Anwenders zur Verfügung. Das globale SAP Memory kann dabei von anderen Transaktionen ebenfalls verändert werden. Man kann folgendermaßen darauf zugreifen:
SET PARAMETER ID 'Z_TEST' FIELD progname. "Inhalt des Feldes progname in SAP-Memory (Parameter Z_TEST) schreiben GET PARAMETER ID 'Z_TEST' FIELD progname. "Inhalt des SAP-Memorys in Feld 'progname' schreiben
Das lokale SAP Memory speichert die Werte während der Dauer einer Transaktion. Man kann dabei ebenfalls mit SET PARAMETER und GET PARAMETER darauf zugreifen. Die Parameter-IDs bleiben pro Transaktion unverändert.
Das ABAP Memory speichert die Daten solange wie ein externer Modus mit seinem internen Modi erhalten bleibt. Wenn der Benutzer den Modus schließt, werden die Inhalte gelöscht.
EXPORT itab TO MEMORY ID progname "Daten (itab4) ins ABAP Memory (progname) schreiben IMPORT itab FROM MEMORY ID progname "Daten (itab4) aus dem ABAP Memory (progname) holen IMPORT itab TO itab5 FROM MEMORY ID progname. "Interne Tabelle itab4 aus Cluster progname in itab5 importieren
Außerdem gibt es noch sogenannte Shared Objects. Dabei handelt es sich um Objektinstanzen im Shared Memmory. Über die Transaktion SHMA kann man die Gebiete für die Shared Objects pflegen. In den Gebieten werden die Shared Objects geordnet. Folgende Voraussetzungen müssen bei Shared Objects erfüllt sein:
- Klasse muss Shared-Memory-fähig sein
- Gebiet muss in Transaktion SHMA verfügbar sein
- Gebietswurzelkasse (darüber laufen die Zugriffe) anlegen und dem Gebiet zuordnet
- Shared Objects
- Objektinstanzen im Shared Memory
- geordnet in Gebieten (Pflege über Transaktion SHMA)
- Voraussetzungen
- Klasse muss Shared-Memory-fähig sein
- Gebiet muss in Transaktion SHMA verfügbar sein
- Gebietswurzelkasse (darüber laufen die Zugriffe) anlegen und dem Gebiet zuordnet
- Voraussetzungen
DATA: r_handle TYPE REF TO zcl_3016_area, r_root TYPE REF TO zcl_3016_root, r_catalogue TYPE REF TO zcl_3016_catalogue. r_handle = zcl_3016_area=>attach_for_write( ). CREATE OBJECT r_root AREA HANDLE r_handle. CREATE OBJECT r_catalogue AREA HANDLE r_handle. r_root->catalogue = r_catalogue. r_handle->set_root( r_root ). SELECT * FROM spfli INTO TABLE r_catalogue->connections. " Daten aus der Datenbank lesen r_handle->detach_commit( ).
DATA: r_handle TYPE REF TO zcl_3016_area, ls_spfli TYPE spfli. TRY . r_handle = zcl_3016_area=>attach_for_read( ). LOOP AT r_handle->root->catalogue->connections INTO ls_spfli. WRITE: / ls_spfli-carrid, ls_spfli-connid, ls_spfli-cityfrom, ls_spfli-cityto. ENDLOOP. r_handle->detach( ). CATCH cx_shm_no_active_version. MESSAGE 'Fehler beim Ausführen des Programms' TYPE 'I'. ENDTRY.
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.
Danke, für den sehr hilfreichen Artikel 🙂
Sehr gerne 🙂
nice show, I love erp-up.de !
https://erp-up.de/der-perfekte-einstieg-in-abap/
Das Wichtigste über SAP ABAP sehr gut und verständlich zusammengefasst und mit Bsp. erläutert.
Etwas vom Besten was ich je gesehen habe. Well done !