¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Manejo de Excepciones en SAP ABAP: Aprende a utilizar correctamente las clases CX_ROOT y CX_SY_ZERODIVIDE

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 119 Vistas
0
Cargando...

Hola a todos,

Acabo de empezar a aprender los Conceptos de Programación de Objetos SAP ABAP y créanme que he leído bastantes documentos antes de publicar esta pregunta sobre el Manejo de Excepciones.

En ambos ejemplos obtengo el mensaje División por cero porque CX_ROOT es la superclase de CX_SY_ZERODIVIDE ...


Mi pregunta

1) ¿Por qué siempre escribimos Catch CX_ROOT into gr_err y por qué ser específico con Catch CX_SY_ZERODIVIDE ...?

Pienso que siempre escribir Catch CX_ROOT into gr_err para cualquier declaración en TRY y END TRY

TRY.

-----

-----

-----

CATECH CX_ROOT into gr_err.

gs_msg = gr_err -> get_text ( ) . .

ENDTRY .

write : gs_msg .


Ejemplo 1)

DATA :

a TYPE i ,

b TYPE i VALUE 10 .

TRY .

a = b / 0 .

CATCH cx_sy_zerodivide INTO gr_err .

gs_msg = gr_err -> get_text ( ) . .

ENDTRY .

write : gs_msg .

Ejemplo 2)

DATA :

a TYPE i ,

b TYPE i VALUE 10 .

TRY .

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Puedes usar CX_ROOT para capturar cualquier excepción derivada, como CX_SY_ZERODIVIDE. Pero debes usar CX_SY_ZERODIVIDE y muchas otras clases derivadas para realizar un tratamiento diferente en cada excepción. Depende de tus necesidades. Por ejemplo, si realizas operaciones aritméticas, probablemente tendrás diferentes posibilidades de excepción (división entre cero, desbordamiento aritmético)... Puedes simplemente mostrar un mensaje de error (en este caso, la captura de CX_ROOT será suficiente) o puedes realizar un tratamiento de error más sofisticado, por ejemplo, llenar algún campo con '#DIV POR 0#' o '#SOBREFLUJO#'...

Espero que esto te ayude a resolver tu pregunta.

Además, recuerda que una subclase PUEDE definirse como RESUMABLE, aunque CX_ROOT no lo esté. Por lo tanto, puedes usar la instrucción RESUME con algunas excepciones derivadas, pero no con CX_ROOT.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

A veces es necesario capturar algo así:

DATOS :

a TIPO i ,

b TIPO i VALOR 10 .

INTENTAR .

a = b / 0 .

CAPTURAR cx_sy_zerodivide EN gr_err .

gs_msg = gr_err -> obtener_texto ( ) . .

CAPTURAR cx_sy_systemerror EN gr_err .

" No queremos hacer algo si aparece este error.

FIN_INTENTAR .

escribir : gs_msg .

al usar cx_root todos los mensajes se manejan de la misma manera -> obtener_texto escribe la cadena en gs_msg

INTENTAR .

a = b / 0 .

CAPTURAR CX_ROOT EN gr_err.

gs_msg = gr_err -> obtener_texto ( ) . .

FIN_INTENTAR .

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias Bernhard...

¿Puedes ser más claro... con un ejemplo? Estoy tratando de entender bien los conceptos básicos.

Si usas la Excepción definida como cualquier clase de Excepción, puedes capturarla especificada como cy_sy_zerodivide o como cx_root.

Si haces el primer tipo, puedes manejar cada excepción de manera diferente.

Gracias de antemano

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Raju,

cx_root es el elemento raíz de las clases de excepción.

Todas las demás clases heredan de ella.

Si usas la excepción definida como cualquier clase de excepción, puedes capturarla especificada como cy_sy_zerodivide o como cx_root.

Si haces el primer tipo, puedes manejar cada excepción de manera diferente.

Espero que te ayude,

Bernhard

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?