Wir betrachten eine logische Datenbank TEST_LDB.
SELECT-OPTIONS: slifnr FOR lfa1-lifnr,
sbukrs FOR lfb1-bukrs,
sgjahr FOR lfc1-gjahr,
sbelnr FOR bkpf-belnr.
*-------------------------------------------------------*
* DATENBANKPROGRAMM DER LOGISCHEN DATENBANK TEST_LDB
*-------------------------------------------------------*
PROGRAM sapdbtest_ldb DEFINING DATABASE test_ldb.
TABLES: lfa1,
lfb1,
lfc1,
bkpf.
*-------------------------------------------------------*
* Selektionsbild initialisieren (verarbeitet vor PBO)
*-------------------------------------------------------*
FORM init.
....
ENDFORM. "INIT
*-------------------------------------------------------*
* PBO des Selektionsbildes (immer vor Selektionsbild)
*-------------------------------------------------------*
FORM pbo.
....
ENDFORM. "PBO
*-------------------------------------------------------*
* PAI des Selektionsbildes (verarbeitet immer nach ENTER)
*-------------------------------------------------------*
FORM pai USING fname
mark.
CASE fname.
WHEN 'SLIFNR'.
....
WHEN 'SBUKRS'.
....
WHEN 'SGJAHR'.
....
WHEN 'SBELNR'.
....
ENDCASE.
ENDFORM. "PAI
*-------------------------------------------------------*
* Ereignis GET LFA1 aufrufen
*-------------------------------------------------------*
FORM put_lfa1.
SELECT * FROM lfa1
WHERE lifnr IN slifnr.
PUT lfa1.
ENDSELECT.
ENDFORM. "PUT_LFA1
*-------------------------------------------------------*
* Ereignis GET LFB1 aufrufen
*-------------------------------------------------------*
FORM put_lfb1.
SELECT * FROM lfb1
WHERE lifnr = lfa1-lifnr
AND
bukrs IN sbulrs.
PUT lfb1.
ENDSELECT.
ENDFORM. "PUT_LFB1
*-------------------------------------------------------*
* Ereignis GET LFC1 aufrufen
*-------------------------------------------------------*
FORM put_lfc1.
SELECT * FROM lfc1
WHERE lifnr = lfa1-lifnr
AND
bukrs = lfb1-bukrs
AND
gjahr IN sgjahr.
PUT lfc1.
ENDSELECT.
ENDFORM. "PUT_LFC1
*-------------------------------------------------------*
* Ereignis GET BKPF aufrufen
*-------------------------------------------------------*
FORM put_bkpf.
SELECT * FROM bkpf
WHERE bukrs = lfb1-bukrs
AND
belnr IN sbelnr
AND
gjahr IN sgjahr.
PUT bkpf.
ENDSELECT.
ENDFORM. "PUT_BKPF
Die PROGRAM-Anweisung hat den Zusatz DEFINING DATABASE test_ldb. Damit wird die Zugehörigkeit des Datenbankprogramms zur logischen Datenbank TEST_LDB definiert.
Die Knoten der Struktur werden hier mit der TABLES-Anweisung deklariert. Dies erzeugt die notwendigen Schnittstellen-Arbeitsbereiche als Tabellenarbeitsbereiche. Die Anweisung NODES ist für Datenbanktabellen als Knoten gleichwertig einsetzbar. Falls die Knoten keine Datenbanktabellen sind, müssen sie mit NODES deklariert werden. Die Schnittstellen-Arbeitsbereiche werden vom Datenbankprogramm und dem Verwender gemeinsam genutzt und dienen dadurch als die Schnittstelle für die Datenübergabe. Mit Verwender ist hier entweder direkt ein verknüpftes ausführbares Programm oder der Funktionsbaustein LDB_PROCESS gemeint.
In den Unterprogrammen INIT und PBO können Initialisierungen des Selektionsbilds vorgenommen werden.
Im Unterprogramm PAI können die Benutzereingaben auf dem Selektionsbild z.B. einer Berechtigungsprüfung unterzogen werden. Aber auch andere Prüfungen, wie für Plausibilität oder Wertebereich sind möglich. Für den negativen Ausgang einer Prüfung kann hier ein Fehlerdialog kodiert, und das entsprechende Feld wird wieder eingabebereit gemacht werden.
In den Unterprogrammen PUT_node werden die Datenbanktabellen entsprechend der vom Benutzer eingegebenen Selektionskriterien ausgelesen und die zugehörigen GET-Ereignisse ausgelöst. Dieses Programm soll nur den prinzipiellen Aufbau einer logischen Datenbank zeigen. Es sind keinerlei Maßnahmen zur Optimierung der Antwortzeiten unternommen worden. Die zeitliche Abfolge der Unterprogrammaufrufe wird durch die Struktur der logischen Datenbank bestimmt: