Die Architektur des SAP R/3 Systems

Download Report

Transcript Die Architektur des SAP R/3 Systems

ABAP/4
© 2000 Sören Berger
ABAP/4
22.03.2000
Gliederung

© 2000 Sören Berger
Einleitung

ABAP Syntax & Programmstruktur

Interne Tabellen

DB-Zugriff mit ABAP & Open-SQL

ABAP-Dictionary
ABAP/4
22.03.2000
Seite: 2
Einleitung
Was heißt ABAP/4?
A dvanced
B usiness
A pplication
P rogramming Language 4
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 3
Einleitung
Logischer Aufbau von SAP/R3 und ABAP/4:
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 4
Einleitung
Dialogschritte
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 5
Einleitung
Struktur eines Workprozesses (WP):

Kontrolliert „Flow Logic“
über Dispatcher
Kommunikation zw. GUI
und WP


Kontrolliert „Processing Logic“
Kommuniziert mit SP, welches
Modul der Flow Logic als
nächstes ausgeführt wird



Kommuniziert mit DBI
Kommunikation mit DB und
ABAP Dictionary
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 6
Einleitung
Das Datenbank-Interface
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 7
Einleitung
Screens:


Jeder Screen besitzt Eingabemaske mit Input/Output
Zwei Events getriggert:
– „Process Before Output“ (PBO), der vor der Maske dargestellt wird
– „Process After Input“ (PAI), nach User-Interaktion



© 2000 Sören Berger
Jeder Screen ist gelinkt zu einem PBO bzw PAI
PAI und nachfolgender PBO bilden Dialogschritt
Screens werden über „Screen-Painter“ erzeugt, oder alternativ als
„Selection-Screen“ oder als Liste mit Hilfe von ABAP-Statements
(wichtige Keywords: MODULE, FIELD, CHAIN und LOOP)
ABAP/4
22.03.2000
Seite: 8
Einleitung

ABAP-Programme sind verantwortlich für das Bearbeiten von
Daten innerhalb der Dialogschritte.
 ABAP-Programme sind modular
Aufbau eines ABAP-Programms
© 2000 Sören Berger
ABAP/4
22.03.2000
Seite: 9
Einleitung
Verschiedene ABAP-Programmodi

Typ 1 (Report)




© 2000 Sören Berger
werden nicht durch Screens kontrolliert
werden durch SUBMIT-Statement von anderen ABAP-Programmen,
oder durch Eintippen des Programmnamens bzw. Transaktionscodes
gestartet
starten ihrerseits unsichtbares Systemprogramm, das einem festen
Programmfluß folgt, der aber verlassen werden kann
 der feste Programmfluß dient zum Auslesen der DB und zum
Darstellen der Informationen (daher „Report“)
 brauchen keinen User-Input
können logische DB verwenden
ABAP/4
22.03.2000 Seite: 10
Einleitung

Typ M






© 2000 Sören Berger
können nur durch „Screen Flow Logic“ kontrolliert werden
Start durch Transaktionscode (mit Anfangsmaske „Initial Screen“)
man muß seine eigenen Screens mit dem Screen-Painter erstellen
Initial Screen aktiviert Dialogmodul des ABAP-Prog.
 Dialogmodul kann versch, Aufgaben übernehmen, z.B. andere
Screens aktivieren, andere Ausführungsblöcke im ABAP-Prog., oder
andere Programme (mit CALL TRANSACTION (für Typ M), oder mit
SUBMIT (für Typ 1))
werden als Modul-Pool bezeichnet und für dialogorientierte Programme
mit einer großen Anzahl von Screens verwendet
gibt noch Typ F (Funktionen-Gruppen, für globale Fkt.) und
Typ I (Includes)
ABAP/4
22.03.2000 Seite: 11
Einleitung
Logische Datenbank:






© 2000 Sören Berger
Liest Daten aus DB
vergleichbar mit VIEW-Befehl
wird über Workbenchbefehle bearbeitet und mit dem ABAPProgramm gelinkt
kann von mehreren Programmen genutzt werden
können nur von Typ 1 benutzt werden
hat folgende Struktur:
ABAP/4
22.03.2000 Seite: 12
Einleitung
Logische Datenbank
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 13
Einleitung
Logische Datenbank



© 2000 Sören Berger
Structure: welche Tabellen gelesen werden, die Hierarchie
(über Foreign Keys) wird beibehalten
Selection Part: welche Felder dargestellt werden, können
durch das ABAP-Programm auch geändert werden
Database Program: Container für Subroutinen, die die Daten
lesen
ABAP/4
22.03.2000 Seite: 14
Einleitung
Namenskonventionen in ABAP:
Kundenprogramme(Reports) sollten folgender Konvention
folgen:
Yaxxxxxx oder Zaxxxxxx
wobei a durch den ID-Code der Applikation und xxxxxx durch
einen bel. Bezeichner ersetzt wird.
SAP-Programme werden mit Raxxxxxx bezeichnet.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 15
Gliederung

© 2000 Sören Berger
Einleitung

ABAP Syntax & Programmstruktur

Interne Tabellen

DB-Zugriff mit ABAP & Open-SQL

ABAP-Dictionary
ABAP/4
22.03.2000 Seite: 16
ABAP Syntax und Programm-Struktur




Kommentare werden durch * (für ganze Zeile) und “ (für Teil
der Zeile) eingeleitet
ABAP-Ausdrücke beginnen mit einem Keyword und enden mit
einem Punkt (.)
Deklarative Ausdrücke sind z.B.: DATA, TYPES, TABLES
Modulare Ausdrücke sind unterteilt in:


© 2000 Sören Berger
Event Keywords wie AT SELECTION SCREEN, START-OFSELECTION, AT-USER-COMMAND
Definitions-Ausdrücke werden zur Definition von Subroutinen,
Funktionsmodulen, Methoden u.ä. verwendet, z.B.:
FORM...ENDFORM, FUNCTION...ENDFUNCTION,
MODUL...ENDMODUL
ABAP/4
22.03.2000 Seite: 17
ABAP Syntax und Programm-Struktur



© 2000 Sören Berger
Call-Ausdrücke werden zum Aufrufen von Programmblöcken
im selben oder einem anderen Programm verwendet.
Bsp: PERFORM, CALL, SUBMIT, SET USER-COMMAND
Operations-Ausdrücke bearbeiten Daten, die über die
deklarativen Ausdrücke definiert werden.
Bsp.: WRITE, MOVE, ADD
Open-SQL: nur Ausdrücke wie INSERT, SELECT, DELETE
kein: CREATE TABLE, CREATE INDEX
ABAP/4
22.03.2000 Seite: 18
ABAP Syntax und Programm-Struktur

Vordefinierte Datentypen:








Charakter String (C) Länge: 1 - 65535
Numeric Charakter String (N) Länge: 1 - 65535
Date (D) Format: YYYYMMDD
Time (T) Format: HHMMSS
Hexadecimel (X)
Integer (I) von -2^31 - 2^31-1
Floating-Point Number (F) 1x10^-307 bis 1x10^308
Packed Number (P) max. 16byte mit bis zu 14 Stellen
Für Berechnungen sollte man nur Typ I und F verwenden.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 19
ABAP Syntax und Programm-Struktur
User-Definierte Datentypen
TYPES: NUMBER TYPE I,
LENGTH TYPE P DECIMALS 2,
CODE(3) TYPE C.
.......
DATA: NO_FLIGHTS TYPE NUMBER,
NO_PASSENGERS TYPE NUMBER,
DISTANCE TYPE LENGTH,
HEIGHT TYPE LENGTH,
....
CITY_CODE TYPE CODE,
COUNTRY_CODE TYPE CODE,
......
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 20
ABAP Syntax und Programm-Struktur
DATA für Strukturen
DATA: BEGIN OF ADDRESS,
NAME(20) TYPE C,
STREET(20) TYPE C,
z.B.:Zugriff über ADDRESS-NAME
NUMBER TYPE P,
POSTCODE(5) TYPE N,
CITY(20) TYPE C,
END OF ADDRESS.
CONSTANTS: BEGIN OF MYADDRESS,
NAME(20) TYPE C VALUE 'Fred Flintstone',
Als konst. Ausdruck:
STREET(20) TYPE C VALUE 'Cave Avenue',
NUMBER TYPE P VALUE 11,
POSTCODE(5) TYPE N VALUE 98765,
CITY(20) TYPE C VALUE 'Bedrock',
END OF MYADDRESS.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 21
ABAP Syntax und Programm-Struktur
TABLES-Befehl
Syntax: TABLES <dbtab>
<dbtab> ist ein ABAP-Dictionary-Objekt, diese werden im
Workbench definiert
Bsp:
TABLES: SPFLI.
SELECT * FROM SPFLI.
WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID,......
ENDSELECT.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 22
ABAP Syntax und Programm-Struktur
Bsp. für interne Tabellen
PROGRAM SAPMZTST.
TYPES: BEGIN OF MYSTRING,
NUMBER TYPE I,
NAME(10) TYPE C,
END OF MYSTRING.
TYPES MYTAB TYPE MYSTRING OCCURS 5.
DATA STRING TYPE MYSTRING.
DATA ITAB TYPE MYTAB.
STRING-NUMBER = 1. STRING-NAME = 'John'.
APPEND STRING TO ITAB.
STRING-NUMBER = 2. STRING-NAME = ‘Paul’.
APPEND STRING TO ITAB.
STRING-NUMBER = 3. STRING-NAME = 'Ringo'.
APPEND STRING TO ITAB.
© 2000 Sören Berger
ABAP/4
STRING-NUMBER = 4.
STRING-NAME = 'George'.
APPEND STRING TO ITAB.
LOOP AT ITAB INTO STRING.
WRITE: / STRINGNUMBER,STRING-NAME.
ENDLOOP.
Ausgabe:
1 John
2 Paul
3 Ringo
4 George
22.03.2000 Seite: 23
ABAP Syntax und Programm-Struktur
MOVE-CORRESPONDING
Syntax: MOVE-CORRESPONDING <string1> TO <string2>
Beispiel:
DATA: BEGIN OF ADDRESS,
FIRSTNAME(20) VALUE 'Fred',
SURNAME(20) VALUE 'Flintstone',
INITIALS(4) VALUE 'FF',
STREET(20) VALUE 'Cave Avenue,
NUMBER TYPE I VALUE '11'.
POSTCODE TYPE N VALUE '98765'.
CITY(20) VALUE 'Bedrock',
END OF ADDRESS.
© 2000 Sören Berger
ABAP/4
DATA: BEGIN OF NAME,
SURNAME(20),
FIRSTNAME(20),
INITIALS(4),
TITLE(10) VALUE 'Mister',
END OF NAME.
MOVE-CORRESPONDING
ADDRESS TO NAME.
22.03.2000 Seite: 24
ABAP Syntax und Programm-Struktur
Schleifen und IF - Anweisung
© 2000 Sören Berger

While-Schleifen werden mit WHILE .... ENDWHILE eingegrenzt

DO-Schleifen mit DO ... ENDDO (Bsp: Do 4 TIMES. .... ENDDO.)

ebenso wird IF-Anweisung mit IF ... ENDIF eingegrenzt
ABAP/4
22.03.2000 Seite: 25
Gliederung

© 2000 Sören Berger
Einleitung

ABAP Syntax & Programmstruktur

Interne Tabellen

DB-Zugriff mit ABAP & Open-SQL

ABAP-Dictionary
ABAP/4
22.03.2000 Seite: 26
Interne Tabellen
... lesen (Teile von) festen Strukturen aus und speichern sie im
Arbeitsspeicher von ABAP.
... besitzen eine zweigeteilte Datenstruktur, bestehend aus Line
Type (kann jeder Datentyp sein) und Key (der die
Tabellenzeilen identifiziert).
... der Key ist wiederum aufgeteilt in Standard Key und Userdefined Key.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 27
Interne Tabellen
Drei Arten von Tabellen:
© 2000 Sören Berger

Standard Table: Daten werden über Table-Index oder Key
angesprochen (Key muß nicht definiert werden)

Sorted Table: Daten nach Key sortiert, Zugriff wie Standard
Table

Hash Table: kein linearer Index, Zugriff nur über Key, Key muß
UNIQUE sein
ABAP/4
22.03.2000 Seite: 28
Interne Tabellen
Zugriffsmethoden:
Es gibt zwei Arten, wie mit Internen Tabellen gearbeitet werden
kann:
 Die ganze Tabelle, z.B. mit MOVE <tabname>

oder über Workarea, wenn nur bestimmte Zeilen bearbeitet
werden sollen
Befehlsübersicht:
INSERT; APPEND; COLLECT
READ
MODIFY, DELETE
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 29
Interne Tabellen
Erstellen von internen Tabellen
1. Möglichkeit: Neue Tabelle
Syntax: TYPES <t> <type> OCCURS <n>
Bsp.: TYPES itab TYPE I OCCURS 10.
2. Möglichkeit: Neue Tabelle aus einer alten
Syntax: DATA <f> <type> [WITH HEADER LINE]
Bsp.:
TYPES: BEGIN OF LINE,
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
© 2000 Sören Berger
ABAP/4
TYPES ITAB TYPE LINE OCCURS 10.
DATA TAB1 TYPE ITAB.
DATA TAB2 LIKE TAB1 WITH HEADER LINE.
22.03.2000 Seite: 30
Interne Tabellen
Füllbefehle im Überblick
APPEND:
Syntax: APPEND [<wa> TO | INITIAL LINE TO] <itab>
COLLECT: sammelt Daten mit denselben Keys und addiert
restlichen Werte
Syntax: COLLECT [<wa> INTO] <itab>
INSERT: fügt an beliebigen Stelle eine Zeile ein
Syntax:
INSERT [<wa> INTO|INITIAL LINE INTO] <itab> [INDEX<idx>].
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 31
Interne Tabellen
Beispiel zu INSERT
LINE-COL1 = 11. LINE-COL2 =22.
DATA: BEGIN OF LINE,
INSERT LINE INTO ITAB INDEX 2.
COL1 TYPE I,
INSERT INITIAL LINE INTO ITAB
INDEX 1.
COL2 TYPE I,
LOOP AT ITAB INTO LINE.
END OF LINE.
WRITE: / SY-TABIX, LINE-COL1,
LINE-COL2.
DATA ITAB LIKE LINE OCCURS 10. ENDLOOP.
DO 2 TIMES.
Ausgabe:
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
1 0
0
APPEND LINE TO ITAB.
2 1
1
ENDDO.
3 11 22
4 2
4
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 32
Interne Tabellen
Auslesen einer Tabelle
LOOP: zeilenweise
Syntax: LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>]
[WHERE <condition>].
.....
ENDLOOP.
READ: eine einzelne Zeile
Syntax: READ TABLE <itab> [INTO <wa>] INDEX <idx>.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 33
Interne Tabellen
MODIFY: (Teile) einer Zeile ändern
Syntax: MODIFY <itab> [FROM <wa>] [INDEX <idx>]
[TRANSPORTING <f1>... <f2> [WHERE <condition>]].
Bsp:
DATA NAME(4) VALUE 'COL2'.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 5 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
....
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 34
Interne Tabellen
(MODIFY 2)
...
LINE-COL2 = 111.
MODIFY ITAB FROM LINE INDEX 2 TRANSPORTING (NAME).
LINE-COL1 = 11.
MODIFY ITAB FROM LINE TRANSPORTING COL1 WHERE COL2 = 25.
LOOP AT ITAB INTO LINE.
WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.
Ausgabe:
1
2
3
4
5
© 2000 Sören Berger
1
2
3
4
11
1
111
9
16
25
ABAP/4
22.03.2000 Seite: 35
Gliederung

© 2000 Sören Berger
Einleitung

ABAP Syntax & Programmstruktur

Interne Tabellen

DB-Zugriff mit ABAP & Open-SQL

ABAP-Dictionary
ABAP/4
22.03.2000 Seite: 36
DB-Zugriff mit ABAP und Open-SQL
Sollen Open-SQL Ausdrücke verwendet werden, müssen
folgende Bedingungen erfüllt sein:
 Die DB muß von SAP unterstützt werden.
 Die DB-Tabellen müssen im ABAP-Dictionary definiert sein.
Wichtige Systemfelder:
SY-SUBRC: =0, wenn Operation erfolgreich, sonst <>0
SY-DBCNT: zeigt an, wie viele Felder bearbeitet,
geändert wurden
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 37
DB-Zugriff mit ABAP und Open-SQL
Allg.: Zugriff aller Operationen erfolgt wie bei einer normalen DB,
müssen jedoch in einer Schleifenstruktur eingeschlossen
werden.
SELECT
Syntax von SELECT:
SELECT <result> FROM <source> [INTO <target>] [WHERE
<condition>] [GROUP BY <fields>] [ORDER BY <sort_order>].
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 38
DB-Zugriff mit ABAP und Open-SQL
Bsp zu SELECT:
TABLES SPFLI.
SELECT * FROM SPFLI WHERE CITYFROM EQ 'FRANKFURT'.
...
WRITE: / SPFLI-CARRID, SPFLI-CONNID,
SPFLI-CITYFROM, SPFLI-CITYTO.
...
ENDSELECT.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 39
DB-Zugriff mit ABAP und Open-SQL
FROM - Ergänzung:
Syntax:
...... FROM <dbtab> [CLIENT SPECIFIED] [BYPASSING BUFFER]
[UP TO <n> ROWS].........
BYPASSING BUFFER liest direkt aus DB und nicht aus SAP-Buffer!
CLIENT SPECIFIED liest aus Tabelle, egal auf welchem Client der User
eingeloggt ist.
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 40
Gliederung

© 2000 Sören Berger
Einleitung

ABAP Syntax & Programmstruktur

Interne Tabellen

DB-Zugriff mit ABAP & Open-SQL

ABAP-Dictionary
ABAP/4
22.03.2000 Seite: 41
ABAP-Dictionary
Tabellen und Felder im Dictionary erstellen:
Im ersten Fenster des Dic. wird der Tabellenname eingeben,
anschließend auf „Create“ klicken.
1. Im Feld „Short Text“ einen erklärenden Text eingeben.
2. Definiere eine „delivery class“ für die Tabelle
3. Für jedes Tabellenfeld einen Namen vergeben
4. Bestimme einen Key. Alle Keys müssen am Anfang der
Tabelle liegen. Bis zu 16 Keys sind pro Tabelle gestattet.
5. Benenne das Daten-Element auf das sich das Feld bezieht.
6. Für Felder der Typen Quantity (QUAN) und Currency
amount (CURR) müssen Bezugsfelder und -tabellen angeben
werden.
7. Speichern
© 2000 Sören Berger
ABAP/4
22.03.2000 Seite: 42