¿Cómo desbloquear un campo de una Dynpro tras un mensaje de error?

Desbloquear campos en Dynpros tras mensajes de error es un tema que me he dado cuenta que es bastante habitual, en ocasiones el manejo de mensajes dentro del flujo de un programa es un componente clave dentro de ABAP; y si este flujo de programa en particular se realiza a través de Dynpros, el no conocer los pequeños detalles pueden ocasionar dolores de cabeza.

Imagina que tenemos una Dynpro, con un campo Sociedad y un campo Fecha.

Supongamos que integramos una validación en la que, si el usuario selecciona una sociedad no existente en el sistema, el programa deba emitir un mensaje de error, impidiéndole al usuario continuar a la siguiente ventana hasta que corrija el error, que en este caso consistiría en seleccionar una Sociedad válida.

Todos pensaríamos en aplicar la siguiente solución:

En el módulo PAI de la Dynpro (Process After Input), creamos un MODULE validar_sociedad.

PAI.

MODULE validar_sociedad.

Dentro de ello, agregamos una validación para comprobar la sociedad ingresada por el usuario (un SELECT SINGLE a la tabla de sociedades T001 será suficiente), y en caso de no existir, emitir un mensaje de error.

MODULE validar_sociedad.

SELECT SINGLE bukrs

INTO p_bukrs

FROM t0001

WHERE bukrs = sociedad.

IF sy-subrc NE 0.

   MESSAGE e208(00) WITH ‘Ingrese sociedad existente’

ENDIF.

ENDMODULE.

Es muy común pensar en dejar la solución hasta aquí, pero cuando probamos el resultado, obtenemos que luego de emitirse el mensaje, efectivamente no podemos avanzar a la siguiente ventana, pero observamos que todos los campos de la Dynpro quedan bloqueados y el usuario no puede corregir su selección.

Aquí nos damos cuenta de que tenemos un problema, y observamos que si intentamos cambiar el tipo de mensaje, no solucionará el problema porque permitiría avanzar de ventana sin corregir el campo erróneo.

Dar un paso atrás para dar dos hacia adelante.

La solución efectiva al problema no la encontraremos dentro del MODULE, sino dando un paso hacia atrás y volviendo al PAI.

Una vez allí, disponemos de dos comandos mágicos: FIELD y CHAIN.

Ejemplo 1: comando FIELD, para desbloquear un único campo dentro de la Dynpro

PAI.

FIELD sociedad MODULE valida_sociedad.

Con esta instrucción, a pesar de la presencia de un mensaje tipo E dentro del MODULE, el campo Sociedad permanecerá desbloqueado, permitiendo al usuario corregir su entrada y continuar adelante, mientras el campo Fecha permanecerá bloqueado.

Ejemplo 2: comando CHAIN, para desbloquear dos o más campos a la vez.

PAI.

CHAIN.

   FIELD: sociedad, fecha.

   MODULE validar_sociedad.

ENDCHAIN.

Con esta instrucción, cuando se produzca el mensaje de error, los campos indicados en la sentencia FIELD (sociedad y fecha en este caso), quedarán desbloqueados, dejando el resto de campos (si los hubiese), bloqueados.

De esta forma puedes controlar todo lo que suceda dentro del flujo de programa en tu Dynpro, ya estás en condiciones de habilitar tantos campos como te interese, según las especificaciones de lo que estes desarrollando.

 ¿Te ha sido de utilidad este artículo? Házmelo saber con tus comentarios, y suscríbete a mi Comunidad para recibir mi curso gratuito “AprendeABAP en 10 lecciones”, además de contenidos exclusivos  sobre el mundo ABAP.

 

Richard Rey

“Programando tu Exito”

Opt In Image
Te has preguntado que se necesita para ser un Consultor de Éxito?
Te gustaría aprender los 7 Pasos para triunfar en tu carrera como Consultor ABAP?

Deja tus datos aquí abajo y formarás parte de mi comunidad exclusiva, además de recibir mi curso de regalo "Los 7 Pasos para ser un Consultor de Éxito".

Mas información AQUÍ.

 

PD: Odio el SPAM. No compartire tus datos con nadie.

Si te gusta, compártelo! ...Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Comentarios