Preface
Purpose
Audience
Organization
Using ABL documentation
References to ABL compiler and run-time features
References to ABL data types
Typographical conventions
Examples of syntax descriptions
Long syntax descriptions split across lines
Complex syntax descriptions with both required and optional elements
Example procedures
OpenEdge messages
Obtaining more information about OpenEdge messages
Introduction to Condition Handling
How to use this manual
New ABL users
ABL users familiar with traditional error handling
ABL users interested in structured error handling
Conditions
ERROR
ENDKEY
STOP
QUIT
Traditional error handling
Default error handling
Changing block error handling
Suppressing the ERROR condition
Custom error handling
Application error handling
Conclusion
Structured error handling
What is structured error handling?
What is ABL structured error handling?
Conclusion
ABL Block Essentials
Block types
Basic blocks
End blocks
Routine-level blocks
Class block
Block summary
Understanding the UNDO concept
Branching options
The UNDO statement
Traditional Error Handling
Statement errors
Statement behavior versus block behavior
Understanding OpenEdge messages
Progress messages (promsgs) file
Specifying error handling behavior
Using labels
Suppressing errors
Providing custom error handling
Testing for statement errors
Testing for built-in method warnings
Undoing work
Raising the ERROR condition
User defined functions
STOP and QUIT Condition Handling
STOP condition handling
Default handling
Example: default handling for lost database connections
Raising the STOP condition
Overriding default handling
Raising a timed STOP condition
QUIT condition handling
Default handling
Raising the QUIT condition
Overriding default handling
Using Structured Error Handling
Comparison to traditional error handling
Additional language features
Structured error handling tasks
Next steps
Using ABL Error Classes
Progress.Lang.Error interface
Throwing class-based error objects from an AppServer to an ABL client
Progress.Lang.ProError class
Progress.Lang.SysError class
Progress.Lang.SoapFaultError class
Progress.Lang.AppError class
Properties and methods
Constructors
Example
Enabling stack tracing with error objects
Handling Errors with CATCH Blocks
Introduction
CATCH statement syntax
Blocks that support CATCH blocks
UNDO scope and relationship to a CATCH block
Buffer scope within a CATCH block
Flow-of-control statements in a CATCH block
CATCH blocks within CATCH blocks
System error message suppression with CATCH
Handling errors from built-in ABL methods
Raising errors with THROW
Propagating errors up the stack
THROW with error objects
THROW compared with RETURN ERROR
THROW as a default for blocks
BLOCK-LEVEL ON ERROR UNDO, THROW statement
Example
ROUTINE-LEVEL ON ERROR UNDO, THROW statement
-undothrow n startup parameter
Determining error-handling characteristics of r-code
UNDO-THROW-SCOPE attribute
XREF and XREF-XML output
THROW with user-defined functions
Throwing system errors
Throwing application errors
Using FINALLY End Blocks
Introduction
Syntax
Behavior
Execution of a FINALLY block
Transaction scope in a FINALLY block
Buffer scope in a FINALLY block
Flow-of-control in a FINALLY block
STOP or QUIT conditions with FINALLY blocks
Examples
Example 1
Example 2
Example 3
Preface
Example 3