Anwendungsgebiet: PROCEDURE
Kommandobeschreibung
Eine Include-Prozedur ist eine Prozedur, in der die Datenumgebung der aufrufenden Prozedur sichtbar ist. Das heißt, alle Variablen sind sichtbar, die in der aufrufenden Prozedur sichtbar sind. Allerdings kann eine Variable der aufrufenden Prozedur durch eine neue Deklaration in der Include-Prozedur überdeckt werden (siehe Beispiel).
Das Kommando INCLUDE-PROCEDURE startet eine gespeicherte Kommandofolge (Prozedur). Bei Abarbeitung werden darin enthaltene symbolische Parameter durch die im Kommandoaufruf angegebenen Werte (Operand PROCEDURE-PARAMETERS) ersetzt:
Als Aktualparameter können Variablen übergeben werden, über die die Prozedur auch Ausgabewerte zurückliefert.
Die Aktualparameter können als Stellungs- oder als Schlüsselwortparameter übergeben werden. Die Reihenfolge der Stellungsparameter entspricht dabei der dynamischen Reihenfolge der DECLARE-PARAMETER-Kommandos; die Namen der Schlüsselwörter entsprechen den Namen der formalen Prozedurparameter. Die Schlüsselwörter dürfen bis zur Eindeutigkeit abgekürzt werden.
Die Protokollierung wird im Kommandoaufruf eingestellt; ebenso, ob ein bereits geladenes Programm entladen werden darf.
Prozeduren können gespeichert werden als:
katalogisierte (auch temporäre) SAM- oder ISAM-Datei mit Sätzen variabler Länge
Element vom Typ J oder SYSJ einer PLAM-Bibliothek
S-Variable vom Typ Liste
Prozedur-Formate:
Text-Prozedur
Die S-Prozedur liegt im ursprünglichen Textformat vor. Volle SDF-P-Funktionalität kann nur verwendet werden, wenn bei Aufruf der Prozedur das kostenpflichtige Subsystem SDF-P geladen ist. In Bibliotheken sollte für Text-Prozeduren der Elementtyp J verwendet werden.Objekt-Prozedur
Die S-Prozedur im Textformat wurde mit dem Kommando COMPILE-PROCEDURE in ein Zwischenformat kompiliert. Diese Objekt-Prozedur kann, unabhängig von der Verfügbarkeit des Subsystems SDF-P, die volle SDF-P-Funktionalität nutzen (mit Ausnahme des Kommandos COMPILE-PROCEDURE). In Bibliotheken sollte für Objekt-Prozeduren der Elementtyp SYSJ verwendet werden (Default-Wert bei COMPILE-PROCEDURE).
Format
INCLUDE-PROCEDURE |
FROM-FILE = <filename 1..54 without-gen> / *LIBRARY-ELEMENT(...) / *VARIABLE(...) *LIBRARY-ELEMENT(...) LIBRARY = <filename 1..54 without-gen> ,ELEMENT = <composed-name 1..64>(...) <composed-name 1..64>(...) VERSION = *HIGHEST-EXISTING / <composed-name 1..24> ,TYPE = *STD / *BY-LATEST-MODIFICATION / <alphanum-name 1..8> *VARIABLE(...) VARIABLE-NAME = <composed-name 1..255> ,PROCEDURE-PARAMETERS = *NO / <text 0..1800 with-low expr> ,LOGGING = *PARAMETERS(...) / YES / *NO / *PARAMETERS(...) CMD = *BY-PROC-TEST-OPTION / *YES / *NO ,DATA = *BY-PROC-TEST-OPTION / *YES / *NO ,UNLOAD-ALLOWED = *YES / *NO ,EXECUTION = *YES / *NO |
Operandenbeschreibung
FROM-FILE = <filename 1..54 without-gen> / *LIBRARY-ELEMENT(...) / *VARIABLE(...)
Name der Prozedurdatei.
FROM-FILE = *LIBRARY-ELEMENT(...)
Die Prozedur ist in einem PLAM-Bibliothekselement abgelegt.
LIBRARY = <filename 1..54 without-gen>
Name der PLAM-Bibliothek, die die Prozedurdatei als Element (Typ J oder SYSJ; siehe Operand TYPE) enthält.
ELEMENT = <composed-name 1..64>(...)Name des Elements.
VERSION = *HIGHEST-EXISTING / <composed-name 1..24>
Version des Bibliothekelements. Voreingestellt ist *HIGHEST-EXISTING, d.h. die Prozedur wird dem Element mit der höchsten Version entnommen.
TYPE = *STD / *BY-LATEST-MODIFICATION / <alphanum-name 1..8>
Bestimmt den Elementtyp, unter dem die Prozedurdatei in der PLAM-Bibliothek abgelegt ist.
TYPE = *STD
Die Prozedurdatei kann als Element des Typs SYSJ oder J abgelegt sein.
Das angegebene Element wird zuerst unter den Elementen vom Typ SYSJ gesucht. Falls es dort nicht existiert, wird unter den Elementen vom Typ J weitergesucht.
Eine Nicht-S-Prozedur kann nur als Element vom Typ J vorliegen.
Eine S-Prozedur kann sowohl als Text-Prozedur (ursprüngliches Textformat) als auch als Objekt-Prozedur (kompiliertes Zwischenformat) vorliegen. Zur Vereinfachung der Verwaltung beider Formate in einer Bibliothek sollten Text-Prozeduren als Element vom Typ J und Objekt-Prozeduren als Element vom Typ SYSJ ablegt sein. Mit dem Kommando COMPILE-PROCEDURE wird aus einer Text-Prozedur vom Typ J standardmäßig eine Objekt-Prozedur vom Typ SYSJ (Default-Wert) erzeugt.
Die Angabe von TYPE=*STD (Default-Wert) stellt sicher, dass bei Einhaltung dieser Konvention Objekt-Prozeduren bevorzugt aufgerufen werden.
TYPE = *BY-LATEST-MODIFICATION
Die Prozedurdatei kann als Element des Typs SYSJ oder J abgelegt sein.
Existiert das angegebene Element sowohl als Typ SYSJ als auch J, wird das zuletzt geänderte Element aufgerufen. Bei gleichem Zeitstempel wird des Element vom Typ SYSJ aufgerufen.
Die Angabe von TYPE=*BY-LATEST-MODIFICATION stellt sicher, dass z.B. während der Testphase bei der Erstellung bzw. Erweiterung einer Prozedur das aktuellste Element aufgerufen wird.
TYPE = <alphanum-name 1..8>
Die Prozedurdatei wird ausschließlich unter den Elementen des angegebenen Typs gesucht.
FROM-FILE = *VARIABLE(...)
Die Prozedur ist in einer S-Variablen vom Typ Liste abgelegt.
VARIABLE-NAME = <composed-name 1..255>Name der S-Variablen.
PROCEDURE-PARAMETERS = *NO / <text 0..1800 with-low expr>
Definiert die aktuellen Prozedurparameter; die Parameter müssen in Klammern eingeschlossen werden.
Zu Prozedurparametern siehe auch Abschnitt „Prozedurparameter übergeben“ff.
LOGGING = *PARAMETERS(...) / *YES / *NO
Steuert die Protokollierung des Prozedurablaufs.
Der Operand LOGGING wird bei Aufruf von Nicht-S-Prozeduren ignoriert, da die Protokollierung dort nur im Prozedurkopf vereinbart werden kann (siehe BEGIN-PROCEDURE, Operand LOGGING).
Bei Protokollierung einer S-Prozedur wird jede abgearbeitete Prozedurzeile mit vorangestellter Zeilennummer und Prozedurstufe ausgegeben.
Zu Protokollierung siehe auch Abschnitt „Protokollierung einstellen“ff.
LOGGING = *PARAMETERS(...)
Die Protokollierung kann getrennt eingestellt werden für Kommando-/Anweisungszeilen und Datenzeilen.
CMD = *BY-PROC-TEST-OPTION / *YES / *NO
Gibt an, ob Kommandos protokolliert werden sollen. Voreingestellt ist BY-PROC-TEST-OPTION, d.h. keine Protokollierung (entspricht *NO) bzw. der Wert, den der Benutzer mit dem Kommando MODIFY-PROC-TEST-OPTIONS als Voreinstellung gewählt hat.
DATA = *BY-PROC-TEST-OPTION / *YES / *NO
Gibt an, ob Datenzeilen protokolliert werden sollen. Voreingestellt ist BY-PROC-TEST-OPTION, d.h. keine Protokollierung (entspricht NO) bzw. der Wert, den der Benutzer mit dem Kommando MODIFY-PROC-TEST-OPTIONS als Voreinstellung gewählt hat
UNLOAD-ALLOWED = *YES / *NO
Legt fest, ob ein Programm, das zum Zeitpunkt des Prozeduraufrufs geladen ist, entladen werden darf.
Der Schutz vor Programmentladung ist nur für das Entladen mit den Kommandos START-EXECUTABLE-PROGRAM, LOAD-EXECUTABLE-PROGRAM und CANCEL-PROGRAM gewährleistet.
Die Angabe YES wird ignoriert, wenn der Prozeduraufruf aus einer Prozedur erfolgt, für die UNLOAD-ALLOWED=*NO vereinbart wurde.
EXECUTION = *YES / *NO
Legt fest, ob die Prozedur nur zu Testzwecken analysiert werden oder auch ausgeführt werden soll.
Der Test ist mit MODIFY-SDF-OPTIONS (Operand MODE) möglich.
Kommando-Returncode
Die nachfolgenden Kommando-Returncodes können nur zurückgegeben werden, wenn die aufgerufene Prozedur selbst keinen Kommando-Returncode liefert (z.B. EXIT-
PROCEDURE wegen Fehlers nicht ausgeführt).
Kommando-Returncodes, deren Maincode mit „SSM“ beginnt, können nur bei Aufruf einer Nicht-S-Prozedur zurückgegeben werden.
Kommando-Returncodes, deren Maincode mit „SDP“ beginnt, können nur bei Aufruf einer S-Prozedur zurückgegeben werden.
(SC2) | SC1 | Maincode | Bedeutung |
0 | CMD0001 | Ohne Fehler | |
2 | 0 | SSM2058 | Protokoll-Typ-Fehler |
2 | 0 | SSM2065 | EOF auf Prozedurdatei, /END-PROC simuliert |
1 | SSM2036 | Unvollständiger Operand | |
1 | SSM2054 | Symbolischer Operandenfehler | |
1 | SSM2055 | Symbolischer Operandenfehler in /BEGIN-PROC | |
1 | SDP0138 | Fehler bei Voranalyse der Text-Prozedur oder Objekt-Prozedur fehlerhaft | |
1 | CMD0202 | Syntaxfehler | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
64 | SDP0093 | Nicht-S-Prozedur kann nur Element vom Typ J sein | |
64 | SDP0144 | Fehler bei Parameterübertragung | |
64 | SSM2052 | DVS-Fehler (Open-Fehler) | |
64 | SSM2053 | keine SAM/ISAM-Datei oder Datei beginnt nicht mit /BEGIN-PROC bzw. /PROC | |
64 | SSM2056 | Parameter von /INCL-PROC und /BEGIN-PROC passen nicht zusammen | |
64 | SSM2061 | Fehler bei Zugriff auf Bibilothekselement | |
64 | SSM2064 | Prozedurdatei kann nicht von entferntem Rechner geholt werden | |
130 | SDP0099 | Kein Adressraum mehr verfügbar | |
xx | xx | xxxxxxx | sonstige Returncodes der aufgerufenen Prozedur |
Beispiel
Prozedur 1:
/DECLARE-VARIABLE A(TYPE = *STRING) /DECLARE-VARIABLE B(TYPE = *STRING) /DECLARE-VARIABLE C(TYPE = *STRING) /DECLARE-VARIABLE D /INCLUDE-PROCEDURE PROC2
Prozedur PROC2:
/DECLARE-VARIABLE NAME=A(INIT-VALUE=1,TYPE=*INTEGER),SCOPE =*CURRENT —— (1) /DECLARE-VARIABLE NAME=C(TYPE=*STRING),SCOPE = *PROCEDURE ———————————— (2) /DECLARE-VARIABLE NAME=B(TYPE=*INTEGER),SCOPE = *PROCEDURE ———————————— (3)
(1) | In PROC2 wird eine Variable A deklariert, die nur in PROC2 gültig ist. Die Variable A der aufrufenden Prozedur (Prozedur 1) ist daher in PROC2 nicht sichtbar, sondern erst wieder nach Beendigung von PROC2. |
(2) | Dies ist eine zulässige Mehrfachdeklaration. Sie ist ohne Wirkung. Die Prozedurvariablen C und D aus Prozedur 1 sind in PROC2 sichtbar. Die Prozedurvariable A aus Prozedur 1 wird durch die Variable A aus PROC2 überdeckt. |
(3) | FEHLER: Die dritte Deklaration führt zu einem Fehler, weil es bereits eine Prozedurvariable B mit anderem Datentyp gibt. In einer Mehrfachdeklaration müssen alle Attribute mit der ursprünglichen Deklaration übereinstimmen. |