BLOCK-LEVEL ON ERROR UNDO, THROW statement

Use this statement in a procedure (.p) or class (.cls) file to change the default ON ERROR directive to UNDO, THROW for all blocks that have a default error directive associated with them. (A simple DO block, for example, does not have default error handling and is not affected by this statement.). The default ON ERROR directive is either UNDO, LEAVE or UNDO, RETRY, depending on the block type.

The statement must come before any executable or DEFINE statements in a file. However, it can come either before or after a USING statement.

Syntax

BLOCK-LEVEL ON ERROR UNDO, THROW.

This statement affects the following block types:

This statement does not affect:

Note these alternatives to the BLOCK-LEVEL ON ERROR UNDO, THROW statement:

Example

An error propagates from the DO TRANSACTION block to the internal procedure, from the internal procedure up to the main .p file (b-BLOCK-LEVEL-01.p), and finally up to the CATCH block in the calling .p file (b-BLOCK-LEVEL-02.p). An error is raised at each of these levels. At each level the ON ERROR UNDO, THROW directive takes effect.

b-BLOCK-LEVEL-01.p

BLOCK-LEVEL ON ERROR UNDO, THROW.

/* Update first order for a customer shipped by a certain date */
DEFINE INPUT PARAMETER custName AS CHAR.
DEFINE INPUT PARAMETER latestShipDate AS DATE.

RUN updateCustomers.

PROCEDURE updateCustomers:
    DO TRANSACTION:
        FIND customer WHERE customer.NAME = custName.
        FIND order OF customer WHERE shipDate < latestShipDate.
        UPDATE order.
    END.
END.

b-BLOCK-LEVEL-02.p

RUN b-BLOCK-LEVEL-01.p (INPUT cValue, INPUT dDate).

CATCH err AS Progress.Lang.Error:
    MESSAGE "Customer or order not found " err:GetMessage(1)
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.

Notes

See also

ON ENDKEY phrase, ON ERROR phrase, ON QUIT phrase, RETURN statement, RETURN-VALUE function, ROUTINE-LEVEL ON ERROR UNDO, THROW statement, STOP statement, UNDO-THROW-SCOPE attribute