Lade...
 

CX_SYSTEM_OBJECT::RegisterErrorNotification

CX_SYSTEM_OBJECT::RegisterErrorNotification

Beschreibung:

Über diese Funktion kann eine Message registriert werden, welche beim Auftreten eines Fehlers (einer Exception) anstelle des Dialogfensters getriggert wird. Somit können Fehlermeldungen zur Laufzeit abgefangen werden, die sonst den Programmfluss unterbrechen würden. Um das Standardverhalten wieder herzustellen (also um die Message wieder abzumelden), wird die Funktion einfach erneut aufgerufen und NULL übergeben.

Zusammen mit der Message werden alle Informationen zur Exception übergeben, die sonst im Meldungsfenster angezeigt werden. D.h. der Stack sieht beim Auftreten der Message folgendermaßen aus:

Position Typ Beschreibung
Top INTEGER Zeilennummer in welcher die Exception geworfen wurde.
Top-1 STRING Datei in welcher die Exception geworfen wurde.
Top-2 INTEGER Zeilennummer in welcher die Exception gefangen wurde.
Top-3 STRING Datei in welcher die Exception gefangen wurde.
Top-4 STRING Zusatzinformationen über die Fehlermeldung.
Top-5 STRING Beschreibung des Fehlers (Report).
Top-6 INTEGER Fehlernummer (Reason-Code).

Beim Auftreten eines Fehlers wird:

  1. eine laufende Transaktion abgebrochen
  2. die laufende Verarbeitung des InstantView-Code abgebrochen, d.h. die Request-Queue wird geleert
  3. Der Stack wird geleert
  4. Der PlugSpace wird geleert
  5. Wartende Waitoninput-Befehle abgebrochen
  6. Alle offenen Fortschrittsfenster werden geschlossen
  7. Die Fehlermeldung wird in die Log-Datei geschrieben
  8. Die Fehlermeldung wird angezeigt, falls keine ErrorNotification registriert ist
  9. Falls eine ErrorNotification registriert ist, wird die ErrorNotification deregistriert und anschließend ausgelöst.
Code-Beispiel:

Das folgende Codebeispiel zeigt die grundlegende Struktur:

...
Msg(ERROR_MESSAGE)
...
(ERROR_MESSAGE) SystemObject Call(RegisterErrorNotification)
...
ERROR_MESSAGE: // Hier kann auf Fehler reagiert werden

Der folgende Code registriert die Fehlermessage wieder am Ende der Fehlerbehandlung:

...
Msg(ERROR_MESSAGE)
...
(ERROR_MESSAGE) SystemObject Call(RegisterErrorNotification)
...
ERROR_MESSAGE: // Hier kann auf Fehler reagiert werden
               "Hier ist ein Fehler aufgetreten" Attention
               // Dieser Code würde einen Fehlerdialog auslösen: NULL Copy(comment)
               (ERROR_MESSAGE) SystemObject Call(RegisterErrorNotification)
 

 

Vor der Verarbeitung der Fehler-Message wird die Fehlermessage deregistriert, das heißt: Wenn während der Verarbeitung der Fehlermessage ein weiterer Fehler auftritt, so wird dieser normal als Fehler in einem Fehler-Dialog angezeigt. Auf diese Art werden ungewollte (Endlos-)schleifen vermieden. Sollen auch während der Fehlerverarbeitung Fehler in InstantView abgefangen werden kann zu Beginn (oder jedem anderen Zeitpunkt in der Fehlerbehandlungsroutine) wiederum RegisterErrorNotification aufgerufen werden:

...
Msg(ERROR_MESSAGE)
...
(ERROR_MESSAGE) SystemObject Call(RegisterErrorNotification)
...
ERROR_MESSAGE: // Hier wird auf den Fehler reagiert
               (ERROR_MESSAGE) SystemObject Call(RegisterErrorNotification)
               NULL Copy(comment) // Dieser Fehler verursacht eine Endlosschleife

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top SystemObject vom SystemObject wird die Methode aufgerufen
  Top-1 INTEGER Message
Stack(Out) Top    
Funktionsaufruf: Call(RegisterErrorNotification)