Dieser Abschnitt beschreibt die zwei grundlegenden Verfahren, die
Natural für die Behandlung von Anwendungsfehlern bietet: Standardverarbeitung
und anwendungsspezifische Verarbeitung. Darüber hinaus beschreibt es, auf
welche Weise die anwendungsspezifische Verarbeitung von Fehlern ermöglicht
werden kann: durch das Kodieren eines ON ERROR
-Statement-Blocks
innerhalb eines Programmierobjekts oder durch den Einsatz eines separaten
Fehlertransaktionsprogramms.
Schließlich enthält dieser Abschnitt noch eine Übersicht über die Natural-Funktionalität, mit der Sie die Fehlerverarbeitung durch Natural konfigurieren, Informationen über einen Fehler abrufen oder einen Anwendungsfehler verarbeiten oder bereinigen können.
Dieses Dokument behandelt folgende Themen:
Informationen zur Behandlung von Fehlern in einer Natural RPC-Umgebung siehe Handling Errors in the Natural Remote Procedure Call-Dokumentation.
Wenn in einer Natural-Anwendung ein Fehler auftritt, geht Natural standardmäßig folgendermaßen vor:
Natural beendet die Ausführung des zurzeit laufenden Anwendungsobjekts;
Natural gibt eine Fehlermeldung aus;
Natural kehrt zum Kommandoeingabe-Modus zurück.
"Kommandoeingabe-Modus" bedeutet, dass in Abhängigkeit
von Ihrer jeweiligen Natural-Konfiguration das Natural-Hauptmenü, die
NEXT
-Zeile oder ein benutzerdefiniertes Einstiegsmenü erscheinen
kann.
Die angezeigte Fehlermeldung enthält die Natural-Fehlernummer, den zugehörigen Meldungstext sowie das betroffene Natural-Objekt und die Nummer der Zeile, in der der Fehler aufgetreten ist.
Da die Ausführung des Anwendungsobjekts beendet wird, kann der
Status von anhängigen Datenbanktransaktionen von Maßnahmen betroffen sein, die
durch die Einstellungen der Profilparameter ETEOP
und
ETIO
bedingt sind. Falls Natural (infolge der Einstellungen dieser Parameter) kein
END
TRANSACTION
-Statement ausgegeben hat, dann wird bei der
Rückkehr in den Kommandoeingabe-Modus ein BACKOUT TRANSACTION
-Statement
ausgegeben.
Wenn die Standard-Fehlerverarbeitung nicht den Erfordernissen Ihrer Anwendung entspricht, können Sie die Verarbeitung anwendungsspezifisch anpassen. Mögliche Gründe hierfür können beispielsweise sein:
Informationen zum Fehler sollen zwecks weiterer Untersuchung durch den Anwendungsentwickler gespeichert werden.
Die Ausführung der Anwendung soll, falls möglich, nach der Fehlerbehebung fortgesetzt werden.
Es ist eine spezifische Transaktionsbehandlung nötigt.
Da nach Auftreten eines Fehlers die Ausführung des betroffenen
Anwendungsobjekts beendet wird, kann der Status von anhängigen
Datenbanktransaktionen von Maßnahmen betroffen sein, die durch die
Einstellungen der Profilparameter ETEOP
und
ETIO
ausgelöst werden. Deshalb muss die weitere Transaktionsbehandlung (mittels
END TRANSACTION
-
oder BACKOUT
TRANSACTION
-Statement) über die Fehlerverarbeitung der
Anwendung erfolgen.
Um eine anwendungsspezifische Fehlerverarbeitung zu ermöglichen, haben Sie folgende Möglichkeiten:
Sie können innerhalb eines Programmierobjekts einen ON
ERROR
-Statement-Block kodieren.
Sie können ein separates Fehlertransaktionsprogramm verwenden.
Diese Möglichkeiten werden in den folgenden Abschnitten behandelt.
Sie können das ON
ERROR
-Statement verwenden, um zur Ausführungszeit auftretende
Fehler in einer Anwendung an der Stelle abzufangen, an der ein Fehler auftritt.
Aus einem solchen ON ERROR
-Statement-Block heraus kann
die Ausführung der Anwendung auf der aktuellen Ebene oder auf einer
übergeordneten Ebene wieder aufgenommen werden.
Außerdem können Sie ein ON ERROR
-Statement in mehreren
Objekten einer Anwendung angeben, um Fehler, die auf untergeordneten Ebenen
aufgetreten sind, zu verarbeiten. Auf diese Weise können Sie die
Fehlerverarbeitung exakt auf die Erfordernisse Ihrer Anwendung zuschneiden.
ON
ERROR
-Statement-Blocks
Um einen ON ERROR
-Statement-Block zu verlassen, können
Sie eines der folgenden Statements angeben:
Die Ausführung der Anwendung wird auf der aktuellen Ebene wieder aufgenommen.
Es wird davon ausgegangen, dass die Fehlerverarbeitung abgeschlossen ist, und die Ausführung der Anwendung wird auf der übergeordneten Ebene wieder aufgenommen.
Es wird davon ausgegangen, dass die Fehlerverarbeitung
abgeschlossen ist, und das beim FETCH
-Statement angegebene
Programm wird ausgeführt.
Natural stoppt die Ausführung des betroffenen Programms, beendet die Anwendung und kehrt zum Kommandoeingabe-Modus zurück.
Die Ausführung der Natural-Anwendung wird gestoppt, und die Natural-Session wird beendet.
Wird die Ausführung des ON ERROR
-Statement-Blocks
nicht durch eines der oben genannten Statements beendet, dann wird der Fehler
an das Natural-Objekt auf der übergeordneten Ebene durchgereicht, damit er
durch einen dort vorhandenen ON ERROR
-Statement-Block verarbeitet
wird.
Falls keines der Objekte auf einer der übergeordneten Ebenen
einen ON ERROR
-Statement-Block enthält, falls aber ein
Fehlertransaktionsprogramm (wie im folgenden
Abschnitt
beschrieben) angegeben ist, erhält dieses Fehlertransaktionsprogramm die
Kontrolle.
Falls keines der Objekte auf einer der übergeordneten Ebenen
einen ON ERROR
-Statement-Block enthält und falls dort kein
Fehlertransaktionsprogramm angegeben ist, dann greift die
Standard-Fehlerverarbeitung von Natural wie
oben
beschrieben.
Sie können an den folgenden Stellen ein Fehlertransaktionsprogramm angeben:
Im Profilparameter ETA
.
Im Natural Security Library Profile, falls Natural Security installiert ist; siehe Components of a Library Profile in der Natural Security-Dokumentation.
Innerhalb eines Natural-Objekts, indem Sie dort mittels eines
ASSIGN
-,
COMPUTE
- oder
MOVE
-Statements den
Namen des Fehlertransaktionsprogramms der Systemvariablen
*ERROR-TA
als Wert zuordnen.
Wenn Sie während der Natural-Session den Namen eines
Fehlertransaktionsprogramms der Systemvariablen
*ERROR-TA
zuweisen, dann wird durch diese
Zuweisung ein mittels Profilparameter ETA
angegebenes
Fehlertransaktionsprogramm ersetzt. Aber ganz gleich, ob Sie den
Profilparameter ETA
verwenden oder der Systemvariablen
*ERROR-TA
einen Wert zuweisen, die Namen von
Fehlertransaktionsprogramm werden nicht gespeichert und werden von Natural
nicht für die verschiedenen Ebenen der Aufruf-Hierarchie wieder hergestellt.
Darum wird, wenn Sie den Namen des Programms in einem Natural-Objekt der
Systemvariablen *ERROR-TA
zuweisen, dieses
Programm aufgerufen, um jeden Fehler zu verarbeiten, der nach dieser Zuweisung
in der aktuellen Natural-Session auftritt.
Einerseits wird also, wenn Sie ein Fehlertransaktionsprogramm mit
dem Profilparameter ETA
angeben, eine Fehlertransaktion
für die ganze Natural-Session definiert, ohne dass die Notwendigkeit besteht,
innerhalb von Natural-Objekten Einzelzuweisungen vorzunehmen. Anderseits bietet
das Verfahren, ein Programm der Systemvariablen
*ERROR-TA
zuzuweisen, mehr Flexibilität und
gestattet es Ihnen zum Beispiel, in verschiedenen Zweigen der Anwendung
verschiedene Fehlertransaktionsprogramme zu benutzen.
Wenn die Systemvariable *ERROR-TA
zurückgesetzt (leer) wird, dann wird wie
oben beschrieben
Naturals Standard-Fehlerverarbeitung durchgeführt.
Wenn ein Fehlertransaktionsprogramm angegeben ist und ein Anwendungsfehler auftritt, wird die Ausführung der Anwendung beendet. Das angegebene Fehlertransaktionsprogramm erhält dann die Kontrolle, um eine der folgenden Maßnahmen auszuführen:
Analyse des Fehlers
Protokollieren der Fehlerinformationen
Beenden der Natural-Session
Fortsetzen der Anwendungsausführung durch Aufrufen eines
Programms mittels FETCH
-Statement.
Da das Fehlertransaktionsprogramm die Kontrolle so erhält, als wenn es im Kommandoeingabe-Modus eingegeben worden wäre, ist es nicht möglich, die Ausführung der Anwendung in einem der Natural-Objekte, die zum Zeitpunkt des Auftretens des Fehlers aktiv waren, wieder aufzunehmen.
Wenn ein Syntaxfehler auftritt und der Natural-Profilparameter
SYNERR
auf ON
gesetzt ist, erhält das Fehlertransaktionsprogramm auch die
Kontrolle.
Fehlertransaktionsprogramme müssen sich in einer Library befinden, in der Sie zurzeit angemeldet sind, oder in einer aktuellen Steplib Library.
Wenn ein Fehler auftritt, führt Natural ein
STACK TOP
DATA
-Statement aus und legt folgende Informationen oben auf
dem Natural-Stack
ab:
Stack-Daten | Format/Länge | Beschreibung | |
---|---|---|---|
Fehlernummer | N4 | Natural-Fehlernummer.
Anmerkung: |
|
Zeilennummer | N4 | Nummer der Zeile, in
welcher der Fehler aufgetreten ist .
Wenn der Status |
|
Status | A1 | Status-Code: | |
C |
Kommandoverarbeitungsfehler | ||
L |
Logon-Verarbeitungsfehler | ||
O |
Objekt-(Ausführungs-)Zeitfehler | ||
R |
Fehler auf einem Remote Server (in Verbindung mit dem Natural RPC) | ||
S |
Syntaxfehler | ||
Objektname | A8 | Name des Natural-Objekts, in dem der Fehler aufgetreten ist. | |
Programmebene | N2 | Nummer der Programmebene
des Natural-Objekts, auf der der Fehler aufgetreten ist.
Wenn der Natural-Profilparameter
Wenn ein Natural-Laufzeitfehler auftritt und die Nummer
der Programmebene ist größer als |
|
Wenn ein
Natural-Laufzeitfehler auftritt und die Nummer der Programmebene des
Natural-Objekts größer als 99 ist:
|
|||
Programmebene, verbessert | I4 | Aktuelle Nummer der Programmeben (512 maximal). | |
Wenn ein
Natural-Syntaxfehler zur Kompilierungszeit auftritt und der Profilparameter
SYNERR
auf ON gesetzt ist:
|
|||
Fehlerposition | N3 | Position des den Fehler verursachenden Bestandteils in der Source-Zeile | |
Bestandteillänge | N3 | Länge des den Fehler verursachenden Bestandteils. |
Diese Informationen können in einem Fehlertransaktionsprogramm
mittels eines INPUT
-Statements abgefragt werden.
Beispiel:
DEFINE DATA LOCAL 1 #ERROR-NR (N5) 1 #LINE (N4) 1 #STATUS-CODE (A1) 1 #PROGRAM (A8) 1 #LEVEL (N2) 1 #LEVELI4 (I4) 1 #POSITION-IN-LINE (N3) 1 #LENGTH-OF-ERRTOKEN (N3) END-DEFINE IF *DATA > 6 THEN /* SYNERR = ON and a syntax error occurred INPUT #ERROR-NR #LINE #STATUS-CODE #PROGRAM #LEVEL #POSITION-IN-LINE #LENGTH-OF-ERRTOKEN ELSE INPUT /* other error #ERROR-NR #LINE #STATUS-CODE #PROGRAM #LEVEL #LEVELI4 END-IF WRITE #STATUS-CODE * DECIDE ON FIRST VALUE OF STATUS-CODE * ... /* process error * END-DECIDE END
Einige der oben auf dem
Natural-Stack
abgelegten Informationen entsprechen den Inhalten von Systemvariablen, welche
in einem ON
ERROR
-Statement-Block zur Verfügung stehen.
Feldinhalt | Entsprechende Systemvariable im ON ERROR-Statement-Block |
---|---|
Natural-Fehlernummer | *ERROR-NR |
Nummer der Zeile, in welcher der Fehler aufgetreten ist | *ERROR-LINE |
Name des Natural-Objekts, in dem der Fehler aufgetreten ist | *PROGRAM |
Nummer der Programmebene, auf der der Fehler aufgetreten ist | *LEVEL |
Wenn Natural Security installiert ist, gelten zusätzliche Regeln für die Verarbeitung von Fehlern, die beim Anmelden auftreten. Weitere Informationen siehe Transactions in der Natural Security-Dokumentation.
Natural bietet Ihnen umfangreiche Funktionalität, die Sie im Zusammenhang mit der Fehlerverarbeitung verwenden können. Sie können damit
das Verhalten von Natural bei der Fehlerverarbeitung konfigurieren,
Informationen über aufgetretene Fehler abrufen,
Unterstützung bei der Verarbeitung dieser Fehler anfordern,
Unterstützung bei der Bereinigung von Anwendungsfehlern erhalten.
Diese Funktionalität umfasst spezielle:
Folgende Profilparameter beeinflussen das Verhalten von Natural im Fehlerfall:
Profilparameter | Zweck |
---|---|
CPCVERR |
Konvertierungsfehler |
DBGERR |
Automatischer Start des Debuggers bei einem Laufzeitfehler |
ETA |
Fehlertransaktionsprogramm |
ETEOP |
Ausgabe eines END
TRANSACTION -Statements bei einem End of Program
|
ETIO |
Ausgabe eines END
TRANSACTION -Statements bei Terminal-Eingabe/Ausgabe
|
RCFIND |
Handhabung des Response Code 113 beim
FIND -Statement
|
RCGET |
Handhabung des Response Code 113 beim
GET -Statement
|
SYNERR
|
Überwachung von Syntaxfehlern |
Die folgenden anwendungsbezogenen Systemvariablen können verwendet werden, um einen Fehler zu lokalisieren oder um den Namen des Programms zu erhalten bzw. anzugeben, das die Kontrolle im Fehlerfall erhalten soll:
Systemvariable | Inhalt |
---|---|
*ERROR-LINE |
Source-Zeilennummer des Statements, das
den Fehler verursacht hat.
Siehe Beispiel 1. |
*ERROR-NR |
Fehlernummer des Fehlers, der eine
abzuarbeitende ON ERROR -Bedingung verursacht hat.
|
*ERROR-TA |
Name des Programms, das die Kontrolle im
Fehlerfall erhalten soll.
Siehe Beispiel 2. |
*LEVEL |
Nummer der Ebene des Natural-Objekts, auf der der Fehler aufgetreten ist. |
*LIBRARY-ID |
Name der Library, in welcher der Benutzer zurzeit angemeldet ist. |
*PROGRAM |
Name des Natural-Objekts, das zurzeit
ausgeführt wird.
Siehe Beispiel 1. |
... /* ON ERROR IF *ERROR-NR = 3009 THEN WRITE 'LAST TRANSACTION NOT SUCCESSFUL' / 'HIT ENTER TO RESTART PROGRAM' FETCH 'ONEEX1' END-IF WRITE 'ERROR' *ERROR-NR 'OCCURRED IN PROGRAM' *PROGRAM 'AT LINE' *ERROR-LINE FETCH 'MENU' END-ERROR /* ...
... *ERROR-TA := 'ERRORTA1' /* from now on, program ERRORTA1 will be invoked /* to process application errors ... MOVE 'ERRORTA2' TO *ERROR-TA /* change error transaction program to ERRORTA2 ...
Weitere Informationen zu diesen Systemvariablen finden Sie in den entsprechenden Abschnitten der Systemvariablen-Dokumentation.
Das folgende Terminalkommando beeinflusst das Verhalten von Natural im Fehlerfall:
Terminalkommando | Zweck |
---|---|
%E= |
Fehlerbehandlung ein-/ausschalten |
Die folgenden Systemkommandos liefern zusätzliche Informationen über eine Fehlersituation bzw. dienen zum Aufrufen von Utilities zur Fehlerbereinigung bei oder zum Protokollieren von Datenbankaufrufen:
Systemkommando | Zweck |
---|---|
LASTMSG
|
Anzeige von zusätzlichen Informationen zu der zuletzt aufgetretenen Fehlersituation. |
RPCERR
|
Anzeige der letzten Natural-Fehlernummer und -meldung, wenn sie sich auf den Natural RPC bezog. |
TECH
|
Anzeige von technischen und sonstigen Informationen über Ihre Natural-Session, zum Beispiel Informationen über den zuletzt aufgetretenen Fehler. |
TEST |
Ruft den Debugger auf. |
TEST
DBLOG |
Ruft die DBLOG -Utility auf,
die zum Protokollieren von Datenbankaufrufen verwendet wird.
|
Die folgenden Anwendungsprogrammierschnittstellen (APIs) stehen generell zur Verfügung, um zusätzliche Informationen über eine Fehlersituation abzurufen oder um eine Fehlertransaktion einzurichten.
API | Zweck |
---|---|
USR0040N
|
Art des letzten Fehlers abfragen |
USR1016N
|
Fehlerebene bei Copycode zeigen |
USR1037N |
Informationen über Natural
ABEND -Daten
|
USR1041N |
Beispielprogramm für eine
Fehlertransaktion (*ERROR-TA )
|
USR2001N
|
Informationen über letzten Fehler auslesen |
USR2006N
|
Ausführliche Informationen zur Meldung holen |
USR2007N |
Informationen zum Standard-RPC-Server setzen/abrufen |
USR2010N
|
Informationen über Datenbankfehler zeigen |
USR2026N
|
Technische Informationen holen
(TECH )
|
USR2030N
|
Dynamische Fehler-Teile :1:,... lesen |
USR2034N |
System- bzw. Benutzer-Fehlermeldungstext
von FNAT bzw. FUSER auslesen
|
USR3320N
|
Fehler-Kurztext auf FNAT
bzw. FUSER suchen
|
USR4214N
|
Information über Programmebene zeigen |
Weitere Informationen siehe SYSEXT Utility in der Debugger und Dienstprogramme-Dokumentation.
Für SQL-Aufrufe stehen die folgenden Anwendungsprogrammierschnittstellen zur Verfügung:
API | Zweck |
---|---|
NDBERR |
Liefert Diagnose-Informationen über den zuletzt ausgeführten SQL-Aufruf. |
NDBNOERR |
Unterbindet die Fehlerbehandlung durch Natural im Falle von Fehlern, die durch den nächsten SQL-Aufruf verursacht werden. |
Weitere Informationen siehe Interface Subprograms in der Natural for DB2-Dokumentation.