ON ERR CALL

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 3


ON ERR CALL (Methodenname)

ParameterTypBeschreibung
MethodennameStringAufzurufende Fehlermethode, oder
Leerer String, um Fehlersuche zu stoppen

Beschreibung

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.

ON ERR CALL gilt für den aktuellen Prozess. Sie können pro Prozess nur eine Fehlerverwaltungsmethode zur gleichen Zeit haben, für verschiedene Prozesse jedoch verschiedene Fehlerverwaltungsmethoden.

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. Weitere Informationen zu Fehlercodes finden Sie in den Abschnitten Syntaxfehler oder Fehler der Datenbank. 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.

Die Fehlerverwaltungsmethode sollte Fehler in geeigneter Weise verwalten bzw. dem Benutzer eine Fehlermeldung anzeigen. Fehler werden erzeugt von:

Der 4th Dimension Datenbank-Engine; zum Beispiel, wenn Sichern eines Datensatzes versucht, einen eindeutigen Indexschlüssel zu duplizieren.

Der 4th Dimension Umgebung; zum Beispiel, wenn nicht genügend Speicher vorhanden ist, um ein Array zuzuweisen.

Dem Betriebssystem, auf dem die Datenbank 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 automatisch behoben werden kann.

Tritt ein Fehler in der Fehlerverwaltungsmethode selbst auf, übernimmt 4th Dimension die Fehlerverwaltung. Von daher sollten Sie sicherstellen, daß die Fehlerverwaltungsmethode keinen Fehler erzeugen kann. Sie können in der Fehlerverwaltungsmethode nicht ON ERR CALL verwenden.

Ist eine Methode ON ERR CALL installiert, können Sie eine Methode nicht mit der Tastenkombination alt/Klick unter Windows bzw. Wahltaste/Click auf Macintosh im Schrittmodus durchlaufen. Denn dies generiert den Fehler 1006, der sofort die Methode ON ERR CALL aufruft. Sie können diesen Fehler dagegen durch Aufruf von TRACE prüfen.

Beispiele

1. 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
   

2. Siehe Beispiel im Abschnitt Arrays und Speicher.

3. 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 ELEMENT(asErrorMethod;$vlElem)
      asErrorMethod{$vlElem}:=$1
      ON ERR CALL($1)
   Else 
      ON ERR CALL("")
      $vlElem:=Size of array(asErrorMethod)
      If ($vlElem>0)
         DELETE ELEMENT(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
      ` ...

4. Folgende Fehlerverwaltungsmethode ignoriert Unterbrechungen des Benutzers:

      ` Projektmethode SHOW ONLY ERRORS 
   If (Error#1006)
      ALERT ("Der Fehler "+String(Error)+" trat auf.")
   End if 

Referenz

ABORT, Method called on error.

Anwendung des Befehls

Backup and Restore, Change Current User, Change Password, Edit Access, Protecting against Bad Parameter Counts, User In Group, User Modifiable Forms


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next