✒️ABAP POO - El manejo de excepciones en los Objetos ABAP

ABAP POO El manejo de excepciones en los Objetos ABAP

Manejo de Excepciones.

Excepciones basadas en clases

Una excepción es una situación que surge cuando un programa se ejecuta y durante la cual no es posible continuar el flujo normal del programa. SAP NetWeaver Application Server (SAP NetWeaver AS) S 6.10 presentó un nuevo concepto de excepción de objetos ABAP que existe de manera paralela al concepto existente basado en sy-subrc. Las excepciones y el tratamiento de excepciones se basan ahora en clases. Este nuevo concepto de excepción de objetos ABAP amplió la manera clásica de tratar excepciones con sy-subrc.

Consejo:

Tenga en cuenta que el uso de excepciones basadas en clases no está limitado a contextos orientados a objetos. Las excepciones basadas en objetos pueden emitirse y tratarse en todos los bloques de procesamiento. En particular, todos los errores de tiempo de ejecución interceptables anteriormente pueden tratarse como excepciones basadas en clases. En el nuevo concepto de excepción, esta se representa con un objeto de excepción. Un objeto de excepción es una instancia de una clase de excepción. Los valores de atributo de los objetos de excepción contienen información sobre la situación de error correspondiente. La emisión de una excepción basada en clases significa instanciar una clase de excepción y fijar los atributos. La gestión de una excepción basada en clases implica la evaluación del objeto de excepción y sus valores de atributo. Las excepciones basadas en clases se emiten por parte de la sentencia RAISE EXCEPTION o por parte del entorno de tiempo de ejecución. Intercepta y trata las excepciones basadas en clases con la estructura TRY...CATCH...ENDTRY.

Jerarquía de las clases de excepciones

Puede definir sus propias clases de excepción, pero el sistema ya incluye un rango de clases de excepción predefinidas, particularmente para las excepciones en el entorno del tiempo de ejecución. Las clases de excepción se pueden crear globalmente en el Generador de clases, pero también se pueden definir clases de excepción local dentro de un programa o clase global.Los nombres de las clases de excepción global siempre comienzan con <namespace>CX_. Estas clases de excepción global que utiliza el entorno de tiempo de ejecución comienzan con CX_SY_. Se recomienda comenzar los nombres de las clases de excepción local con LCX_. Todas las clases de excepción se derivan de la clase de excepción CX_ROOT. Por lo tanto, puede acceder genéricamente a cualquier objeto de excepción mediante una variable de referencia REF TO CX_ROOT. Sin embargo, no se permite que una nueva clase de excepción herede directamente de CX_ROOT; en lugar de eso, cualquier clase de excepción nueva se debe derivar de forma directa o indirecta desde una de las subclases CX_ROOT - CX_NO_CHECK, CX_DYNAMIC_CHECK, o CX_STATIC_CHECK A través de esto, todas las clases de excepción se subdividen en tres grupos. Según el grupo al que pertenece una excepción determinada, esta se tratará de manera diferente por la verificación de sintaxis y el entorno de tiempo de ejecución. El grupo predeterminado es CX_STATIC_CHECK, que garantiza una verificación de sintaxis y estabilidad de programa máximos. Utilice los otros grupos solo en casos especiales. El método GET_SOURCE_POSITION devuelve el nombre del programa principal o el programa de Include y también el número de línea del código fuente en el que se ha producido la excepción. El método GET_TEXT devuelve un texto de excepción en forma de un string. Este método no se define directamente en CX-ROOT pero sí en la interfaz IF_MESSAGE, que se implementa con CX-ROOT. Puede tratar una excepción si la sentencia que la emitió se encuentra en una estructura de control TRY-ENDTRY. Trata la excepción mediante la sentencia CATCH en la estructura TRY-ENDTRY. El bloque TRY contiene las sentencias para las que es necesario tratar las excepciones. Un bloque CATCH contiene el programa de control de excepciones que se ejecuta si una excepción especificada se ha producido en el bloque TRY asociado. Como todas las estructuras de control en objetos ABAP, puede anidar las estructuras TRY-ENDTRY hasta cualquier profundidad. Particularmente, los bloques TRY, CATCH y CLEANUP pueden contener estructuras TRY-ENDTRY completas. Especifique cualquier número de clases de excepción para la sentencia CATCH. De esta manera, se define un programa de control de excepciones para todas estas clases de excepción y sus subclases. Si se produce una excepción, el sistema busca la sentencia CATCH coincidente en la estructura TRY-ENDTRY que rodea inmediatamente a la sentencia. Busca en los bloques CATCH la clase de excepción relevante o las clases superiores de la jerarquía de herencia. Si se encuentra cualquiera de las clases de excepción, el programa navega directamente al programa de control. Si el sistema no encuentra una sentencia CATCH que coincida, busca gradualmente hacia el exterior en las estructuras TRY-ENDTRY circundantes. Si no puede encontrar un programa de control dentro del mismo procedimiento, el sistema intenta propagar la excepción al programa de llamada. Este proceso se discutirá de manera más detallada posteriormente. Si una estructura TRY-ENDTRY contiene un bloque CLEANUP, este bloque se ejecuta cuando se retira la estructura TRY-ENDTRY, porque el sistema no puede encontrar un controlador dentro de la estructura TRY-ENDTRY, pero sí en una estructura TRY-ENDTRY circundante o en un programa de llamadas.

Para analizar el objeto de excepción en un controlador de excepción, utilice la sentencia CATCH en la forma CATCH ... INTO ... Debe especificar una referencia de objeto tipificada correctamente después del suplemento opcional INTO. La referencia puede ser una referencia a la clase de excepción en sí o a cualquiera de sus clases superiores. Justo antes de que el sistema ejecute el bloque CATCH, se completará esta variable de referencia para apuntar al objeto de excepción que describe la situación de error que se presenta.

Si se supera el ámbito de valores para tipos de datos en el cálculo, el sistema de tiempo de ejecución emitirá la excepción CX_SY_ARITHMETIC_OVERFLOW. Esta excepción se trata en el bloque CATCH implementado. La referencia a la instancia adecuada se almacena en el objeto de datos GO_EXC del ejemplo. El programa de control puede acceder al texto de excepción de la instancia utilizando el método funcional GET_TEXT. El texto de excepción se almacena en el objeto de datos GV_TEXT con el tipo STRING, y después se visualiza en forma de mensaje de información.

Puede acceder cualquier otro componente público del objeto de excepción durante el tratamiento de excepciones de acuerdo con el tipo estático de la variable de referencia. En el ejemplo anterior, la variable de referencia se indica como REF TO CX_ROOT, que restringe el acceso a aquellos componentes definidos en CX_ROOT. Para acceder a componentes más específicos del objeto de excepción, necesita un tipo más específico para el tipo de variable de referencia. También puede utilizar la clase superior CX_SY_ARITHMETIC_ERROR y la clase superior CX_DYNAMIC_CHECK para acceder a los componentes específicos del objeto de excepción.


Sobre el autor

Publicación académica de Enrique Horacio Lugo Lander, en su ámbito de estudios para el Máster ABAP POO.

SAP SemiSenior

Enrique Horacio Lugo Lander

Profesión: Tsu en Informática - Argentina - Legajo: GB93C

✒️Autor de: 30 Publicaciones Académicas

🎓Egresado del módulo:

Certificación Académica de Enrique Lugo

 

:: Al igual que Enrique ¿Usted está dispuesto a aprender ABAP POO?

El lunes 25 Octubre 2021 comenzamos el 🎓Máster ABAP POO.
Juntos para realizar sus más grandes desafíos!

 Cargando presentación, aguarde unos instantes...

 

 

+Recursos Gratuitos en CVOSOFT:

¡Lo importante es aprender!, por eso en CVOSOFT la comunidad SAP más grande de habla hispana, ponemos a su alcance los siguientes recursos abiertos libres y gratuitos:

Buscador de Publicaciones:

 

 

Consultas y Soporte

👋Hola! Estamos listos para ayudarle con el soporte que su carrera merece.

Acceda sección contacto y seleccione canal de comunicación más cómodo para usted.

🤝Aguardamos su mensaje, ¡Éxitos!

 


 

👉Que las empresas tomen en serio sus estudios es muy importante para que su inversión educativa tenga sentido.
Las empresas líderes de United States y del Mundo confían a CVOSOFT su recurso más valioso, la formación de su gente.

¿Quieres conocerlas?