miércoles, 26 de enero de 2011

MyIsValid: GeneXus User Control

Hace un tiempo atrás hice un user control para darle un poco mas de potencia a las aplicaciones generadas. La idea del control es poder validar un valor y hacer determinadas acciones luego de validado, pero mi principal objetivo era el siguiente: validar un campo, por ejemplo validar algo tan simple como que el valor ingresado tenga una determinada cantidad de caracteres, y si dicha validación no satisfactoria mostrar un mensaje de error.

La idea para esto es tener un control que pueda asociarlo a la att/var que quiero validar y luego programar el evento myisvalid asociado, donde pueda escribir la validación que yo desee.

Por lo tanto podríamos tener algo como:

Event Start
   MyIsValidCtrl.AttachedControl =  &myvariable.InternalName
EndEvent

de esta forma asociamos la var/att que queremos validar con el user control. Si se quieren validar muchos campos se debe tener un myisvalid control por cada var/att a validar.

Luego programamos el evento myisvalid asociado a dicho control:

Event MyIsValidCtrl.MyIsValid
  if &myvariable.lenght() < 8
MyIsValidCtrl.PopUpUrl = Error.Link("your variable lenght must to be higher than 8")
MyIsValidCtrl.ShowPopUp = "true"
  else
MyIsValidCtrl.ShowPopUp = "false"
  endif
EndEvent

de esta forma estamos chequeando que la longuitud de la variable &myvariable sea mayor a 8, y en caso que sea menor a 8 vamos a mostrar un error (popup). Para mostrar dicho mensaje de error estamos seteando las propiedades ShowPopUp en true y la propiedad PopUpUrl con la url del webpanel que usaremos para mostrar el mensaje de error, en el ejemplo se llamara al webpanel Error en caso que la longuitud no sea la que esperamos.

Fácil no?

Pero lo mejor del control es que controla donde va a parar el foco luego de cerrar la popup de error, por lo tanto es ideal para los casos donde queremos validar un campo y en caso de error seguir parados en ese campo hasta que se corrija el valor ingresado.

Consideraciones:

- El user control fue pensado para que siempre que se ingrese un valor erróneo en el campo asociado al control el foco vuelva a ese campo luego de mostrar un mensaje de error.

Por tal motivo se utilizó el evento onblur de javascript para asociar al control y no el onchange. Esto ocasiona que el evento MyIsValid se dispare siempre que se pierda el foco del control independientemente de haber ingresado o no un valor en el campo.

- Para que funcione correctamente en Free Style Grids se debe tener el U1 de GXEv1 o superior.

Lo pueden bajar desde el marketplace.

Cualquier cosa me encuentran en mi mail o en @cimasan.

Enjoy!

3 comentarios:

gicasuriaga dijo...

Ale, una consulta , en el isvalid tradicional si mantenes el valor ingresado en el campo no se vuelve a disparar el isvalid() por lo tanto el truco era en el isvalid volver a poner el valor en cero o en blanco para que lo volvieran a ingresar y se volviera a disparar el evento, en este UC funciona igual o sempre se dispara si o si ?

ShowPopUp en true es lo que mantiene el focus en el att/var ?

Gracias por compartir

cimasan dijo...

Gabriel, en el isvalid se dispara cuando cambias el valor, si mantenes el mismo valor no se dispara al salir del campo. Sobre la showpopurl, es la url de la popup con el mensaje de error a mostrar, cuando volves de esa popup se mantiene el foco.

Saludos!

Unknown dijo...

Como lo hago si quiero validar más de una variable o attr.

gracias.