Usando try and catch (ABAP)

Cuando realizamos llamados a valores de memoria (vease el caso de trasladar tablas por memoria) o también cuando se hace referencia a un objeto que aún no ha sido creado o inicializado (field-symbol), insertar datos duplicados a la tabla, o hasta el retorno de un valor negativo, muchas veces parte de estos resultados generan un dump y posterior caida de nuestro programa, para poder evitar que el programa se caiga y en su lugar muestre un mensaje, podemos hacer empleo de los comandos TRY AND CATCH.

La estructura del código es la siguiente:

TRY.
    “Lógica que se aplica normalmente.
CATCH CX_ROOT.
    “Lógica a emplear una vez se reconozca el error.
ENDTRY.

*Observación: En la parte del CATCH se puede colocar la excepción del error adecuado si es que se sabe cual es el punto a surgir, pero en caso contrario no se sabe que tipo de excepción puede acontecer, se puede emplear la excepción generica CX_ROOT.

Por ejemplo:

Se van a ingresar registros en una tabla Z, con el siguiente código:

delete from ZLI_PRUEBA1.

data: t_tabla TYPE TABLE OF ZLI_PRUEBA1,
      wa_tabla like line of t_tabla.

wa_tabla-dato = ‘f’.
wa_tabla-beta = ‘0.0196’.
append wa_tabla to t_tabla.

INSERT ZLI_PRUEBA1 from TABLE t_tabla.

wa_tabla-dato = ‘f’.
wa_tabla-beta = ‘0.0196’.
append wa_tabla to t_tabla.

INSERT ZLI_PRUEBA1 from TABLE t_tabla.

WRITE: ‘Grabación terminada’.

 

*Como se puede ver se recrea un caso de duplicidad de datos, al ejecutar el programa ocurre el siguiente error (dump):

28-Ago-2013 04-46-43 p-m-
Si se desea evitar que el programa caiga y muestre dicho error, procederemos a emplear el try and catch, quedando el código de la siguiente manera:

delete from ZLI_PRUEBA1.

data: t_tabla TYPE TABLE OF ZLI_PRUEBA1,
      wa_tabla like line of t_tabla.

TRY.
  wa_tabla-dato = ‘f’.
  wa_tabla-beta = ‘0.0196’.
  append wa_tabla to t_tabla.

  INSERT ZLI_PRUEBA1 from TABLE t_tabla.

  wa_tabla-dato = ‘f’.
  wa_tabla-beta = ‘0.0196’.
  append wa_tabla to t_tabla.

  INSERT ZLI_PRUEBA1 from TABLE t_tabla.
CATCH CX_ROOT.
  MESSAGE ‘Error al actualizar la tabla ZLI_PRUEBA1’ TYPE ‘I’.
ENDTRY.

WRITE: ‘Grabación terminada’.

Una vez que ejecutamos nos aparecerá nuestro mensaje de error (en vez del terrible dump)

28-Ago-2013 04-52-03 p-m-

y posteriormente termina la ejecución del programa.

28-Ago-2013 04-52-14 p-m-

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s