Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
ON ERR CALL
|
ON ERR CALL ( Methodenname {; scope} ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
Methodenname | String |
![]() |
Aufzurufende Fehlermethode, oder Leerer String, um Fehlersuche zu stoppen | |||||
scope | Ganzzahl |
![]() |
Scope for the error method | |||||
Der Befehl ON ERR CALL installiert die Projektmethode, deren Namen Sie in errorMethod übergeben, als die Methode zum Abfangen (Trapping) von Fehlern für den definierten Ausführungskontext im aktuellen Projekt. Diese Projektmethode heißt Fehlerverwaltungsmethode oder Fehlerauffindmethode.
Fehlerverwaltungsmethoden werden pro Projekt installiert: Komponenten und Host-Projekte können ihre eigenen Methoden zur Fehlerbehebung definieren, wobei nur die Methode des Projekts aufgerufen wird, in dem der Fehler aufgetreten ist.
Ist eine Fehlerverwaltungsmethode installiert, ruft 4D die Methode immer auf, wenn während der Ausführung eines 4D Befehls der Programmiersprache ein Fehler auftritt.
ON ERR CALL gilt für den aktuellen Prozess. Sie können pro Prozess immer nur eine Fehlerverwaltungsmethode haben.
Hinweise:
Wollen Sie das Auffinden von Fehlern abbrechen, rufen Sie erneut ON ERR CALL auf und übergeben in FehlerMethode einen leeren String.
Den Fehlercode erhalten Sie mit Hilfe der Systemvariablen Error. Die Fehlerliste finden Sie im Kapitel Fehlermeldungen, siehe zum Beispiel Abschnitt Syntaxfehler (1 -> 81). Der Wert der Systemvariablen Error ist nur in der Fehlerverwaltungsmethode signifikant; benötigen Sie den Fehlercode in der Methode, die den Fehler hervorgerufen hat, kopieren Sie Error in Ihre eigene Prozessvariable. Sie können auch auf die Systemvariablen Error method, Error line und Error formula zugreifen, die jeweils den Namen der Methode, die Zeilennummer und den Text der Formel enthalten, wo der Fehler auftritt (siehe Error, Error method, Error line).
Mit dem Befehl GET LAST ERROR STACK erhalten Sie die Fehlersequenz (z.B. den Fehlerstapel), die zur Unterbrechung geführt hat.
Die Fehlerverwaltungsmethode sollte Fehler in geeigneter Weise verwalten bzw. dem Benutzer eine Fehlermeldung anzeigen. Fehler können beim Bearbeiten in folgenden Bereichen erzeugt werden:
Der Befehl ABORT kann zum Beenden verwendet werden. Ohne diesen Befehl in der Fehlerverwaltung kehrt 4D zur unterbrochenen Methode zurück und führt sie weiter aus. Verwenden Sie ABORT, wenn ein Fehler nicht behoben werden kann.
Tritt ein Fehler in der Fehlerverwaltungsmethode selbst auf, übernimmt 4D die Fehlerverwaltung. Von daher sollten Sie sicherstellen, dass die Fehlerverwaltungsmethode keinen Fehler erzeugen kann. Außerdem können Sie ON ERR CALL nicht innerhalb der Fehlerverwaltungsmethode verwenden.
You want to define a global error handler, for example in the On Startup database method:
ON ERR CALL("myGlobalErrorHandler";ek global)
Folgende Projektmethode versucht, ein Dokument zu erstellen, dessen Name als Parameter empfangen wird. Kann das Dokument nicht erstellt werden, gibt die Projektmethode den Wert 0 (Null) oder den Fehlercode zurück:
` Projektmethode Create doc
` Create doc ( String ; Zeiger ) -> Lange Ganzzahl
` Create doc ( DocName ; ->DocRef ) -> Ergebnis des Fehlercode
gError:=0
ON ERR CALL("IO ERROR HANDLER")
$2->:=Create document($1)
ON ERR CALL("")
$0:=gError
Die Projektmethode IO ERROR HANDLER lautet:
` Projektmethode IO ERROR HANDLER
gError:=Error ` Kopiere den Fehlercode in die Prozessvariable gError
Beachten Sie den Einsatz der Prozessvariablen gError, um das Ergebnis innerhalb der aktuell ausführenden Methode zu erhalten. Mit diesen Methoden in Ihrer Datenbank können Sie schreiben:
` ...
C_TIME(vhDocRef)
$vlErrCode:=Create doc($vsDocumentName;->vhDocRef)
If($vlErrCode=0)
`...
CLOSE DOCUMENT($vlErrCode)
Else
ALERT("Das Dokument konnte nicht erstellt werden, I/O Fehler "+String($vlErrCode))
End if
Beim Integrieren einer komplexen Reihe an Operationen können Sie mehrere Unterroutinen haben, die unterschiedliche Fehlerverwaltungsmethoden benötigen. Da pro Prozess jeweils nur eine Fehlerverwaltungsmethode ausführbar ist, gibt es zwei Möglichkeiten:
Sie müssen das Array gleich zu Beginn der Prozessausführung initialisieren:
\\ Vergessen Sie nicht, das Array zu Beginn der Prozessmethode zu initialisieren(die Projektmethode, die den Prozess aktiviert)
ARRAY STRING(63;asErrorMethod;0)
Hier die Methode ON ERROR CALL:
` Projektmethode ON ERROR CALL
` ON ERROR CALL { ( String ) }
` ON ERROR CALL { ( Methodenname ) }
C_STRING(63;$1;$ErrorMethod)
C_LONGINT($vlElem)
If(Count parameters>0)
$ErrorMethod:=$1
Else
$ErrorMethod:=""
End if
If($ErrorMethod#"")
C_LONGINT(gError)
gError:=0
$vlElem:=1+Size of array(asErrorMethod)
INSERT IN ARRAY(asErrorMethod;$vlElem)
asErrorMethod{$vlElem}:=$1
ON ERR CALL($1)
Else
ON ERR CALL("")
$vlElem:=Size of array(asErrorMethod)
If($vlElem>0)
DELETE FROM ARRAY(asErrorMethod;$vlElem)
If($vlElem>1)
ON ERR CALL(asErrorMethod{$vlElem-1})
End if
End if
End if
Nun können Sie sie folgendermaßen aufrufen:
gError:=0
ON ERROR CALL("I/O ERRORS") ` Installiert die Fehlermethode IO ERRORS
` ...
ON ERROR CALL("ALL ERRORS") ` Installiert die Fehlermethode ALL ERRORS
` ...
ON ERROR CALL ` Entfernt die Fehlermethode ALL ERRORS und installiert erneut IO ERRORS
` ...
ON ERROR CALL ` Entfernt die Fehlermethode IO ERRORS
` ...
Folgende Fehlerverwaltungsmethode ignoriert Unterbrechungen des Benutzers:
//Projektmethode Show_errors_only
If(Error#1006) //Dies ist keine Benutzerunterbrechung
ALERT("Der Fehler "+String(Error)+" ist aufgetreten. Der betreffende Code ist: \""+Error formula+"\"")
End if
this is a test
ABORT
Error Handler
GET LAST ERROR STACK
Last errors
Method called on error
Systemvariablen
Produkt: 4D
Thema: Unterbrechungen
Nummer:
155
Erstellt: < 4D v6
Geändert: 4D v12
Geändert: 4D v15 R5
Geändert: 4D v19 R8
4D Programmiersprache ( 4D v20 R7)