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.
Dieser Abschnitt 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.
| Stack-Daten | 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 |
|---|---|
CC |
Fehlerverarbeitung im Batch-Modus |
CPCVERR |
Codepage-Umsetzungsfehler |
DBGERR |
Automatischer Debugger-Start bei Laufzeitfehler |
DU |
Dump-Erstellung |
DUE |
Dump-Erstellung, fehlerspezifisch |
ETA |
Fehlertransaktionsprogramm |
ETEOP |
Ausgabe eines END TRANSACTION-Statements bei
einem End of Program
|
ETIO |
Ausgabe eines END TRANSACTION-Statements bei
Terminal-Eingabe/Ausgabe
|
MADIO |
Maximale Anzahl der DBMS-Aufrufe zwischen Bildschirm-Ein-/Ausgaben |
MAXCL |
Maximale Anzahl an Programmaufrufen |
RCFIND |
Maßnahme bei Adabas Response Code 113 beim
FIND-Statement
|
RCGET |
Maßnahme bei Adabas Response Code 113 beim
GET-Statement
|
SYNERR
|
Übergabe von Syntaxfehlern an das Fehlertransaktionsprogramm |
ZD |
Division durch Null |
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
|
Gilt nur in einer Natural RPC-Umgebung (Remote Procedure
Call).
Anzeige von Natural-, EntireX Broker- und EntireX RPC-Server-Fehlern, die zuletzt während einer RPC-Sitzung aufgetreten sind. Weitere Informationen siehe Programm RPCERR verwenden im Abschnitt Betrieb einer Natural RPC-Umgebung in der Natural RPC (Remote Procedure Call)-Dokumentation. |
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 |
|---|---|
RPCINFO |
Gilt nur in einer Natural RPC-Umgebung (Remote Procedure
Call).
Dieses Subprogramm ruft Natural-, EntireX Broker- und EntireX RPC-Server-Fehler ab, die zuletzt während einer RPC-Sitzung aufgetreten sind. Weitere Informationen finden Sie unter Subprogramm RPCINFO verwenden in der Natural RPC (Remote Procedure Call)-Dokumentation. |
USR0040N
|
Art des letzten Fehlers abfragen |
USR0622N |
Zähler in ON ERROR-Statement-Block
zurücksetzen.
|
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
|
USR4012N |
Anwendungsfehler beim RPC-Server setzen |
USR4214N
|
Information über Programmebene zeigen |
USR8202N |
Erweiterte Fehlerinformationen zu Fehler NAT3145 holen |
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.