Try-Catch Statement

    Since CloverDX 5.6, you may use the try-catch statement to handle runtime errors.

    The execution starts by first executing the try block. Then there is a choice:

    • If the try block completes normally,then no further action is taken, the catch block is skippedand the whole try-catch statement completes normally.

    • If the code inside the try block throws an exception,the execution jumps to the beginning of the respective catch block.It is up to you how you handle the exception there.For example, you can execute some alternative code to work around the problem that caused the exception.Or you can throw a custom error using the raiseError() function. Or you can just log the exception and have the execution complete normally.Some details about the exception can be accessed via the CTLException data structure.

    For every try block, there can be only one catch block, because there is just one type of exception: CTLException. Also, there is no finally block in CTL.

    try-catch statements can be nested.

    Example 86. Try-Catch Statement
    integer a = 123;
    integer b = 0;
    integer c;
    try {
        c = a / b; // throws ArithmeticException
        printLog(info, c); // skipped
    } catch (CTLException ex) {
        c = -1; // workaround: set the variable to -1 to indicate error
        printLog(warn, ex); // log a warning

    CTLException is actually a data record with the following fields:

    sourceRow: integer

    the row of the CTL source code where the exception occurred

    sourceColumn: integer

    the column of the CTL source code where the exception occurred

    message: string

    the error message of the innermost exception - the original cause of the failure

    cause: string

    the type of the innermost exception, e.g. java.lang.ArithmeticException

    stackTrace: list[string]

    the cascade of function calls that caused the failure

    exceptionTrace: list[string]

    the list of exception types from the outermost to the innermost