¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Gestão de Exceções no SAP ABAP: Aprenda a utilizar corretamente as classes CX_ROOT e CX_SY_ZERODIVIDE

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

Olá a todos,

Acabei de começar a aprender os Conceitos de Programação de Objetos SAP ABAP e acreditem que li muitos documentos antes de publicar esta pergunta sobre o Tratamento de Exceções.

Em ambos os exemplos, recebo a mensagem Divisão por zero porque CX_ROOT é a superclasse de CX_SY_ZERODIVIDE ...


Minha pergunta

1) Por que sempre escrevemos Catch CX_ROOT into gr_err e por que ser específico com Catch CX_SY_ZERODIVIDE ...?

Acho que sempre escrever Catch CX_ROOT into gr_err para qualquer declaração em TRY e END TRY.

TRY.

-----

-----

-----

CATECH CX_ROOT into gr_err.

gs_msg = gr_err -> get_text ( ) . .

ENDTRY .

write : gs_msg .


Exemplo 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 .

Exemplo 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...

Pode-se usar CX_ROOT para capturar qualquer exceção derivada, como CX_SY_ZERODIVIDE. No entanto, é necessário utilizar CX_SY_ZERODIVIDE e muitas outras classes derivadas para lidar de forma diferente com cada exceção. Isso depende das suas necessidades. Por exemplo, se estiver realizando operações aritméticas, provavelmente terá diferentes possibilidades de exceção (divisão por zero, overflow aritmético)... Você pode simplesmente exibir uma mensagem de erro (nesse caso, a captura de CX_ROOT será suficiente) ou pode realizar um tratamento de erro mais sofisticado, como preencher algum campo com '#DIV POR 0#' ou '#SOBREFLUJO#'...

Espero que isso ajude a resolver sua dúvida.

Além disso, lembre-se de que uma subclasse PODE ser definida como RESUMABLE, embora CX_ROOT não o seja. Portanto, você pode usar a instrução RESUME com algumas exceções derivadas, mas não com CX_ROOT.

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

Às vezes é necessário capturar algo assim:

DADOS :

a TIPO i ,

b TIPO i VALOR 10 .

TENTAR .

a = b / 0 .

CAPTURAR cx_sy_zerodivide EM gr_err .

gs_msg = gr_err -> obter_texto ( ) . .

CAPTURAR cx_sy_systemerror EM gr_err .

"Não queremos fazer algo se esse erro aparecer."

FIM_TENTAR .

escrever : gs_msg .

ao usar cx_root todos os mensagens são tratadas da mesma forma -> obter_texto escreve a string em gs_msg

TENTAR .

a = b / 0 .

CAPTURAR CX_ROOT EM gr_err.

gs_msg = gr_err -> obter_texto ( ) . .

FIM_TENTAR .

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

Obrigado Bernhard...

Poderia ser mais claro... com um exemplo? Estou tentando entender bem os conceitos básicos.

Se você usar a Exceção definida como qualquer classe de Exceção, pode capturá-la especificada como cy_sy_zerodivide ou como cx_root.

Se você fizer o primeiro tipo, pode lidar com cada exceção de forma diferente.

Obrigado antecipadamente

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

Olá Raju,

cx_root é o elemento raiz das classes de exceção.

Todas as outras classes herdam dela.

Se você usar a exceção definida como qualquer classe de exceção, pode capturá-la especificada como cy_sy_zerodivide ou como cx_root.

Se você fizer o primeiro tipo, pode lidar com cada exceção de forma diferente.

Espero que isso te ajude,

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?