Ja. Seit Version 11.2 gibt es die BLOCK-LEVEL ON ERROR UNDO, THROW.
-Anweisung, die das Standardverhalten Ihres gesamten Programms ändert. CATCH
gibt es schon länger - seit Version 10.1C.
/* Must be first line of program */
BLOCK-LEVEL ON ERROR UNDO, THROW.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
i = INTEGER("Hello").
CATCH err AS Progress.Lang.Error:
MESSAGE "Error: " err:GetMessage(1)
VIEW-AS ALERT-BOX ERROR.
END.
Ältere Stil Programm mit machen auf Fehler wie Ihr Beispiel aus der Progress KnowledgeBase genommen.
DO ON ERROR UNDO, THROW:
/* The following line raises error (138) which is diverted to a Progress.Lang.SysError object and thrown to the main block. */
FIND Customer 1000.
END.
CATCH eAnyError AS Progress.Lang.Error:
MESSAGE
"Error Number:~t" eAnyError:GetMessageNum(1) "~n"
"Error Text:~t" eAnyError:GetMessage(1)
VIEW-AS ALERT-BOX BUTTONS OK TITLE "Error processing in the CATCH for mainprocedure block".
END CATCH.
komplette Beschreibung der Block-Level-ON ERROR UNDO, WERFEN
Aus dem Handbuch:
Syntax Block-Level-ON ERROR UNDO, WERFEN.
Diese Erklärung betrifft die folgenden Bausteine:
Hauptblock eines externen Verfahrens (.P)
Interne Verfahren
Benutzerdefinierte Funktionen
Methoden einer Klasse
Klassenkonstrukteure
Eigenschaftenaccessoren
ON Blöcke verwendet als Datenbank mit CREATE auslöst, Löschen, Schreiben oder ASSIGN Ereignisse
REPEAT Blöcke
Bausteine
DO TRANSACTION Blöcke
Diese Aussage nicht der Fall ist Auswirkung:
Destruktoren
Fehleranweisungen, die explizit in einzelnen Blöcken ohne Routinenebene codiert sind
ON-Blöcke, die UI-Trigger sind.
Hinweis diese Alternativen zum Block-Level-ON ERROR UNDO, WERFEN Anweisung:
Statt der Anweisung von Hinzufügen von Dateien zu-Source-Code, Sie können die -undothrow 2 Startparameter verwenden, um die Standard- fehler- zu ändern Behandlung auf UNDO, THROW auf jedem Block, der von der BLOCK-LEVEL-Anweisung während der Kompilierung betroffen ist. Weitere Informationen finden Sie unter Startup Command und Parameter Reference.
Die Anweisung ROUTINE-LEVEL ON ERROR UNDO, THROW kann verwendet werden, wenn Sie die Standardfehlerbehandlung nur auf Routinenebene Blöcke ändern möchten. (Sie können den -undothrow 1 Startparameter verwenden, um die Fehlerbehandlung Standards zu ändern auf Routine-Level-Blöcke UNDO, WERFEN während Kompilierung.)
Verdammt, ich bin in 10.1b und 'Blockebene 'wird nicht erkannt. Aber ich behalte diese Antwort für später. Vielen Dank. :) – doydoy44
'THROW' und' CATCH' werden ebenfalls nicht erkannt. :( – doydoy44
Catch als tatsächlich in 10.1C hinzugefügt. Schade. 10.1B ist von 2007, so ein Update sollte berücksichtigt werden. – Jensd