Implementación de excepciones reanudables

Utilizamos la sentencia RESUME para reanudar un programa inmediatamente después de la sentencia que emitió la excepción en el código fuente.
Debemos satisfacer los siguientes requisitos previos para usar la sentencia RESUME:

  1. La excepción debe interceptarse con la sentencia CATCH en el suplemento

BEFORE UNWIND. Esto garantiza que el contexto de la excepción se mantendrá activo para un posible RESUME. Si el bloque CATCH salió sin sentencia RESUME, el sistema borra el contexto de la excepción después de salir del bloque CATCH.

  1. La excepción deberá emitirse con la variante RAISE RESUMABLE … de la sentencia RAISE EXCEPTION. Esto prepara el bloque de tratamiento de emisiones para RESUME.
  2. Si la excepción se propaga, debe marcarla como reanudable en todos los

niveles de jerarquía al utilizar el suplemento RAISING RESUMABLE ( … ) con el nombre de la clase de excepción entre paréntesis. Esto prepara todos los métodos que propagan la excepción para un posible RESUME.
Consejo:
El programa de control de una excepción determinada verifica, en tiempo de ejecución, si dicha excepción se emitió o propagó como reanudable o no. Todos los objetos de excepción brindan el atributo de instancia pública IS_RESUMABLE, que se fija en ‘X’ o ‘ ‘ por el framework, de acuerdo con el modo en que se emitió y propagó la excepción.
Si reanuda una excepción no reanudable, producirá un error en tiempo de ejecución (clase de excepción CX_SY_ILLEGAL_HANDLER).
Para entender mejor los conceptos, vamos a crear en un programa ejecutable, la clase local LCL_OPERACIONES_BANCO, clase que define en la encapsulación pública el método de instancia TRANSFERENCIA con el parámetro IBAN de tipo STRING como IMPORTING y que puede emitir una excepción reanudable de la clase local de excepción LCX_AUTORIZ_IBAN.
La clase de excepción se tiene que crear heredando de la clase CX_STATIC_CHECK.
En el evento START-OF-SELECTION llamamos al método simulando la emisión de la excepción reanudable para el IBAN = ES95 432 987654321.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *