1
Praktikum Unternehmenssoftware –ABAP-Grundlagen
Praktikum Unternehmenssoftware –ABAP-Grundlagen
Technische Universität München
Lehrstuhl für Wirtschaftsinformatik© Prof. Dr. H. Krcmar
© Prof. Dr. H. Krcmar
Inhalte
• ABAP-Grundlagen:• Grundlegende Konzepte• Hello World• Datenbankzugriffe• Data Dictionary• Modularisierung• DynPros• Betriebswirtschaftliche Konzepte & Sonstiges
• ABAP Objects• Business Server Pages
2
ABAP-Gundlagen: Grundlegende KonzepteABAP-Gundlagen: Grundlegende Konzepte
© Prof. Dr. H. Krcmar
Was ist ABAP ?
• ABAP = Advanced Business Application Programming (früher: Allg. Berichts-Aufarbeitungs Prozessor)
• Wurzeln in COBOL und Pascal• Existiert seit 1982 (abwärtkompatibel viele Relikte)• ABAP-Programme werden bei der ersten Ausführung kompiliert, d.h.
alle Programme liegen auch als Quelltext vor• Plattformunabhängig (schon lange vor Java)• Datenbankunabhängig• Starke Ausrichtung an Wiederverwendbarkeit von Code- und
Datenobjekten• Seit 1998 objektorientierte Erweiterung ABAP-ObjectsTM: Verwendung
von ABAP in Klassen- und Objektstrukturen
3
© Prof. Dr. H. Krcmar
Kompilierung von ABAP-Code
Database-Server
Application-Server
Application-Server
SAPGuiPräsentation
Application
Database
Application-Server
SAPGui SAPGui
Erster Aufruf eines Programms Meldung über Kompilierung Programmausgabe
ABAP Quellcode Kompilierte Programme
Programm wurde noch nicht kompiliert
Kompilierung
Rückgabe des kompilierten Programms
Quelle: Eigene Darstellung
© Prof. Dr. H. Krcmar
Informationsquellen zu ABAP
• SAP-Hilfe• SAP Marketplace• SDN• Transaktion ABAPDOCU• Transaktion SE30 Tips & Tricks• Internet:
• www.abap4.de.vu• http://www.sapgenie.com/abap/• http://cma.zdnet.com/book/abap/index.htm (Teach Yourself ABAP/4 in 21 days)• …
• Bücher:• Umlauff/Dirnhofer: ABAP Übungsbuch, Addison-Wesley 2001• Keller, Krüger: ABAP-Objects, Galileo Press 2002• Keller/Jacobitz: ABAP Objects Referenz, Galileo Press 2004
4
© Prof. Dr. H. Krcmar
Der Entwicklerschlüssel
• Ein Entwicklerschlüssel ermöglicht es einem bestimmten SAP-Benutzer Programme zu entwickeln oder bestehende zu verändern
• Jeder Schlüssel muss bei SAP beantragt und nur einmal pro User angegeben werden
• Der Grund dieser Beantragung liegt in den höheren Lizenzkosten für Entwicklungsuser
• Zudem unterscheidet man Objektschlüssel, die die Bearbeitung bestehender SAP-Entwicklungen ermöglichen
• Der passende Entwicklerschlüssel liegt für das Praktikum auf demShare-Laufwerk
© Prof. Dr. H. Krcmar
ProductionSystem (PROD)
Quality AssuranceSystem (QAS)
DevelopmentSystem (DEV)
Transport in einer typischen SAP-Systemlandschaft
• Änderungen werden in Transportaufträgen gespeichert und werden von DEV nach QAS transportiert
• Transportaufträge werden beim Export als Dateien gespeichert• Beim Import können einzelne oder alle anstehenden
Transportaufträge eingespielt werden
Quelle: Eigene Darstellung
5
© Prof. Dr. H. Krcmar
Hierarchie des Transportwesens
Aufgabe
Transportauftrag
Projekt
Aufgabe Aufgabe
Transportauftrag Transportauftrag
Aufgabe AufgabeAufgabe
Mitarbeiter Mitarbeiter Mitarbeiter Mitarbeiter Mitarbeiter Mitarbeiter
Quelle: Eigene Darstellung
ABAP-Gundlagen: Hello World!ABAP-Gundlagen: Hello World!
6
© Prof. Dr. H. Krcmar
Zugangsdaten
• System: G31• Mandant: 902• User: ABAP-5-XX• Passwort: init Passwort
muss bei der ersternAnmeldung geändert werden (Bitte merken!)
© Prof. Dr. H. Krcmar
Hello World ! 1/3
Einmalige Vorarbeiten (TA SE80):
• Paket anlegen: ZB_05_## (## ist die User-Nummer)
• Neuen Transportauftrag für das Anlegen des Pakets erstellen
• Pakete gliedern das Repository• Transportaufträge dienen der
Organisation und dem Transport von Entwicklungen
ZB_05_##
ZB_05_##
7
© Prof. Dr. H. Krcmar
Hello World 2/3
• Programm ZB_05_XX_HELLOWORLD in angelegtem Paket ohne TOP-Include erstellen (Kontextmenü des Pakets anwählen)
• Entwicklerschlüssel eingeben• Eigenschaften des Programms
angeben
• Programm dem neuen Paket und dem Transportauftrag zuordnen
ZB_05_##_HELLOWORLD
Report ZB_05_##_HELLOWORLD
ZB_05_##_HELLOWORLD
ZB_05_##
© Prof. Dr. H. Krcmar
Hello World 3/3
• Programm schreiben (Punkt nicht vergessen!)
• Programm speichern, prüfen, testen und aktivieren
• Aufgabe: Wie kann das Programm erweitert werden, damit vor dem Text ein Icon erscheint ? (Tip: Hilfe zum Befehl „Write“)
2. 4. 3.
1.
*&---------------------------------------------------------------------**& Report ZB_05_##_HELLOWORLD **& **&---------------------------------------------------------------------**& **& **&---------------------------------------------------------------------*REPORT ZB_05_##_HELLOWORLD .write 'Hello World!'.
ABAP Editor: Report ZB_05_HELLOWORLD ändern
8
© Prof. Dr. H. Krcmar
Arbeitsumgebung: Object Navigator 1/2
• Benutzerfreundliche Oberfläche, die alle Entwicklungswerkzeuge intuitiv verbindet
• Zweiteilung des Object Navigator in Navigationsbaum und Inhaltsteil (Teile entsprechen sich nicht immer!)
• Programmierhilfen:• Informationssystem: bietet gezielte Hilfe zu Befehlen, Konzepten und
Objekten• Breakpoints: gezielte Pause bei Programmausführung• Muster: Assistent zur Generierung komplexer Befehlsstrukturen• Pretty Printer: macht den Code besser lesbar (einstellbar über Hilfsmittel
Einstellungen
© Prof. Dr. H. Krcmar
Arbeitsumgebung: Object Navigator 2/2
• Vorwärtsnavigation: forward ever, backward never• Grundlegendes Prinzip in der SAP-Entwicklung• Durch Doppelklick auf Erwähnung eines Objektes kann zum Objekt
navigiert bzw. es erstellt werden• Einsicht in beliebigen SAP-Code (über System Status):
9
© Prof. Dr. H. Krcmar
Entwicklungswerkzeuge in SAP
Quelle: SAP AG 1999
© Prof. Dr. H. Krcmar
Elemente der ABAP-Programmierung 1/2
• Dynamisches Programme (Dynpro): Bildschirmbild mitAblauflogik
• Selektionsbilder: “Geschenktes” Dynpro ohne Ablauflogik• Report: Ausgabe von Listen• Programm: Interaktives Programm mit Dynpro• Funktionsbaustein: Funktionsbibliothek, die von anderen
Programmen bzw. SAP-Systemen genutzt werden kann• Strukturen: Struktur einer Tabellenzeile• Tabellen: Unterscheidung verschiedener Typen, wobei
transparente Tabellen am häufigsten verwendet werden
10
© Prof. Dr. H. Krcmar
Elemente der ABAP-Programmierung 2/2
• Datenbankview: - Zusammenführung von mehreren Tabellen- Festlegung im Data Dictionary (im Gegensatz zu Inner Joins)- Unterscheidung in Datenbankview (Lesen von Daten),
Pflegeview (Datenpflege mit betriebswirtschaftlichen Zusammenhängen) …
- Lässt sich über Workbench anlegen- Kann wie eine Datenbank angesprochen werden
• Interne Tabellen: temporäre Speicherung von Datenbanktabellen
ABAP-Gundlagen: DatenbankzugriffeABAP-Gundlagen: Datenbankzugriffe
11
© Prof. Dr. H. Krcmar
Applikations-Server Datenbank-Server
DB-InterfaceDB-Interface
OpenSQLTM
• Portierung von ABAP auf alle gängigen Datenbanken
ABAP-Interpreter
Select * from
Exec SQL.Select …
End Exec.
ABAP-Interpreter
Select * from
Exec SQL.Select …
End Exec.
SQL-DatenbankSQL-Datenbank
Daten
Open SQLOpen SQL
Native SQLNative SQL
DB DatenDB Daten DB DatenDB Daten
DB DatenDB Daten
Native SQLNative SQL
Quelle: SAP AG
© Prof. Dr. H. Krcmar
SAP-Reisebüro Beispiel
• Von SAP erstelltes Beispiel, dass eine vereinfachte Einführung in die ABAP-Entwicklung ermöglicht
• Primär sind die bestehenden Datenstrukturen und –tabellen sowie die enthaltenen Daten relevant
• Wichtige Tabellen: • SCARR (Fluggesellschaften)• SPFLI (Flugpläne) Struktur: sbc400_t_spfli• SFLIGHT (Flüge) Struktur: sbc400focc• SBOOK (Flugbuchungen)
• Betrachtung der Tabellenstruktur über das Dictionary (SE11)des Tabelleninhalts über den Data Browser (SE16)
12
© Prof. Dr. H. Krcmar
Programm: Tabellen auslesen
• Geben Sie alle Flüge der Lufthansa aus der Tabelle „SFLIGHT“ aus
• Aufgabe: Erweitern Sie das bestehende Programm um eine Abfrage, ob der Select-Befehl erfolgreich ausgeführt wurde (benutzen Sie dazu die Systemvariable sy-subrcsowie eine IF-Verzweigung)
*&---------------------------------------**& Report ZB_05_##_LUFTHANSA **& **&---------------------------------------**& **& **&---------------------------------------*
REPORT zb_05_##_lufthansa .
DATA: it_spfli TYPE sbc400_t_spfli,wa_spfli TYPE spfli.
SELECT * FROM spfli INTO TABLE it_spfliWHERE carrid = 'LH'.
LOOP AT it_spfli INTO wa_spfli.WRITE: / wa_spfli-carrid,
wa_spfli-connid,wa_spfli-cityfrom,wa_spfli-cityto,wa_spfli-deptime,wa_spfli-arrtime.
ENDLOOP.
© Prof. Dr. H. Krcmar
Interne Tabellen und Arbeitsbereiche
• Workarea (wa_spfli):• Entspricht einer Zeile in einer Tabelle
und wird meistens durch eine Struktur definiert
• Enthält die aktuell bearbeitete Tabellenzeile
• Interne Tabelle (it_spfli):• Kann analog zu einer
Datenbanktabelle aufgebaut sein• Ist eine „lokale Kopie“ einer Tabelle• Besteht nur, so lange das Programm
läuft, das sie erstellt hat
0400LH
0400LH0017AA
Arbeitsbereich wa_spfli
Interne Tabelle it_spfliAPPEND …COLLECT …INSERT …MODIFY …DELETE …
LOOP AT ….ENDLOOP.
READ TABLE …
SORT … BY …REFRESH …Quelle: In Anlehnung an SAP AG
13
© Prof. Dr. H. Krcmar
Datentypen
Vordefiniert(P, I, F, C, N, D, T, X)
Datentyp
benutzerdefiniert
elementar
Feldleistentyp
strukturiert
Tabellentyp
Quelle: In Anlehnung an SAP AG
© Prof. Dr. H. Krcmar
Vordefinierte Datentypen in ABAP
Systemvariablen (sy-…): Tabelle syst
Alphanumerischer TextStringBytefolgeXstring
0Gepackte ZahlpMax. 65536 Ziffern00 … 0Numerischer TextnMax. 65536 Zeichen<Leerzeichen>Zeichenkettec
X’00‘Byte (hexadezimal)x
0.000Gleitpunktzahlf0integeri000000Timet00000000Dated
WertebereichInitialwertBedeutungDatentyp
14
© Prof. Dr. H. Krcmar
Datendeklaration
• Einfache Felddefinition: DATA f (len) TYPE Datentyp
• Strukturiertes Datenobjekt: DATA: BEGIN OF struc, …END OF struc.
• Interne Tabelle: DATA itab TYPE Tabellentyp oderDATA itab TYPE TABLE OF Struktur
• Konstanten: CONSTANTS c VALUE Wert/is INITIAL
• Parameter: PARAMETERS p
• Anstelle von TYPE kann in den meisten Fällen LIKE verwendet werden es muss keine Kenntnis über genauen Datentyp vorliegen
© Prof. Dr. H. Krcmar
Datenmanipulation
• Datenzuweisung: MOVE f TO f oderg = f
• Numerische Operationen: ADD n TO m oderm = m + n
• Wichtige Stringoperationen: CONCATENATE
SPLIT
SEARCH
…
• Es erfolgt eine automatische Typkonvertierung bei Wertzuweisung, wenn möglich
15
© Prof. Dr. H. Krcmar
Programm: Selektionsbildschirm
• Interaktion mit Benutzer vereinfacht über Selektionsbildschirme möglich (z.B. auch bei SE16)
• Selektionsbildschirm ist ein „geschenktes“ Dynpro• Dynpro-nr. des Selektionsbildschirmes ist 1000• Komplexe Selektionsbildschirme realisierbar• Aufgabe: Erweitern Sie das Lufthansa-Programm so, dass
Sie zu Beginn auswählen können, von welcher Fluggesellschaft alle Flüge angezeigt werden sollen (Ändern des angezeigten Variablennamens über Springen Textelemente)
© Prof. Dr. H. Krcmar
Ablauf eines ABAP-Programmes
• Ablaufreihenfolge:• LOAD-OF-PROGRAM (INITIALIZATION)• AT SELECTION-SCREEN• START-OF-SELECTION
• Ereignisse:• AT LINE_SELECTION• TOP-OF-PAGE• END-OF-PAGE
16
© Prof. Dr. H. Krcmar
Verzweigungslisten
• Im Ereignis „AT LINE-SELECTION“ kann hinterlegt werden, welche Reaktion bei Doppelklick auf einen Listeneintrag erfolgt
• Durch jeden Doppelklick, gelangt man eine Verzweigungsebene tiefer (bis 10 Ebenen)
• Bei jedem Doppelklick (auch auf weiterführenden Listen) wird dieser Block ausgeführt Begrenzung notwendig (sy-lsind)
• Schnittstelle zwischen den Listenebenen ist der HIDE-Bereich (später auch für Dynpro‘s wichtig)
© Prof. Dr. H. Krcmar
Programm: Verzweigungslisten
• Aufgabe: Ändern Sie das letzte Programm so ab, dass nach der Auswahl der Fluggesellschaft nur Fluggesellschaft und Flugnummer angezeigt werden. Durch einen Doppelklick gelangt man zur Detailanzeige des Eintrags, bei der die restlichen Daten zum Flug angezeigt werden.
• Begrenzen Sie dabei die Anzahl der Verzeigungsebenen auf eine einzige
• Zusatzaufgabe: Erweitern Sie das Programm um eine weitere Verzweigungsebene
17
© Prof. Dr. H. Krcmar
Programm: Verzweigungsliste - Lösung*&---------------------------------------------------------------------**& Report ZB_05_##_LUFTHANSA_VERZWEIG**&---------------------------------------------------------------------*
REPORT zb_05_##_lufthansa_verzweig.
PARAMETERS: flugges TYPE spfli-carrid.
DATA: it_spfli TYPE sbc400_t_spfli,wa_spfli TYPE spfli.
START-OF-SELECTION.SELECT * FROM spfli INTO TABLE it_spfliWHERE carrid = flugges.
IF sy-subrc = 0.LOOP AT it_spfli INTO wa_spfli.
WRITE: / wa_spfli-carrid, wa_spfli-connid.
HIDE: wa_spfli-carrid, wa_spfli-connid, wa_spfli-cityfrom,wa_spfli-cityto, wa_spfli-deptime, wa_spfli-arrtime.
ENDLOOP.ENDIF.
AT LINE-SELECTION.IF sy-lsind = 1.
WRITE: / wa_spfli-carrid, wa_spfli-connid, wa_spfli-carrid,wa_spfli-connid, wa_spfli-cityfrom, wa_spfli-cityto,wa_spfli-deptime, wa_spfli-arrtime.
ENDIF.
ABAP-Gundlagen: Data DictionaryABAP-Gundlagen: Data Dictionary
18
© Prof. Dr. H. Krcmar
Rolle des Data Dictionary
• „Vererbungsmodell“ für Daten• Automatische Zuweisung von Hilfe und Bezeichnungen zu
Datentypen• Abbildung eines ERM als Relationen direkt möglich (mit
Tools wie z.B. ARIS)• Unterscheidung von Feldern, Strukturen, Tabellen,
Datenelementen und Domänen
© Prof. Dr. H. Krcmar
KPLZ MPLZ
PLZPLZ
Aufbau des Data Dictionary
Vererbung Domäne
Feld
Datenelement
Feld Struktur
FeldFeld
Tabelle
NUM4
Quelle: In Anlehnung an SAP AG
19
© Prof. Dr. H. Krcmar
Anlegen einer Suchhilfe
• Legen Sie die Domäne ZB5##CHAR30 vom Datentyp CHAR der Länge 30 an (prüfen + aktivieren nicht vergessen!)
• Legen Sie das Datenelement ZB5##ANR30 von der eben erstellten Domäne an (prüfen + aktivieren nicht vergessen!)
• Legen Sie die Tabelle ZB5##ANREDE in Transaktion SE11 an, bei der die Auslieferungsklasse C ist
• Erlauben Sie die uneingeschränkte Pflege• Legen Sie das Feld „Anrede“ mit dem Datenelement ZB5##ANR30
als Primärschlüssel an• Pflegen Sie die technischen Einstellungen (prüfen + aktivieren nicht
vergessen!)• Pflegen Sie über SE16 Werte in die Tabelle ein
© Prof. Dr. H. Krcmar
Anlegen einer Tabelle
• Legen Sie mit der Transaktion SE11 (Data Dictionary) eine neue Tabelle ZB5##PERSON an, die Daten von Personen aufnehmen soll (z.B. Name, Vorname, Anrede …)
• Nehmen sie für Name und Vorname zur Vereinfachung eingebaute Datentypen zur Deklaration und markieren Sie diese Felder als Schlüssel
• Das Feld Anrede muss von Datenelement ZB5##ANR30 sein• Erlauben Sie die Anzeige und Pflege der Tabelle• Pflegen Sie vor der Aktivierung die technischen Einstellungen der
Tabelle
20
© Prof. Dr. H. Krcmar
Angeben der Suchhilfe
• Geben Sie in der Tabelle ZA5##PERSON im Reiter Eingabehilfe für das Feld Anrede als Fremdschlüssel das entsprechende Feld der Tabelle ZB5##ANREDE an und übernehmen Sie die automatischen Vorschlagswerte
• Aufgabe: Testen Sie die Suchhilfe, indem Sie ein Programm erstellen, bei dem Sie über eine Parametereingabe die F4-Hilfe der Anrede einbinden
ZB##ANREDE
ZB##ANREDE
ABAP-Gundlagen: ModularisierungABAP-Gundlagen: Modularisierung
21
© Prof. Dr. H. Krcmar
Modularisierung
Möglichkeiten der Modularisierung in ABAP:1. Include-Dateien (Befehl INCLUDE)
- TOP-Include: enthält globale Datendefinitionen- Include: enthält Programmteile
2. Form‘s (Prozeduren)3. Funktionsbausteine
© Prof. Dr. H. Krcmar
Include-Dateien
• Ausgliederung von Quellcode aus Programm• Include-Dateien werden vor Ausführung in Hauptprogramm
eingefügt• Einbinden eine Include-Datei über Befehl „INCLUDE“
22
© Prof. Dr. H. Krcmar
Forms (Prozeduren) in ABAP
• Forms können auf übergeordnete Variablen zugreifen• Deklaration:
FORM <Prozedurname>USING value(<Eingabeparameter>) TYPE <Typ> Eingabeparameter by valueCHANGING <Eingabe-/Ausgabeparameter> Eingabe-/Ausgabeparameter by referenceCHANGING value(<Eingabe-/Ausgabeparameter>). Eingabe-/Ausgabeparameter by value and
resultENDFORM.
• Aufruf:PERFORM <Prozedurname>
USING <Eingabeparameter> Eingabeparameter by valueCHANGING <Eingabe-/Ausgabeparameter>. Eingabe-/Ausgabeparameter by reference
bzw. by value and result (je nach Deklaration)
• Aufgabe: Gliedern sie die Anzeige der Flugübersicht des letzten Programms in eine Prozedur aus und übergeben Sie die Fluggesellschaft als Parameter
© Prof. Dr. H. Krcmar
Programm: Funktionsbausteine
• Kapselung von Quellcode zu Funktionsbausteinen• Organisation von Funktionsbausteinen in Funktionsgruppen• Funktionsbausteine können nicht auf übergeordnete Variablen
zugreifen vollständige Parameterübergabe über Schnittstelle• Aufgabe: Fassen Sie den Prozess der Listen- und Detailanzeige in
einen Funktionsbaustein zusammen. Die Auswahl der Fluggesellschaft soll nach wie vor im Programm erfolgen.
• Legen Sie zunächst eineFunktionsgruppe an
ZB_05_##
23
© Prof. Dr. H. Krcmar
Programm: Funktionsbaustein - Lösung
Das Programm:Das Programm: Der Funktionsbaustein:
Der Importparameter FGES wird im Reiter „Import“ angegeben
*&---------------------------------------**& Report ZB_05_##_LUFTHANSA_FUNKTION **& **&---------------------------------------*REPORT zb_05_##_lufthansa_funktion.
PARAMETERS: flugges TYPE spfli-carrid.
START-OF-SELECTION.CALL FUNCTION 'ZB_05_##_LISTE'
EXPORTINGfges = flugges.
FUNCTION ZB_05_##_LISTE .*"------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" REFERENCE(FGES)*"------------------------------
DATA: it_spfli TYPE sbc400_t_spfli,wa_spfli TYPE spfli.
SELECT * FROM spfli INTO TABLE it_spfliWHERE carrid = fges.
IF sy-subrc = 0.LOOP AT it_spfli INTO wa_spfli.
WRITE: / wa_spfli-carrid, wa_spfli-connid,wa_spfli-carrid, wa_spfli-connid,wa_spfli-cityfrom, wa_spfli-cityto,wa_spfli-deptime, wa_spfli-arrtime.
ENDLOOP.ENDIF.
ENDFUNCTION.
© Prof. Dr. H. Krcmar
Arten von Funktionsbausteinen
Funktionsbausteine
Remotefähige Funktionsbausteine
BAPI
Quelle: Eigene Darstellung
24
© Prof. Dr. H. Krcmar
Besondere Funktionsbausteine: BAPI‘s
• BAPI‘s sind nach betriebswirtschaftlicher Sichtweise gekapselte Funktionsbausteine
• Entwickler müssen sich keine Gedanken um die Veränderung der entsprechenden Tabellen
• BAPI‘s sind RFC-fähigeFunktionsbausteine, die von außerhalb SAP‘s aus aufgerufen werden können
• Übersicht aller verfügbarer BAPI‘sunter der Transaktion BAPI
© Prof. Dr. H. Krcmar
Umgang mit BAPI‘s
• Grundsätzliches Vorgehen beim Verwenden von BAPI‘s:1. Nach Möglichkeit zunächst mit der Transaktion vertraut machen, deren Funktion ein
BAPI widerspiegelt2. Suchen des BAPI‘s und lesen der Dokumentation (evtl. auch Anschauen des
Quellcodes des BAPI‘s)3. Testen des BAPI‘s im Function Builder oder über die Transaktion BAPI4. Verwendung des BAPI‘s in einem eigenen Programm
• Mögliche Probleme:• Im Testmodus werden auch leere Felder teilweise belegt• Bei Einbindung in ein eigenes Programm immer auf die Datentypen und Mussfelder
achten
• Aufgabe: Testen Sie in der TA BAPI das BAPI BAPI_PROJECTDEF_GETLIST (Projektsystem ProjectDefinition GetList)
25
© Prof. Dr. H. Krcmar
Der Debugger
• Ermöglicht schrittweises Ausführen einer Anwendung• Überprüfung von Variablen und Strukturen zur Laufzeit• Im Gegensatz zu normalem Ablauf sind nicht nur
Breakpoints, sondern auch Watchpoint möglich• Watchpoint: Programmablauf wird nur bei bestimmtem
Wert einer Variable unterbrochen• Aktivierung bei Programmstart oder während des Ablaufs
durch „/h“ (wirkt erst bei nächstem Bildschirmwechsel)• Starten eines Programms mit Debugger über Menü:
Programm Testen Debugging
© Prof. Dr. H. Krcmar
Messages
• Nachrichtenklassen enthalten vorgefertigte Messages• Es werden folgende Messagetypen unterschieden:
• A – Abbruch im modalen Fenster• I - Information im modalen Fenster• E – Error in der Statusleiste• S – Meldung in der Statusleiste• W – Warnung in der Statusleiste (muss mit Enter bestätigt werden)• X – harter Abbruch, verursacht Kurzdump
• Aufruf: MESSAGE <Typ><Nummer> WITH <Parameter 1> <Parameter 2> <Parameter 3> <Parameter 4>
26
© Prof. Dr. H. Krcmar
Programm: Messages
• Zusatzaufgabe: Erstellen Sie eine Nachrichtenklasse ZB_05_XX und legen Sie mindestens eine Nachricht ein, die Sie sinnvoll in das Programm zur Verzweigungsliste einbinden
• Hinweis: Sie müssen im Befehl „Report“ angeben, welche Nachrichtenklasse Sie verwenden möchten
ABAP-Gundlagen: DynProsABAP-Gundlagen: DynPros
27
© Prof. Dr. H. Krcmar
Eigenschaften von DynPros
• Werden pro Programm mit vierstelliger Nummer gespeichert (Selektionsbild hat Nr. 1000)
• Programme mit Dynpros können nur über Transaktionen aufgerufen werden
• Programme, die Dypros verwenden sind Modulpools• Module beinhalten Dynpro-ABAP• Unterscheidung in Input und Output-Module pro Dynpro
© Prof. Dr. H. Krcmar
Ablauf eines DynPros
Process beforeOutput (PBO) 100
Fluggesellschaft = ‚LH‘
Process afterInput (PAI) 100
Select * from spfliWhere carrid=
fluggesellschaft and …
Quelle: Eigene Darstellung
28
© Prof. Dr. H. Krcmar
Ablauf mehrerer DynPros
PBO 100 PAI 100
DynPro 100
PBO 200 PAI 200
DynPro 200
TOP IncludeHIDE-Bereich
COMMIT
Quelle: Eigene Darstellung
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 1/5
• Legen Sie das Programm (Modulpool) ZB_05_##_LH_Dynpro mit TOP-Include an (ZB_05_##_LH_DYNPRO_TOP).
• Definieren Sie im TOP-Include eine Workarea entsprechend der Tabelle spfli an, sowie die Variablen ok_codeund save_ok vom Typ sy-ucomm; Deklarieren Sie die Tabelle SPFLI mit Tables
*&---------------------------------------------**& Include ZB_05_##_LH_DYNPRO_TOP Modulpool **& **&---------------------------------------------*
PROGRAM ZB_05_##_LH_DYNPRO .
tables spfli.
data: ok_code like sy-ucomm,save_ok like ok_code.
data: wa_spfli like spfli.
Programm ZB_05_##_LH_DYNPRO
29
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 2/5
• Legen Sie zu diesem Programm das Dynpro 100 über das Kontaxtmenü an (Folgedynpro: 200)
• Über den Button „Layout“ gelangen Sie zum graphischen Screen Painter
Dynpro 100 zum Programm ZB_05_##_LH_DYNPRO
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 3/5
• Die farbigen Buttons öffnen weitere Auswahlfenster
• Übernehmen Sie aus dem Dictionary die Felder Carridund Connid der Tabelle spfli in das Dynpro (Felder markieren, übernehmen und fallen lassen)
• Erstellen Sie einen Knopf zum Weiterverarbeiten der gewählten Daten und pflegen sie den OK_CODE (sowohl für Dynpro und Button)
30
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 4/5
• Speichern, prüfen und aktivieren Sie Dynpro und verlassen Sie den Screen Painter
• Erstellen Sie per Vorwärtsnavigation im Reiter Ablauflogik das Modul „MODULE STATUS_0100“ und darin einen Status sowie einen Titel für das Dynpro 100 (vorgeschlagene Namen korrigieren!, Includeswerden autom. erstellt)
ZB_05_##
Screen Painter: Dynpro zu ZB_05_##_LH_DYNPRO ändern
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 5/5
• Kommentieren Sie im Dynpro alle Module ein und legen Sie sie per Vorwärtsnavigation an
• Legen Sie per Vorwärtsnavigation das Modul „MODULE USER_COMMAND_0100“ an und verarbeiten Sie den eingehenden ok_code des Dynpros
• Es soll gemäß den ausgesuchten Parametern ein Eintrag aus der Tabelle „spfli“ in die zuvor definierte Workarea geladen werden
• Legen Sie die Transaktion ZA_05_##_lh_dyn über das Kontextmenü an, um das zugehörige Programm starten zu können
*&--------------------------------------------**& Include ZB_05_##_LH_DYNPRO_I01 **&--------------------------------------------**& Module USER_COMMAND_0100 INPUT **&--------------------------------------------*MODULE user_command_0100 INPUT.
save_ok = ok_code.CLEAR ok_code.
CASE save_ok.WHEN 'BACK'.
LEAVE PROGRAM.WHEN 'ENTER'.
set screen 100.WHEN 'SELECT'.
SELECT * FROM spfli into wa_spfliWHERE carrid = spfli-carrid AND connid = spfli-connid.ENDSELECT.LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
31
© Prof. Dr. H. Krcmar
Übung: Dynpro 100 Zusatz
• Wie kann das Feld carrid im Dynpro vorbelegt werden ?• Wie kann die Eingabe der ENTER-Taste angefangen
werden ?• Wo kann man für die Buttons ein Ikon angeben ?• Wie kann erreicht werden, dass für das Feld Flugnummer
auch eine F4-Hilfe erscheint ? (Tip: Transaktion ABAPDOCU)
© Prof. Dr. H. Krcmar
Übung: Dynpro 200
• Erstellen Sie im gleichen Programm das Dynpro 200• Es soll alle Daten des gewählten Fluges anzeigen• Die angezeigten Daten sollen veränderbar sein• Legen Sie dazu einen Button an, der das Speichern
ermöglichen soll• Benutzen sie zum Speichern den ABAP-Befehl „MODIFY“
bzw. „UPDATE“ (weitere Doku in der Hilfe)• Zusatz: Zeigen Sie durch Meldungen in der Statuszeile an,
ob das Speichern erfolgreich war oder nicht
32
ABAP-Gundlagen: Betriebswirtschaftliche Konzepte & Sonstiges
ABAP-Gundlagen: Betriebswirtschaftliche Konzepte & Sonstiges
© Prof. Dr. H. Krcmar
Das Sperrkonzept
• Was passiert, wenn mehrere User den gleichen Datensatz gleichzeitig bearbeiten ?
Dateninkonsistenz• Sperrkonzepte verhindern den gleichzeitigen
(verändernden) Datenzugriff• Neben dem Sperrkonzept der Datenbank hat SAP ein
eigenes Sperrkonzept
33
© Prof. Dr. H. Krcmar
Sperrmodi
1. Lesesperre (shared lock)• Setzt Sperre auf zu lesendes Datenobjekt• Es können mehrere Lesesperren gleichzeitig auf ein Datenobjekt bestehen• Verhindert das setzen einer Schreibsperre auf ein Datenobjekt
2. Schreibsperre (exclusive lock)• Setzt Sperre auf zu veränderndes Datenobjekt• Erlaubt keine weiteren Sperren (auch keine Lesesperre)
Deadlock:• Kann eine Sperre nicht gesetzt werden, wird gewartet, bis die Sperre gesetzt
werden kann• 2 Programme warten gegenseitig darauf, dass das andere Programm die
Sperre aufhebt
© Prof. Dr. H. Krcmar
Anlegen eines Sperrobjektes
• Anlegen erfolgt im DataDictionary (SE11)
• Pro Tabelle kann es nur ein Sperrobjekt geben
• Sperrparameter werden automatisch aus dem Primärschlüssel der Tabelle generiert
34
© Prof. Dr. H. Krcmar
Verwendung von Sperrobjekten
• Beim Anlegen eines Sperrobjektes werden automatisch die Funktionsbausteine Enqueue_<Sperrobjekt> und Dequeue_<Sperrobjekt> angelegt
• Vor dem Lesen/Schreiben wird mit Enqueue eine Sperre angefordert• Nach der Lese-/Schreibaktion bzw. bei Fehlern wird die Sperre mit
Dequeue wieder freigegeben• Einbinden der Funktionsaufrufe erfolgt am einfachsten über „Muster“• Sperren können mit der Transaktion SM12 manuell aufgehoben
werden
© Prof. Dr. H. Krcmar
Übung: Sperrobjekte
• Fordern Sie in Ihrem Programm eine Lesesperre an für den in Dynpro 100 gewählten Datensatz
• Wenn der Datensatz im Dynpro 200 geändert wurde und gespeichert werden soll, fordern Sie eine Schreibsperre für den entsprechenden Datensatz an
• Vergessen Sie nicht, die Sperren wieder freizugeben !
35
© Prof. Dr. H. Krcmar
Logical Unit of Work (LUW)
PBO 100 PAI 100
DynPro 100
PBO 200 PAI 200
DynPro 200
Netzausfall
Verbuchung Soll-Seite
Verbuchung Haben-Seite
Was passiert, wenn während der Verbuchung einer betriebwirtschaftlich
zusammenhängen Buchung über mehrere Dynpros das
Netz ausfällt ?
© Prof. Dr. H. Krcmar
LUW
• Problem: • Bei jedem neuen Dynpro werden geändert DB-Tabellen in die DB geschrieben
(COMMIT)• Wenn zusammenhängende Daten über mehrere DynPros ermittelt werden,
kann erst am Ende ausgesagt werden, ob die Daten gebucht werden sollen oder nicht
• Lösung:• Änderungen an DB-Tabellen werden in Verbuchungsbausteinen vorgemerkt • Erst, wenn alle Daten korrekt gesammelt wurden, werden die Änderungen in
die DB-Tabellen geschrieben (Commit Work) oder verworfen (Rollback)Daten können in einer LUW über mehrere DynPros hinweg gesammelt werden
36
© Prof. Dr. H. Krcmar
Anlegen/Aufrufen eines Verbuchungsbausteines
• Anlegen:• Analog zu normalem Funktionsbaustein, nur dass als Ablaufart
„Verbuchungsbaustein“ gewählt wird• Ausführungsarten:
- Start sofort: synchron- Sofort, nicht nachverbuchbar: bei Problemen wird Nachverbuchung nicht
vorgenommen- Start verzögert: asynchron
• Inhalt: Änderung der DB-Tabelle• Aufrufen:
• Synchron:CALL FUNCTION <Verbuchungsbaustein> … COMMIT WORK.• Asynchron: CALL FUNCTION <Verbuchungsbaustein> IN UPDATE TASK.
© Prof. Dr. H. Krcmar
Berechtigungsprüfung
• Vor jedem DB-Zugriff sollten die Rechte des Benutzers geprüft werden
• Überprüfung, ob der Benutzer das Berechtigungsobjekt „S_CARRID“ besitzt und für die Fluggesellschaft „LH“ die Aktivität „02“ (=ändern) durchführen darf
AUTHORITY-CHECK OBJECT ‘S_CARRID‘ID ‘ CARRID‘ FIELD ‘LH‘ID ‘ACTVT‘ FIELD ’02‘.
IF sy-subrc NE 0.…ENDIF.
ACTVT
CARRIDAA AZ DL LH UA
03
02
01
x x x x x
x
37
© Prof. Dr. H. Krcmar
Sonstiges
• Einplanung von APAB-Programmen für Hintergrundverarbeitung:• Einplanung in TA SM36 mit Zeitintervall, Event oder Vorgänger-
Job• Bei Aufruf von Programmen mit Eingabefeldern müssen vorher
Varianten gespeichert und angewendet werden
• Aufruf von Transaktionen innerhalb ABAP mit : CALL TRANSACTION <ta>
ABAP-ObjectsABAP-Objects
38
© Prof. Dr. H. Krcmar
Einstieg ABAP-Object
• Objektorientierter „Aufsatz“ auf ABAP• Stufenweise Konvertierung des ABAP-Quellcodes in
ABAP-Objects• Wichtige Werkzeuge:
• ABAP Workbench (nach wie vor)• Class Builder
© Prof. Dr. H. Krcmar
Prinzipien der Objektorientierung 1
• Klassen sind die Definition eines Objektes und enthalten Attribute und Methoden eines Objektes
• Instanzen sind die konkrete Ausprägung einer Klasse• Beispiel:
- Klasse: Auto- Instanz: Mein Auto mit dem Kennzeichen xxx
39
© Prof. Dr. H. Krcmar
Prinzipien der Objektorientierung 2
• Kapselung: innerer Ablauf einer Klasse ist egal, es zählen nur Schnittstellen
• Polymorphie: gleichnamige Funktionen bei verschiedenen Klassen führen zu analogem Verhalten
• Vererbung: eine neue Klasse die Eigenschaften einer bestehenden Klasse erben und um eigene Eigenschaften erweitern
© Prof. Dr. H. Krcmar
Beispiel für Objektorientierung
Klasse Fahrzeug
Klasse PKW Klasse LKW
Attribute: Hersteller
Anzahl Räder
Methoden: Erstellen
Attr. anzeigen
Vererbung Vererbung
Attribute: Hersteller
Anzahl Räder
Anzahl Sitze
Methoden: Erstellen
Attr. anzeigen
Belegte Sitze
Attribute: Hersteller
Anzahl Räder
Zuladung
Methoden: Erstellen
Attr. anzeigen
LadekapazitätQuelle: Eigene Darstellung
40
© Prof. Dr. H. Krcmar
Klassifikation von Methoden und Attributen
• Privat öffentlich:• Private Methoden/Attribute können nur aus der Klasse selbst
aufgerufen/abgefragt werden (z.B. Methode „Bremsen“: soll nicht jeder machen können)
• Öffentliche Methoden/Attribute können immer aufgerufen/abgefragt werden (z.B. was für eine Farbe hat das Auto ?)
• Instanz statisch• Instanz-Methoden/Attribute existieren in jeder Instanz (z.B. Methode „Farbe
abfragen“, da jede Instanz eine andere Farbe haben kann)• Statische Methoden/Attribute existieren in nur einmal für alle Instanzen (z.B.
Auflistung aller Instanzen einer Klasse)
© Prof. Dr. H. Krcmar
Deklaration einer Klasse
• Klassen können in der ABAP-Workbench oder im ClassBuilder (beides am besten in Include-Dateien)
• Unterteilung in Definition und Implementierung einer Klasse• Definition enthält „Kopfdaten“ der Klasse• Implementierung enthält Code der entsprechenden
Methoden
41
© Prof. Dr. H. Krcmar
Definition einer Klasse
CLASS <Klassenname> DEFINITION.PUBLIC SECTION.
METHODS: <Methode1> IMPORTING <Importparameter1> TYPE <Datentyp><Importparameter2> TYPE <Datentyp>,
<Methode2>.CLASS-METHODS: <Methode2>.DATA: <Variable1> TYPE <Datentyp>CLASS-DATA: <Variable2> TYPE <Datentyp>
PRIVATE SECTION.METHODS: …CLASS-METHODS: …DATA: …CLASS-DATA: …
ENDCLASS.
© Prof. Dr. H. Krcmar
Implementierung einer Klasse
CLASS <Klassenname> IMPLEMENTATION.…METHOD <Methodenname>.
…ABAP-Code…ENDMETHOD.…
ENDCLASS.
42
© Prof. Dr. H. Krcmar
Aufruf von Methoden / Attributabfrage
• Instanzmethode: [CALL METHOD] <Instanzname>-><Methode>(_<Importparameter> = Wert_).
• Klassenmethode:[CALL METHOD] <Klassename>=><Methode>(_<Importparameter> = Wert_).
• Instanzattribute:<Instanzname>-><Attribut>.
• Statische Attribute:<Klassenname>=><Attribut>.
© Prof. Dr. H. Krcmar
Übung: Klasse anlegen
• Erstellen Sie die Klasse lcl_airplane, die ein Flugzeug abbilden soll, in einer Include-Datei eines neuen Programms namens ZB_05_##_AIRPLANE
• Die Klasse soll die Attribute Name und Flugzeugtyp haben• Erstellen Sie eine öffentliche Methode, um diese Attribute
zu setzen und eine Weitere, um sie anzuzeigen
43
© Prof. Dr. H. Krcmar
Lösung: Klasse anlegen 1/2
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.METHODS: attribute_setzen IMPORTING
im_name TYPE stringim_planetype TYPE string,
attribute_anzeigen.
PRIVATE SECTION.DATA: name TYPE string,
planetype TYPE string.
ENDCLASS. "lcl_airplane DEFINITION
© Prof. Dr. H. Krcmar
Lösung: Klasse anlegen 2/2
CLASS lcl_airplane IMPLEMENTATION.
METHOD attribute_setzen.name = im_name.planetype = im_planetype.
ENDMETHOD. "attribute_setzen
METHOD attribute_anzeigen.WRITE: / icon_ws_plane AS ICON,
/ 'Name des Flugzeugs: ', name,/ 'Typ des Flugzeugs: ', planetype.
ENDMETHOD. "attribute_anzeigen
ENDCLASS. "lcl_airplane IMPLEMENTATION
44
© Prof. Dr. H. Krcmar
Übung: Erstellen von Instanzen
• Legen Sie mehrere Instanz der Klasse lcl_airplane an und weisen Sie ihren Attributen Werte zu
• Speichern Sie Verweise auf alle Instanzen in einer Tabelle
© Prof. Dr. H. Krcmar
Lösung: Erstellen von Instanzen
REPORT zb_05_##_airplane .
TYPE-POOLS icon.INCLUDE zb_05_##_class.
DATA: r_plane TYPE REF TO lcl_airplane,plane_list TYPE TABLE OF REF TO lcl_airplane.
START-OF-SELECTION.
CREATE OBJECT r_plane.APPEND r_plane TO plane_list.r_plane->attribute_setzen( im_name = 'München'
im_planetype = 'Boeing 737' ).…LOOP AT plane_list INTO r_plane.r_plane->attribute_anzeigen( ).
ENDLOOP.
45
© Prof. Dr. H. Krcmar
Der Konstruktor
• Explizit oder implizit definierte Methode „constuctor“, die neue Instanzen erzeugt
• Wird autom. durch „CREATE OBJECT“ aufgerufen• Bei fehlender Implementierung, wird einfach nur eine
Instanz erzeugt• Bei expliziter Implementierung in der PUBLIC SECTION
können bestimmte Schritte bei der Erstellung einer neuen Instanz ausgeführt werden (z.B. Defaultwerte vergeben …)
© Prof. Dr. H. Krcmar
Beispiel Konstruktor
PUBLIC SECTIONMETHODS: constructor IMPORTING
im_name type stringim_name type string.
CREATE OBJECT r_plane exporting im_name = ‚München‘im_planetype=‚747‘.
• Preisfrage: Wie sieht die Implementierung aus ?
46
Business Server PagesBusiness Server Pages
© Prof. Dr. H. Krcmar
Einstieg Business Server Pages (BSP)
• Web-Erweiterung für ABAP• Ermöglicht u. a. die Einbindung von ABAP und
serverseitigem JavScript in HTML-Seiten, die auf dem SAP-System gehostet/erstellt sind
• Kann zur Realisierung umfangreicher Portallösungen verwendet werden
• Erst ab SAP Web Application Server 6.20 möglich
47
© Prof. Dr. H. Krcmar
• Legen Sie BSP-Applikation ZB_05_##_BSP in der ABAP-Workbench an und erstellen Sie darin eine neue Seite
• Auf dieser Seite sollen die Daten der Tabellen SPFLI angezeigt werden• Schalten Sie den neu erstellten Service in der Pflege der Services: Transaktion
SICF frei (Pfad: /sap/bc/bsp/sap/zb_05_##_bsp)
• Frage: Über welche URL kann Ihr neuer Service erreicht werden ?
Übung: Business Server Page anlegen
ZB_05_##_BSP
© Prof. Dr. H. Krcmar
Lösung: Business Server Pages anlegen<%@page language="abap" %><html>
<head><title>Meine erste BSP-Seite</title>
</head><% DATA: it_spfli TYPE TABLE OF spfli,
wa_spfli type spfli.SELECT * FROM spfli INTO TABLE it_spfli.%>
<body><center><h2> Ausgabe aller Daten aus Tabelle SPFLI
</h2><br><br><table border="1">
<tr><td>Fluggesellschaft</td><td>Verbindung</td><td>Startflughafen</td><td>Zielflughafen</td><td>Abflugszeit</td><td>Ankunftszeit</td>
</tr>
<% loop at it_spfli into wa_spfli. %><tr>
<td><%= wa_spfli-carrid %></td><td><%= wa_spfli-connid %></td><td><%= wa_spfli-airpfrom %></td><td><%= wa_spfli-airpto %></td><td><%= wa_spfli-deptime %></td><td><%= wa_spfli-arrtime %></td>
</tr><% endloop. %></table>
</body></html>
48
© Prof. Dr. H. Krcmar
Übung: BSP – Eingabe verarbeiten
• Legen Sie eine weitere BSP mit einem Formular an, Wert für die Fluggesellschaft und die Verbindung aufnehmen und bei Knopfdruck an die bereits erstellte Seite senden soll
• Verändern Sie die Seite aus der letzten Übung so, dass nur noch die Informationen zur gewählten Verbindung angezeigt werden
• Zusatzaufgabe: Erweitern sie das Formular sinnvoll um weitere Buttons
© Prof. Dr. H. Krcmar
Lösung: BSP – Eingabe verarbeiten 1/3
• Formular:<%@page language="abap" %><html><head><title>Eingaben bearbeiten</title>
</head><body><form name="Formular">
Fluggesellschaft <INPUT type="text" name="param_carrid"><br>Verbindung <INPUT type="text" name="param_connid"><br><br><input type="submit" name="onInputProcessing(event_1)" value="Alle Flugdaten">
</form></body>
</html>
49
© Prof. Dr. H. Krcmar
Lösung: BSP – Eingabe verarbeiten 2/3
• Eventhandler OnInputprocessingDATA: lv_help TYPE string.
CASE event_id.WHEN 'event_1'.
navigation->set_parameter( 'param_carrid' ).navigation->set_parameter( 'param_connid' ).navigation->goto_page( 'index.htm' ).
ENDCASE.
© Prof. Dr. H. Krcmar
• Anlegen der Seitenattribute auf der Zielseite
• Aktivieren der beiden Seiten! und evtl. des Services
Lösung: BSP – Eingabe verarbeiten 3/3
Web Application Builder: Seite zu ZB_05_##_BSP ändern
ZB_05_##
50
© Prof. Dr. H. Krcmar
Aufruf der BSP‘s
• http:/hcc1b11.informatik.tu-muenchen.de:8001/sap/bc/bsp/sap/<Programmname>\<Seitenname>.htm
oder:
• http:/hcc3b11.informatik.tu-muenchen.de:8002/sap/bc/bsp/sap/<Programmname>\<Seitenname>.htm
© Prof. Dr. H. Krcmar
Hausaufgabe
• Erstellen Sie eine Tabelle ZB_05_##_MA, in der Daten zu Mitarbeitern erfasst werden können
• Entwickeln Sie in einem gleichnamigen ABAP-Programm dazu eine grafische Oberfläche, mit der die Daten erstellt, bearbeitet und gelöscht werden können
• Die Oberfläche kann in Form eines Dynpros oder von BSP‘s erstellt werden• Berücksichtigen Sie dabei das Sperrkonzept von SAP indem Sie ein Sperrobjekt für
Ihre Tabelle anlegen und dies in Ihrem Programm verwenden
• Abgabe der Hausaufgabe durch Zusendung des Programmnamens und der Transaktion oder der URL per Email bis zum 2.11.2005 12:00 Uhr