Es sencillo, el problema se presenta cuando tenemos en nuestra aplicacion abap un TRY-CATCH y deseamos conocer el mensaje que devuelve el sistema y no poner un mensaje personalizados en CATCH.
Un ejemplo de la situacion seria la siguiente la siguiente.
DATA: g_ti_marc TYPE HASHED TABLE OF marc WITH UNIQUE KEY matnr.
SELECT *
INTO TABLE g_ti_marc
FROM marc
FOR ALL ENTRIES IN g_ti_mara INTO TABLE g_ti_marc
FROM marc
WHERE matnr EQ g_ti_mara-matnr.
En esta situacion lo mas probable es que el programa haga un dump por indice repetido en una tabla tipo HASHED.
Bien ahora para camputar el error podemos hacerlo controlando con un tipo de error generico como CX_ROOT asi:
Declaramos 2 variables:
DATA: lr_cx_root TYPE REF TO cx_root,
l_c_message TYPE string.
l_c_message TYPE string.
La primera hace referencia a la clase CX_ROOT de la misma clase del error generico y la segunda es una variable donde almacenaremos el mensaje.
TRY.
SELECT *
INTO TABLE g_ti_marc
FROM marc
FOR ALL ENTRIES IN g_ti_mara INTO TABLE g_ti_marc
FROM marc
WHERE matnr EQ g_ti_mara-matnr.
*.Capturamos el error y lo llevamos a la instancia lr_cx_root.
CATCH CX_ROOT INTO lr_cx_root.
*.....Luego extraemos el mensaje de error que arroja el sistema accediendo al metodo *.....if_message~get_longtext( ).
l_c_message = lr_cx_root->if_message~get_longtext( ).
*.....Por ultimo podremos realizar ya lo que queramos con el mensaje de error por ejemplo *.....imprimirlo.
MESSAGE l_c_message TYPE 'E'.
END TRY.
Y listo de esta manera podremos controlar los mensaje de error que nos arroja el sistema cuando los capturamos con TRY-CATCH espero les sea util.
Gracias por esta información, pero me salta una duda: como hago para capturar el ID del mensaje de error, de que forma o con otro método?
ResponderEliminar