Error()

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 8. Juli 2013, 14:38 Uhr von Georg (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Allgemeines

Die Funktion Error() liefert ein Objekt der Error-Klasse zurück.

Weshalb benötigt ein Programmierer ein Error-Objekt?

Es ist im ersten Schritt davon auszugehen, dass Alaska selbst beim Auftreten entsprechender Fehler während der Programmlaufzeit auf diesem Wege ein Error-Objekt erzeugt und mit den erforderlichen Informationen beschickt.

Für einen Programmierer kann es sinnvoll sein, in einer entsprechenden Situation ein "eigenes" Error-Objekt zu erzeugen und danach den Standard-Error-Handler aufzurufen.

Wenn z.B. eine angepasste ErrorSys.prg verwendet wird, die ein erweitertes Logging von Fehlern vornimmt, kann auf diesem Weg auch ein Anwendungs-Fehler protokolliert werden.


Syntax

Error():new() => liefert ein neues Error-Objekt, es werden keine Parameter von der Methode :new() erwartet.


Methoden

:new() => <oError> - Die Methode :new() liefert ein neues Error-Objekt zurück. Es kann danach über die Instanzvariablen konfiguriert werden.

:ignoredErrors() => <aErrors> - Die Methode :ignoredErrors() liefert die letzten 16 ignorierten Fehlermeldungen zurück.

Nach dem Aufruf dieser Methode wird die interne Liste gelöscht. Wenn zwischen zwei Aufrufen dieser Methode mehr als 16 ignorierte Fehler aufgetreten sind, werden nur die 16 letzten gemeldet.

:setErrorMode(<nMode>, [<nAction>]) => <nCurrentAction> - Die Methode :setErrorMode() konfiguriert das Verhalten beim Auftreten von Fehlern in verschiedenen Umgebungen. Sie liefert als Ergebnis die aktuelle Einstellung.

Gültige Werte für nMode sind:

  • ERR_MODE_GC - betrifft das Verhalten bei Fehlern im Garbage Collector Thread;
  • ERR_MODE_GUI - betrifft das Verhalten im Event-verarbeitenden Thread

Gültige Werte für nAction sind:

  • ERR_ACTION_FATAL => ein auftretender Fehler für zu einem Abbruch mit XppFatal.log;
  • ERR_ACTION_IGNORE => ein auftretender Fehler wird nach Möglichkeit ignoriert;
  • ERR_ACTION_POPUP => ein auftretender Fehler führt zu einem Pop-Up, das dem Anwender die Möglichkeit einräumt, auf den Fehler zu reagieren


Instanzvariablen

:args (Array, exported) Liste der Argumente, die im Zusammenhang mit dem Auftreten des Fehlers stehen.

:canDefault (logisch, exported) .T. gibt an, dass der Fehler über ein Default-Handling abgefangen werden kann. Es gibt eine Abhängigkeit zu :canSubstitute: wenn :canSubstitute den Wert .T. hat, kann :canDefault nur .F. haben.

:canRetry (logisch, exported) .T. gibt an, dass ein weiterer Versuch gestartet werden kann, die Operation auszuführen (z.B. das Öffnen einer Datei).

:canSubstitute (logisch, exported) .T. gibt an, dass der Error-Handler einen Wert zurückgeben kann, der dann als Ersatz (Substitut) verwendet werden kann. Es gibt eine Abhängigkeit zu :canDefault und :canDefault - :canSubstitute kann nur dann .T. sein, wenn keine der beiden anderen Instanzvariablen den Wert .T. besitzt.

:cargo (undefiniert, exported) Instanzvariable, die dem Programmierer zur Verfügung steht.

:description (Charakter, exported) Text, der den Fehler beschreibt.

:fileName (Charakter, exported) Wenn der Fehler im Rahmen des Öffnens einer Datei aufgetreten ist, enthält diese Instanzvariablen den Namen der betroffenen Datei.

:genCode (numerisch, exported) Enthält bei Laufzeitfehlern aus dem Xbase-Runtime-System den entsprechenden Fehler-Code.

:operation (Charakter, exported) Enthält den Namen der Operation, bei deren Ausführung der Fehler aufgetreten ist.

:osCode (numerisch, exported) Enthält bei Fehlern, die im Zusammenhang mit Betriebssystem-Funktionen aufgetreten sind, den entsprechenden Fehlercode.

:severity (numerisch, exported) Enthält einen Code, der die Schwere des Fehlers identifiziert:

Wert Konstante Kategorie
0 XPP_ES_WHOCARES Information, es liegt kein wirklicher Fehler vor
1 XPP_ES_WARNING Warnung, es liegt kein Fehler vor, es besteht aber die Möglichkeit, dass die Situation in einen Fehler umschlägt
2 XPP_ES_ERROR Fehler, ohne entsprechende Korrektur kann die Operation nicht zu Ende geführt werden
3 XPP_ES_FATAL Abbruch, aufgrund der Fehlerschwere muss die Anwendung beendet werden

:subCode (numerisch, exported) Das Subsystem, in dem der Fehler aufgetreten ist, kann in dieser Instanzvariablen weitere Fehlerinformationen bereitstellen, die sich auf das Subsystem beziehen. Ein Wert von 0 bedeutet, dass keine Subsystem-spezifische Fehlerinformation vorliegt.

:subSystem (Charakter, exported) Diese Instanzvariable enthält den Namen des Subsystems, in dem der Fehler aufgetreten ist.


:thread (numerisch, exported) Der Wert dieser Instanzvariablen entspricht dem Wert von ThreadObject():ThreadID und identifiziert den Thread, in dem der Fehler aufgetreten ist, über die Thread-ID.

:tries (numerisch, exported) Gibt an, wie oft der Fehler aufgetreten ist, bzw. versucht wurde, die fehlerhafte Operation zu wiederholen.


Querverweise

ErrorBlock()

ErrorSys.prg

benötigte DLLs bzw. Include-Dateien

XppRt1.DLL

Error.CH

Anwendungsbeispiele

#INCLUDE "Error.CH"
#INCLUDE "Xbp.CH" 

FUNCTION Main()
  Local oError, bErrorBlock

  bErrorBlock := ErrorBlock()
  oError := Error():new()
  oError:args        := {"Peter", "Paul", bErrorBlock}
  oError:canDefault  := .T.
  oError:canRetry    := .T.
  oError:description := "Benutzer-erzeugter Fehler"
  oError:fileName    := "unknown-file.txt"
  oError:genCode     := 7777
  oError:operation   := "Programm-Start"
  oError:osCode      := 5
  oError:severity    := 17
  oError:subCode     := 3
  oError:subSystem   := "Demo"
  oError:thread      := ThreadObject():ThreadID
  oError:tries       := 0
  Eval(bErrorBlock, oError)
  ConfirmBox(, "Fehlerbehandlung beendet", "Information", XBPMB_OK, XBPMB_INFORMATION)
RETURN (.T.)

In diesem Beispiel wird ein Error-Objekt erzeugt und mit verschiedenen Daten beschickt, u.a. der Option, dass bei diesem Fehler ein erneuter Versuch möglich ist (:canRetry := .T.).

Wird auf die Fehlermeldung mit "Retry" geantwortet, greift die Meldung über ConfirmBox(). Andernfalls endet das Programm mit der Ausführung der Eval()-Funktion in Main().