10.3. ABAP-Programmierung mit Open

Werbung
10.3. ABAP-Programmierung mit Open- und Native SQL
G
G
G
ABAP – Übersicht
Datenbankzugriff aus ABAP-Programmen
•
•
Open SQL
Native SQL
Vorbereitung der praktischen Übung mit SAP R/3 (Teil II)
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 1
ABAP/4 - Die Programmiersprache von SAP
G
Ursprung im R/2-System:
Allgemeiner Berichts-Aufbereitungs-Prozessor
•
G
Für Reporting-Zwecke
Ständige Erweiterung der Sprache im R/3-System
Advanced Business Application Programming Language
•
•
•
•
Alle betriebswirtschaftlichen Anwendungen in ABAP implementiert
Nur kleiner Systemkern in C
/4 symbolisiert, dass es sich um eine 4GL-Sprache handelt
Neuerdings: nur noch ABAP, um Entwicklung in Richtung
Objektorientierung zu betonen
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 2
Charakteristik von ABAP
G
Abarbeitung von ABAP-Programmen:
•
•
•
•
G
G
ABAP-Sourcen werden kompiliert in Bytecode (“Generieren”)
Bytecode wird interpretiert
Programmsourcen und Bytecode werden in der Datenbank verwaltet
– Dies beinhaltet auch Abhängigkeiten zu anderen Schemaobjekten
Bei Bedarf erfolgt Neugenerierung vor Interpretation des Bytecodes
– Wenn z.B. bei Überprüfung der Abhängigkeiten festgestellt wird,
dass ein benötigtes Objekt in einer neueren Version vorliegt
Release 4.5x: über 250 Schlüsselwörter, Tendenz steigend!
Sehr schwach ausgeprägte Orthogonalität
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 3
Tools des R/3 Repository
G
G
G
G
G
G
Data Modeler
•
Datenmodellierung
Data Dictionary
•
Metadatenverwaltung
Data Browser
•
Zugriff auf Datenbanktabellen (nur Anwendungsdaten)
Object Navigator
•
Zugriff auf sämtliche Programmobjekte
Entwicklungswerkzeuge
•
•
ABAP-Editor
Screen Painter, ...
Business Workflow
•
•
Definitionswerkzeuge
Laufzeitwerkzeuge
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 4
Entwicklungsumgebung
G
ABAP-Editor
•
•
•
•
Ist selbst ein ABAP-Programm, die Oberfläche des
Editors ist also ein Dynpro
Etwas gewöhnungsbedürftige Oberfläche
Sehr gute Integration in die komplette Entwicklungsumgebung
(SAP Repository, andere Tools)
– Doppelklick auf Name eines Schemaobjektes öffnet das
entsprechende Tool (z.B. Data Dictionary für Tabellen)
– Hilfe zu ABAP-Befehlen (Schlüsselworte) mittels F1
Integration von
– Syntaxüberprüfungen (Programm → Prüfen → Syntax)
– Bytecode-Erzeugung (Programm → Generieren)
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 5
Programmtypen
G
G
G
G
G
G
Ausführbares Programm (Typ 1)
•
•
Für Reports
Nur Programme von diesem Typ können direkt abgearbeitet werden
Modulpool (Typ M)
•
•
Für Dialoganwendungen (Verarbeitungsschritte von DynPros)
Nur über Transaktionsnummer aufrufbar
Funktionsgruppe(Typ F)
•
Sammlung von Funktionen
Include-Programm (Typ I)
Subroutinepool (Typ S)
Klassen und Interfacedefinition (Typ K,J)
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 6
Aufbau von ABAP-Anweisungen
Wie so viele Sprachen besitzt ABAP den,
Anspruch der natürlichen Sprache zu ähneln.
In ABAP bedeutet dies konkret dass jede,
Anweisung mit einem Punkt beendet werden,
muss (eine Anweisung heisst daher Satz).
Wenn ein Satz,
aus mehreren Teilen besteht dann muss jeder,
dieser Teile mit einem Komma abgetrennt,
werden.
Ein: Doppelpunkt besagt dass,
Schlüsselwort für mehrere Parameter gilt.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 7
Grobstruktur von Reports
REPORT Zreportname.
* Ein Stern als erstes Zeichen markiert
* eine Kommentarzeile
TYPES: ...
.
“ alles folgende gilt auch
DATA:
...
.
“ als Kommentar
TABLES: ...
.
PARAMETERS: ...
.
Anweisungen .
Perform Unterprogramm USING Parameterliste.
Anweisungen .
FORM Unterprogramm USING Parameterliste.
Anweisungen .
ENDFORM.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 8
ABAP: Datendefinition …
G
G
Datendefinition
DATA: feldname TYPE datentyp .
DATA: feldname(länge) TYPE datentyp
[ VALUE ‘value’] .
ABAP-Datentypen:
C
N
T
D
F
I
P
X
Text
Numerischer Text
Zeitangabe
Datum
Gleitpunktzahl
Ganze Zahl
Gepackte Zahl (für Festkomma)
Hexadezimalzahl
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 9
… ABAP: Datendefinition
G
Like-Operator: Typ von Objekten wird aus dem Data Dictionary
übernommen
z.B. Variable saldo soll den Typ des Attributs kontostand der
Tabelle ZOHO00KON besitzen
DATA: saldo LIKE zoho00kon-kontostand .
G
Ohne Like-Operator darf nur ABAP-Datentyp gewählt werden,
der den “externen” Datentyp aufnimmt
(ABAP-Datentypen und Datentypen des Dictionarys bzw. der
unterliegenden Datenbank sind nicht vollständig kompatibel)
z.B.
C(n)
P((n+2)/2) DECIMALS m
…
Objektverwaltung höherer Ordnung (OHO) – SS 2001
für CHAR n
für CURR n, m
Kapitel 10: Datenbankzugriff & Pufferung – 10
(einige) ABAP-Sprachelemente
G
Bildschirmausgabe
WRITE ‘Hello world’.
WRITE: / ‘Hello’, ‘world’. “ /
G
Startet Ausgabe in
neuer Zeile
Zuweisungen
field = expression.
(mit impliziter Typumwandlung)
MOVE A TO B.
“ Für die Freunde von Assembler
MOVE-CORRESPONDING A TO B. “
“
“
“
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Zuweisungen der Inhalte von
Elementen gleichen Namens
zwischen zwei Strukturen
z.B. SAP-Tabellen
Kapitel 10: Datenbankzugriff & Pufferung – 11
Tabellendeklaration
G
Tabellen, die im Data Dictionary definiert (und die aktiviert) sind,
müssen bei Verwendung in ABAP-Programmen explizit deklariert
werden
TABLES:
G
ZOHO00KUN, ZOHO00KTO
.
Zugriff auf Tabellenelemente:
WRITE:
‘Kundenname: ‘, ZOHO00KUN-name1 .
mysaldo = ZOHO00KTO-kontostand .
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 12
Open-SQL (Syntax von des Select-Statements) …
SELECT [SINGLE
“ Selektiert nur einzelnen Satz
[FOR UPDATE] ]
“ Setzt gleich Sperre
| [DISTINCT]
feldliste, aggregatfunktion
[INTO [feld | (feldliste)] |
[[CORRESPONDING FIELDS OF] work_area]|
[[CORRESPONDING FIELDS OF] TABLE itab] ] |
“ Ergebnis wird an interne Tabelle angehängt
[APPENDING
[CORRESPONDING FIELDS OF] TABLE itab]
FROM table | (table_name)
| tab AS t1 JOIN tab2
AS t2 ON t1~id = t2~id
[BYPASSING BUFFER,
UP TO n ROWS,
CLIENT SPECIFIED]
...
“
“
“
“
“
“
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Join zweier Tabellen
Joinbedingung; ~ für Aliasse
Umgehen des Tabellenpuffers
Einschränken der Ergebnismenge
Abschalten der autom. Verwendung
der Mandantennummer
Kapitel 10: Datenbankzugriff & Pufferung – 13
… Open-SQL (Syntax von des Select-Statements)
...
[WHERE condition |
FOR ALL ENTRIES IN itab WHERE condition]
“ Angabe einer Menge von Vergleichswerten in Tabelle itab
[GROUP BY fieldlist]
[HAVING condition]
[ORDER BY fieldlist | ORDER BY PRIMARY KEY]
Beliebige ABAP-Anweisungen.
[ENDSELECT.]
“
“
“
“
ENDSELECT ist nicht erforderlich bei
- SELECT SINGLE Statements, bei
- Aggregatfunktionen ohne GROUP BY und bei
- INTO TABLE-Konstrukten
“ Alle Anweisungen nach Ende des SELECT
“ Statements, aber VOR dem ENDSELECT werden
“ für JEDEN Datensatz ausgeführt!
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 14
Open-SQL-Befehlssatz
G
G
G
G
G
G
SELECT
INSERT
MODIFY
UPDATE
DELETE
Einfügen
Ändern oder einfügen
Ändern
Löschen
Indikatorvariable SY-SUBRC
Status der Open-SQL-Anweisung
z.B.
SY-SUBRC = 0
Select erfolgreich
SY-SUBRC = 4
Kein Tupel gefunden
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 15
Open-SQL: Eigenschaften …
G
Anfrageergebnise werden tupelweise zurückgegeben
•
•
Select-Statement muss mit ENDSELECT. abgeschlossen werden
Zwischen SELECT ...ENDSELECT. wird über alle Ergebnistupel
iteriert (besitzt Cursor-ähnliche Semantik)
TABLES: zautor.
SELECT * FROM zautor .
WRITE: /
zautor-nachname,
zautor-vorname.
ENDSELECT.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 16
… Open-SQL: Eigenschaften
G
In der FROM-Klausel sind pro Open-SQL-Select-Statement nur maximal
zwei Tabellen erlaubt
•
•
G
Explizite Joins sind in Open-SQL nur zwischen zwei transparenten Tabellen
möglich (Pool- oder Clustertabellen sowie Projektionsviews sind nicht
erlaubt)
Join wird an die Datenbank weitergeschickt
Alternative: View definieren (Join in View-Definition einbetten)
oder Joins in ABAP-Programmen selbst berechnen:
TABLES: zautor, zwerk. “ zautor und zwerk nicht transparent
SELECT * FROM zautor.
SELECT * FROM zwerk
WHERE autorid = zautor-autorid.
WRITE: / zautor-nachname, zwerk-titel.
ENDSELECT.
“ zwerk
ENDSELECT .
“ zautor
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 17
Open-SQL: Join
G
Join-Konstukt in Open-SQL (recht neue Erweiterung) erlaubt einen
Equi-Join zweier transparenter Tabellen
TABLES: zautor, zwerk. “ Beides transparente Tabellen
DATA: nachname like zautor-nachname,
titel
like zwerk-titel.
SELECT A~nachname W~titel
INTO (nachname, titel)
FROM zautor as A JOIN zwerk as W
ON
A~autorid = W~autorid.
WRITE: / nachname, titel.
ENDSELECT .
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 18
Open-SQL: Aggregatfunktionen
G
Folgende Aggregatfunktionen sind in Open-SQL erlaubt
(mit der bekannten Semantik)
AVG (
COUNT
COUNT
MAX (
MIN (
SUM (
•
feldname )
( DISTINCT feld )
( * )
feld )
feld )
feld )
Blanks sind wichtig!
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 19
Native SQL ...
G
G
G
Statement im “Dialekt” der unterliegenden Datenbank
Geklammert in
EXEC SQL.
...
ENDEXEC.
Hostvariablen für Rückgabewerte müssen explizit angegeben
werden, z.B.
DATA: name like zautor-nachname.
EXEC SQL.
SELECT nachname INTO :name
FROM zautor WHERE ID=5
ENDEXEC.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 20
… Native SQL
G
G
Mandant muss immer explizit angegeben werden
... and mandt = 800
Kein Cursor möglich
•
Abhilfe: Bei EXEC SQL kann Unterprogramm angegeben werden,
das für jedes Ergebnistupel aufgerufen wird.
EXEC SQL PERFORMING ausgabe .
...
ENDEXEC.
FORM ausgabe .
WRITE : /
name .
ENDFORM.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 21
“Interaktive Berichte”: Eingabeparameter
G
Schlüsselwort Parameters deklariert Eingabeparameter
eines Berichts
PARAMETERS: name LIKE zautor-nachname.
SELECT * FROM zautor
WHERE
nachname = name.
…
ENDSELECT.
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 22
Literatur (Lehrbuchsammlung)
G
G
G
B. Matzke.
ABAP/4 - Die Programmiersprache des SAP-Systems R/3.
2. Auflage, Addison-Wesley, 1999.
R. Kretschmer, W. Weiss.
SAP-R/3-Entwicklung mit ABAP/4.
2. Auflage, Sybex Verlag, 1997.
Online: www.dbs.ethz.ch/sapr3
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 23
Praktische Übung
G
Implementierung von Reports in ABAP (mit Datenbankzugriff)
•
Aufgabe 1:
– Skelett des Programms vorgegeben (ZOHO00RO)
– Kopie in eigenen Namensraum (ZOHOxxRO)
– Implementierung mittels Open SQL
•
Aufgabe 2:
– Skelett des Programms vorgegeben (ZOHO00RN)
– Kopie in eigenen Namensraum (ZOHOxxRN)
– Implementierung mittels Native SQL
•
Aufgabe 3:
– Neuen Bericht erstellen
– Wahlweise Open SQL oder Native SQL
Objektverwaltung höherer Ordnung (OHO) – SS 2001
Kapitel 10: Datenbankzugriff & Pufferung – 24
Herunterladen