If you use class-based exception handling, you can also catch and handle classic exceptions with exception class CX_CLASSIC_EXCEPTION.
If you use statements RAISE and MESSAGE RAISING, then this always produces a classic exception.
In an RFC call the statement MESSAGE always behaves differently than in a local function call:
For all RFC types with a background processing exception (tRFC/qRFC, bgRFC), messages of the type X, A or E cause an exception of type SYSTEM_FAILURE.
In background processing, messages of type X, A or E in the affected LUWs/units cause a corresponding error status. Messages of type W, S or I are ignored. The corresponding LUWs/units are executed.
The ERROR_MESSAGE addition in EXCEPTIONS block stays in the RFC case without any other effect.
If you use class-based exception handling, ever exception that appears as the result of a MESSAGE statement causes an exception of class CX_REMOTE_APPL_ERROR in the RFC client.