4D v16.3

ON ERR CALL

Home

 
4D v16.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 FehlerMethode an. Sie wird jedes Mal 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.

Hinweise:

  • Bei Verwendung von Komponenten gilt dieser Befehl nur für die aktuelle Datenbank. Erzeugt eine Komponente einen Fehler, wird FehlerMethode nicht in der Host-Datenbank aufgerufen.
  • Wird ON ERR CALL von einem Prozess aufgerufen, der preemptive ausgeführt werden soll (in 64-bit kompilierter Modus), prüft der Compiler, ob FehlerMethode thread-safe ist und gibt Fehler zurück, wenn sie nicht mit dem preemptive Modus kompatibel ist. Weitere Informationen finden Sie im Abschnitt Preemptive 4D Prozesse.

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:

  • 4D Datenbank-Engine; zum Beispiel, wenn beim Sichern eines Datensatzes eine Trigger Regel missachtet wird.
  • 4D Umgebung; zum Beispiel, wenn nicht genügend Speicher vorhanden ist, um ein Array zuzuweisen.
  • 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.

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 Prozess Array 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_errors_only
 If(Error#1006) //Dies ist keine Benutzerunterbrechung
    ALERT("Der Fehler "+String(Error)+" ist aufgetreten. Der betreffende Code ist: \""+Error formula+"\"")
 End if



Siehe auch 

ABORT
GET LAST ERROR STACK
Method called on error
Systemvariablen

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Unterbrechungen
Nummer: 155

This command can be run in preemptive processes

 
GESCHICHTE 

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

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)