Catch
Descripción y ejemplos de la sentencia CATCH ... ENDCATCH para la captura de excepciones.
REPORT ZCATCH.
DATA:
A TYPE I,
B TYPE I,
C TYPE P.
* Dentro de un CATCH-ENDCATCH sólo se puede capturar UNA excepción (la
* que encuentre primero de la lista).
* Cuando se captura una excepción, asigna el SY-SUBRC y sale del bloque
* CATCH-ENDCATCH.
* ARITHMETIC_ERRORS y CONVERSION_ERRORS son las dos clases de excep-
* ciones genéricas (en Java serían las superclases) el resto son subcla-
* ses de ellas dos.
* Si en el CATCH contemplo sólo excepciones individuales puede que no
* capture el error. Si pongo las dos excepciones generales siempre cap-
* turaré el error pero perderé el detalle. Una solución sería poner las
* dos excepciones generales al final de la lista por si no encontrara la
* excepción individual que encuentre la general, evitando así el DUMP.
CATCH SYSTEM-EXCEPTIONS " Excepciones individuales
BCD_ZERODIVIDE = 1
BCD_OVERFLOW = 10
COMPUTE_LOG_ERROR = 2
ADDF_INT_OVERFLOW = 3
" Excepciones genéricas
ARITHMETIC_ERRORS = 4
CONVERSION_ERRORS = 5.
" La excepción 'BCD_ZERODIVIDE' sólo es capturada si el resultado, 'C',
" va a un dato de tipo P.
A = 10. B = 0.
C = A / B. " <--- BCD_ZERODIVIDE (sólo si C es de tipo P)
ENDCATCH.
CATCH SYSTEM-EXCEPTIONS
BCD_OVERFLOW = 10.
A = 99999999999999999999999999999. " <--- BDC_OVERFLOW
ENDCATCH.
Para call functions ver doc en KM sobre EXCEPTIONS ERROR_MESSAGE = 1.