Ansicht
Dokumentation

ABENLDB_PROGRAM - LDB PROGRAM

ABENLDB_PROGRAM - LDB PROGRAM

rdisp/max_wprun_time - Maximum work process run time   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Datenbankprogramm

Das Datenbankprogramm einer logischen Datenbank ldb hat den Namen SAPDBldb. Es dient als Container für Unterprogramme, welche das ABAP-Laufzeit-Framework während der Verarbeitung einer logischen Datenbank aufruft. Die Reihenfolge der Aufrufe und ihr Zusammenspiel mit den Ereignissen in ausführbaren Programmen oder dem Funktionsbaustein LDB_PROCESS ergibt sich aus der Struktur der logischen Datenbank.

Folgende Unterprogramme sind normalerweise in einem logischen Datenbankprogramm enthalten.

  • ldb_process_init
Wird einmalig vor der Verarbeitung der logischen Datenbank aufgerufen, um diese auf eventuelle Mehrfachaufrufe durch den Funktionsbaustein LDB_PROCESS vorzubereiten. Wenn eine logische Datenbank mehrmals hintereinander aufgerufen werden soll, muss das Unterprogramm vorhanden sein und sein Ein-/Ausgabeparameter subrc auf den Wert Null gesetzt werden. Wenn der Parameter subrc nicht auf Null gesetzt wird, kommt es im Funktionsbaustein LDB_PROCESS zur nicht-klassenbasierten Ausnahme LDB_NOT_REENTRANT.
  • init
Wird einmalig vor der Bearbeitung der Selektionen aufgerufen.
  • pbo
Wird vor jeder Anzeige des Selektionsbilds aufgerufen, d.h. nur bei Verknüpfung mit ausführbaren Programmen und nicht beim Aufruf über den Funktionsbaustein LDB_PROCESS.
  • pai
Wird bei einer Benutzeraktion auf dem Selektionsbild aufgerufen, d.h. nur bei Verknüpfung mit ausführbaren Programmen und nicht beim Aufruf über den Funktionsbaustein LDB_PROCESS. Dabei werden die Schnittstellenparameter fname und mark an das Unterprogramm übergeben.
  • fname enthält den Namen eines Selektionskriteriums oder Parameters auf dem Selektionsbild.

  • mark beschreibt die vom Benutzer vorgenommene Abgrenzung. Enthält mark ein Leerzeichen bedeutet das, dass der Benutzer eine einfache Einzelwert- oder Intervallselektion eingegeben hat. Enthält mark das Zeichen "*" bedeutet das, dass der Benutzer auch Eintragungen auf dem Bild Mehrfachselektion vorgenommen hat.

  • ldb_process_check_selections
Wird statt des Unterprogramms pai aufgerufen, wenn die logische Datenbank durch den Funktionsbaustein LDB_PROCESS ohne Selektionsbildverarbeitung aufgerufen wird. Dieses Unterprogramm kann die vom Funktionsbaustein übergebenen Abgrenzungen überprüfen. Das Unterprogramm wird nach dem Füllen der Parameter und Selektionstabellen des Selektionsbilds durch die Schnittstellenparameter von LDB_PROCESS aufgerufen. Falls sein Ein-/Ausgabeparameter subrc nicht auf Null gesetzt wird, kommt es im Funktionsbaustein LDB_PROCESS zur Ausnahme LDB_SELECTIONS_NOT_ACCEPTED. Dem strukturierten Ein-/Ausgabeparameter msg kann eine Nachricht im Format SYMSG zugewiesen werden, die dem Aufrufer des Funktionsbausteins dann in den Systemfeldern sy-msg... zur Verfügung steht.
  • put_node
Wird einer von der Struktur festgelegten Reihenfolge aufgerufen. In diesem Unterprogramm werden die Daten des Knotens node gelesen und über die Anweisung PUT node ein entsprechendes GET-Ereignis im ABAP-Laufzeit-Framework ausgelöst. Diese Anweisung ist die zentrale Anweisung dieses Unterprogramms. Sie kann nur in einem Unterprogramm einer logischen Datenbank eingesetzt werden, deren Struktur den Knoten node enthält, und dessen Name mit put_node beginnt. Die PUT-Anweisung verzweigt den Programmablauf gemäß der Struktur der logischen Datenbank. Dabei wird die Lesetiefe durch die GET-Anweisungen des Anwendungsprogramms oder den Schnittstellenparameter CALLBACK des Funktionsbausteins LDB_PROCESS bestimmt. Als erstes wird das Unterprogramm put_node für den Wurzelknoten bearbeitet. Die Anweisung PUT verzweigt den Programmablauf wie folgt:
  • Ist das Unterprogramm authority_check_node im Datenbankprogramm vorhanden, so verzweigt die Anweisung PUT als erstes zu diesem Unterprogramm.

  • Danach löst die PUT-Anweisung im Laufzeit-Framework ein GET-Ereignis aus. Sofern eine zugehörige Anweisung GET node in einem verknüpften ausführbaren Programm vorhanden ist, wird der entsprechende Ereignisblock abgearbeitet. Falls der Parameter CALLBACK des Funktionsbausteins LDB_PROCESS entsprechend gefüllt ist, wird die zugehörige Callback-Routine aufgerufen.

  • Danach verzweigt die PUT-Anweisung den Programmablauf

(a) zum nächsten vorhandenen Unterprogramm eines unmittelbar nachfolgenden Knotens, falls ein tiefer liegender Knoten (nicht unbedingt der unmittelbare Nachfolger) des zugehörigen Teilbaums im ausführbaren Programm oder Funktionsbaustein über GET angefordert wird.
(b) zum Unterprogramm eines Knotens der gleichen Ebene, falls der darüberliegende Knoten zu einem solchen verzweigt und falls solch ein Knoten im ausführbaren Programm oder Funktionsbaustein über GET angefordert wird. Die dortige PUT-Anweisung startet wieder mit dem ersten Schritt. Im Unterprogramm des untersten Knotens eines Teilbaums, der über GET angefordert wird, wird nicht weiter verzweigt, sondern das aktuelle Unterprogramm wird weiter verarbeitet. Ist ein Unterprogramm put_node vollständig ausgeführt, kehrt der Programmablauf zur PUT-Anweisung zurück, von der zum Unterprogramm put_node verzweigt wurde.
  • Nach der Rückkehr von einem untergeordneten Unterprogramm put_node, löst die PUT-Anweisung das Ereignis GET node LATE im Laufzeit-Framework aus.

  • authority_check_node
Wird automatisch durch die Anweisung PUT node aufgerufen. In dieses Unterprogramm kann eine Berechtigungsprüfung für den betroffenen Knoten node aus der Struktur der logischen Datenbank eingebaut werden.
  • put_ldb_sp
Wird bei wird bei einer Selektion über Suchhilfe zur Bearbeitung der in der Suchhilfe ausgewählten Schlüssel aufgerufen. ldb ist der Name der logischen Datenbank. Aus diesem Unterprogramm können mit Hilfe der Tabelleneinträge in den Suchhilfetabellen die entsprechenden Einträge aus dem Wurzelknoten gelesen werden. Die Verarbeitung im Programm kann dann mit PUT für den Wurzelknoten ausgelöst werden. Das Unterprogramm put_node für den Wurzelknoten wird dann nicht automatisch aufgerufen.
  • before_event
Werden vor einem Ereignis aufgerufen, dessen Name im Schnittstellenparameter event übergeben wird. Zur Zeit kann event nur der Wert "START-OF-SELECTION" zugewiesen werden, um ein Unterprogramm vor diesem Zeitpunkt auszuführen.
  • after_event
Werden nach einem Ereignis aufgerufen, dessen Name im Schnittstellenparameter event übergeben wird. Zur Zeit kann event nur der Wert "END-OF-SELECTION" zugewiesen werden, um ein Unterprogramm nach diesem Zeitpunkt auszuführen.
  • par_val, selcrit_val, selcrit-low_val, selcrit-high_val
Werden aufgerufen, wenn der Benutzer auf dem Selektionsbild die Eingabehilfe für den Parameter par bzw. das Selektionskriterium selcrit, die zu den Selektionen der logischen Datenbank gehören müssen, aufruft.
  • par_hlp, selcrit_hlp, selcrit-low_hlp, selcrit-high_hlp
Werden aufgerufen, wenn der Benutzer auf dem Selektionsbild die Eingabehilfe für den Parameter par bzw. das Selektionskriterium selcrit, die zu den Selektionen der logischen Datenbank gehören müssen, aufruft.

Folgende interne Tabelle ist implizit vorhanden und kann im Programm verwendet werden:

DATA: BEGIN OF get_events OCCURS 10,
        node(10),
        kind,
      END OF get_events.

Sie enthält pro Zeile den Namen eines Knotens der logischen Datenbank in der Komponente node. Die Komponente kind gibt an, ob und wie der Knoten vom Verwender angefordert wird:

  • "X": Knoten wird über GET und GET LATE angesprochen.
  • "G": Knoten wird nur über GET angesprochen.
  • "L": Knoten wird nur über GET LATE angesprochen.
  • "W": Knoten wird weder über GET noch über GET LATE angesprochen. Es wird jedoch ein untergeordneter Knoten über GET oder GET LATE angesprochen.
  • " ": Knoten wird weder über GET noch über GET LATE angesprochen und es wird auch kein untergeordneter Knoten angesprochen.

Hinweis

Der Logical Database Builder generiert beim Anlegen eines Selektions-Includes eine Vorlage, die auf der vorhandenen Struktur und den im Selektions-Include definierten Selektionen beruht. Das generierte Datenbankprogramm ist aus mehreren Include-Programmen zusammengesetzt:

  • DBldbTOP
Mit der programmeinleitenden Anweisung und globalen Deklarationen.
  • DBldbXXX Bindet folgende Include-Programme ein:
  • DBldb001, DBldb002, ...

Für die Unterprogramme put_node und authority_check_node.
  • DBldbFXXX

Unterprogramme für die Selektionsbildverarbeitung (Initialisierung, PBO, PAI, ...).
  • DBldbSXXX

Unterprogramm put_ldb_sp für die Behandlung der Suchhilfe.
  • DBldbF001, DBldbF002, ... Selbstdefinierte Include-Programme für zusätzliche Funktionen.

Die vorgegebenen NODES- bzw. TABLES-Anweisungen und die vorgegebenen Namen der automatisch erzeugten Include-Programme und Unterprogramme dürfen nicht geändert werden. Es können jedoch weitere Include-Programme oder Unterprogramme definiert werden und die ABAP-Anweisungen zum Lesen von Daten geändert werden. Selbstdefinierte Include-Programme müssen der Namenskonvention DBldbFnnn folgen, um mit der logischen Datenbank transportiert werden zu können.

Beispiel

In der Struktur der logischen Datenbank sei LFB1 ein Nachfolger von LFA1. Folgende Selektionskriterien seien im Selektions-Include definiert:

SELECT-OPTIONS: slifnr FOR lfa1-lifnr,
                sbukrs FOR lfb1-bukrs.

Ein möglicher Ausschnitt eines Datenbankprogramms ist dann:

FORM put_lfa1.
  SELECT * FROM lfa1
           WHERE lifnr IN slifnr.
    PUT lfa1.
  ENDSELECT.
ENDFORM.
FORM put_lfb1.
  SELECT * FROM lfb1
           WHERE lifnr =  lfa1-lifnr.
           AND   bukrs IN sbukrs.
    PUT lfb1.
  ENDSELECT.
ENDFORM.

Ein mit der logischen Datenbank verbundenes ausführbares Programm enthalte die Zeilen:

GET lfa1.
  WRITE lfa1-lifnr.
GET lfb1.
  WRITE lfb1-bukrs.

In diesem Beispiel ruft das Laufzeit-Framework nach dem Ereignis START-OF-SELECTION die Routine put_lfa1. Über die Anweisung PUT lfa1 wird das Ereignis GET lfa1 ausgelöst. Ist der entsprechende Ereignisblock im Programm abgearbeitet, verzweigt PUT lfa1 in das Unterprogramm put_lfb1. Von dort wird das Ereignis GET lfb1 im Programm ausgelöst. Ist LFB1 der letzte zu lesende Knoten, wird danach mit der Verarbeitung der SELECT-Schleife in put_lfb1 fortgefahren. Ansonsten wird zum Unterprogramm put_node des nächsten Knotens verzweigt. Am Ende der SELECT-Schleife des letzten Knotens wird mit der SELECT-Schleife des darüberliegenden Knotens fortgefahren. Die Programmierung über geschachtelte SELECT-Schleifen dient hier der Verdeutlichung des Ablaufs. In einer realen logischen Datenbank sollte dies vermieden werden, um die Zahl der Datenbankzugriffe klein zu halten. In diesem Beispiel verzweigen die PUT-Anweisungen auch nicht zu den Unterprogrammen für Berechtigungsprüfungen.

Beispiel

Siehe auch Beispiel für ein Datenbankprogramm.






ABAP Short Reference   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 16011 Date: 20240523 Time: 175338     sap01-206 ( 249 ms )