Alle SDF-P-Kommandos liefern Returncodes, die den Benutzer über die Ausführung des Kommandos informieren. Dieser Kommando-Returncode ist vergleichbar mit dem Returncode auf Programmebene. Der Kommando-Returncode ermöglicht es dem Benutzer, auf Fehlersituationen zu reagieren.
Der Kommando-Returncode besteht aus drei Teilen:
dem Subcode1, der die aufgetretene Fehlersituation in eine Fehlerklasse einordnet, aus der abgeleitet werden kann, wie schwer wiegend ein Fehler ist. Der Wert von Subcode1 wird dezimal ausgegeben. Folgende fünf Fehlerklassen sind im BS2000 definiert:
Klasse A: kein Fehler
Der Wert ist Null. Es kann normal weitergearbeitet werden.Klasse B: Syntaxfehler
Der Wert ist eine Zahl von 1 bis 31. Das Kommando wurde syntaktisch falsch eingegeben. Eine Wiederholung der Eingabe ist nur nach Korrektur des Syntaxfehlers sinnvoll.Klasse C: interner Fehler (Systemfehler)
Der Wert ist 32. Eine Wiederholung der Eingabe ist nur sinnvoll, wenn der interne Fehler behoben wurde.Klasse D: Fehler, die keiner anderen Fehlerklasse zuzuordnen sind
Der Wert ist eine Zahl von 64 bis 127. Zur Bestimmung der weiteren Vorgehensweise sollte der Maincode ausgewertet werden.Klasse E: Kommando kann vorübergehend nicht ausgeführt werden
Der Wert ist eine Zahl von 128 bis 130. Die Eingabe kann unverändert wiederholt werden. Das Kommando kann nach einer Wartezeit wieder ausgeführt werden. Die Dauer der Wartezeit wird eingeteilt in kurzfristig, langfristig und unbefristet.
Kurzfristig entspricht dem Wert 128 und bedeutet, dass ein Warten im Dialog als sinnvoll angesehen wird.
Langfristig entspricht dem Wert 129 und bedeutet, dass ein Warten im Stapelbetrieb als sinnvoll angesehen wird.
Unbefristet entspricht dem Wert 130 und bedeutet, dass es unsicher ist, ob der Fehler überhaupt behoben wird.
dem Subcode2, der Zusatzinformationen zur Fehlerklasse enthalten kann.
dem Maincode, der einem Meldungsschlüssel entspricht und differenzierte Fehlerinformationen liefert. Mit diesem Meldungsschlüssel kann über die vordefinierte Funktion MSG( ) oder mit dem Kommando HELP-MSG-INFORMATION die entsprechende Fehlermeldung ausgegeben werden (siehe Handbuch „Kommandos“ [3]).
Der Kommando-Returncode kann mit den vordefinierten Funktionen SUBCODE1( ), SUBCODE2( ) und MAINCODE( ) abgefragt werden.
Es gibt für jedes Kommando eigene Returncodes. Auch gibt es neben den eigenen Returncodes für bestimmte Kommandotypen noch übergreifende Returncodes, die hier anschließend aufgelistet werden.
Hinweise
Die Ausführung eines Kommandos wird gewöhnlich beendet, wenn ein Fehler auftritt. Wenn mehr als ein Fehler auftreten sollte, kann nicht immer festgestellt werden, dass der gemeldete Fehler auch der zuerst aufgetretene Fehler ist, weil die Reihenfolge der überprüften Operanden nicht garantiert ist.
Die Returncodes und Meldungen sind nur für S-Prozeduren garantiert, nicht aber für Nicht-S-Prozeduren oder Stapelaufträge.
Die folgenden Kommandos werden teilweise oder sogar ganz während der Voranalyse einer S-Prozedur überprüft. Jeder während dieser Voranalyse auftretende Fehler ist ein Fehler im Kommando während der Prozedurvorbereitung, und das Kommando wird nicht ausgeführt. Darum sind die Fehlermeldungen, die tatsächlich während der Ausführung des Kommandos auftauchen, sehr begrenzt. Wenn eines dieser Kommandos durch Ausdrucksersetzung erzeugt wird, tritt ein Kontextfehler auf. Die Kommandos sind:
BEGIN-BLOCK
BEGIN-PARAMETER-DECLARATION
CYCLE
DECLARE-PARAMETER
ELSE
ELSE-IF
END-BLOCK
END-FOR
END-IF
END-PARAMETER-DECLARATION
END-WHILEEXIT-BLOCK
FOR
GOTO
IF
IF-BLOCK-ERROR
IF-CMD-ERROR
INCLUDE-BLOCK
REPEAT
SET-PROCEDURE-OPTIONS
UNTIL
WHILEWenn ein Fehler während der Ausführung eines Kommandos auftritt, das einen Block einleitet, dann kann dieser Fehler nur in einem IF-BLOCK-ERROR-Block bearbeitet werden; und zwar nach dem Ende des Blocks, der durch das fehlerhafte Kommando gestartet wurde.
Die Voreinstellung ist CMD0001 für den Maincode und jeweils 0 für den Subcode1 und Subcode2
Die allgemeinen Returncodes (d. h. Returncodes, die bei jedem Kommando auftreten können) sind:
(SC2) | SC1 | Maincode | Bedeutung 1) |
0 | CMD0001 | Ohne Fehler | |
1 | CMD0202 | Syntaxfehler | |
3 | CMD2203 | Falsche Syntaxdatei | |
32 | CMD0221 | Systemfehler (interner Fehler) | |
130 | SDP0099 | Kein Adressraum mehr verfügbar |
1) Enthält die Tabelle auch garantierte Meldungen, wird die Bedeutungsspalte mit „/ garantierte Meldungen“ ergänzt.
Bei allen Kommandos, Anweisungen und Datensätzen, in denen eine Ausdrucksersetzung stattfindet, können die folgenden Returncodes auftreten, wenn bei der Ausdrucksersetzung Fehler passieren:
(SC2) | SC1 | Maincode | Bedeutung |
1 | SDP0140 | Syntaxfehler während der Ersetzung | |
64 | SDP0141 | Semantikfehler während der Ersetzung |
Bei allen Datenzeilen in falschem Kontext kann folgender Returncode auftreten:
(SC2) | SC1 | Maincode | Bedeutung |
64 | SDP0091 | Semantikfehler |
Bei allen Anweisungen in falschem Kontext kann folgender Returncode auftreten:
(SC2) | SC1 | Maincode | Bedeutung |
64 | SDP0091 | Semantikfehler |