4D v14.3

ON ERR CALL

Home

 
4D v14.3
ON ERR CALL

ON ERR CALL 


 

ON ERR CALL ( Methodenname ) 
Parameter Typ   Beschreibung
Methodenname  String in Aufzurufende Fehlermethode, oder Leerer String, um Fehlersuche zu stoppen

Der Befehl ON ERR CALL legt eine Unterbrechungsmethode mit dem Namen Methodenname an. Sie wird jedesmal ausgeführt, wenn ein Fehler bei der Ausführung von Befehlen aufgetreten ist. Diese Projektmethode heißt Fehlerverwaltungsmethode oder Fehlerauffindmethode.

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.

Wollen Sie das Auffinden von Fehlern abbrechen, rufen Sie erneut ON ERR CALL auf und übergeben in Methodenname 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 und Error line zugreifen, die jeweils den Namen der Methode und die Zeilennummer enthalten, wo der Fehler auftritt (siehe Error, Error method, Error line).

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 4D Datenbank-Engine; zum Beispiel, wenn beim Sichern eines Datensatzes eine Trigger Regel mißachtet wird.
  • Der 4D Umgebung; zum Beispiel, wenn nicht genügend Speicher vorhanden ist, um ein Array zuzuweisen.
  • Dem Betriebssystem, auf dem die Anwendung läuft; zum Beispiel, die Festplatte ist voll oder Eingabe/Ausgabefehler.

Ist die Unterbrechungsprozedur ausgeführt, kehrt 4D zur unterbrochenen Methode zurück, außer Sie haben in der Unterbrechungsmethode den Befehl ABORT aufgerufen. 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.

ON ERR CALL wird normalerweise in die Datenbankmethode On Startup einer Anwendung gesetzt, um Fehler für diese Anwendung zu verwalten. ON ERR CALL kann auch zu Beginn einer Methode gesetzt werden, um Fehler in dieser Methode zu verwalten.

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

Siehe Beispiel im Abschnitt Arrays und Speicher.

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:

  • Verfolgen Sie die aktuelle Methode, immer wenn Sie ON ERR CALL aufrufen oder
  • Setzen Sie eine Variable Prozessarray ein (in diesem Fall asErrorMethod), um die Fehlerverwaltungsmethoden “zu stapeln”, sowie eine Projektmethode (in diesem Fall ON ERROR CALL, um diese Methoden zu installieren bzw. zu entfernen.

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 ONLY ERRORS
 If(Error#1006)
    ALERT("Der Fehler "+String(Error)+" trat auf.")
 End if

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Unterbrechungen
Nummer: 155

 
GESCHICHTE 

Erstellt: < 4D v6
Geändert: 4D v12

 
SIEHE AUCH 

ABORT
Method called on error
Systemvariablen

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v12.4)
4D Programmiersprache ( 4D v14 R3)
4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)
4D Programmiersprache ( 4D v14 R4)

Gesplittet : ON ERR CALL ( 4D v11 SQL Release 6)