Ejemplo Validación con Enterprise Library en aplicación Windows (parte II)

 

Hola a tod@s,

En el siguiente artículo pretendo completar el ejemplo del artículo anterior donde os expliqué (y dejé código fuente de ejemplo) como implementar las validaciones de las enterprise library de Microsoft para poder validar, por ejemplo, propiedades de una clase. Ahora lo quiero completar explicando como podemos definir las validaciones desde el App.Config de tal forma que si cambian no tengamos que volver a recompilar la solución, simplemente modificando el XML del archivo de configuración nos baste, ¿a que es guapísimo?

Los pasos que he seguido son:

1º. Agregar una nuevo proyecto de librerías de clases a la solución que tenía. Lo he llamado Prueba.
2º. Al proyecto prueba le he añadido una clase que he llamado NewEmployee, y le he definido las mismas propiedades que la clase Employee, pero sin añadirle validaciones.

3º. He compilado el nuevo proyecto, y lo he referenciado al primero ELValidation.
4º. Ahora con boton derecho sobre el App.Config pulsamos en "Edit Enterprise Library Configuration"

5º. Nos aparece el App.Config editado de la siguiente forma.

6º. Con botón derecho sobre la ruta completa del App.Config podemos agregar nuevos elementos de los application Block. Para el ejemplo que estamos haciendo, un Validation Application Block.

Cuando aparece desactivado el menú, es porque ya lo tenemos agregado en el App.Config, como podéis observar en el dibujo.

7º. Ahora con botón derecho sobre "Validation Application Block" agregamos un nuevo Type. Como podréis observar nos salen un montón de tipos excepto el que nos interesa que es nuestro proyecto Prueba. Para eso hay que pulsar en "Load an Assembly", y buscamos nuestro Assembly "Prueba"

 

8º. Ahora podemos elegir "Prueba" como nuestro Type. Os aviso de que cuando se carga un nuevo Assembly, luego el resto de Assemblies que había se expanden y es un poco costoso encontrar el que queremos. Con paciencia vamos contrayendo los assemblies que no nos interesan hasta que llegamos al de nuestro ejemplo, en este caso el Assembly "Prueba" tiene un NameSpace "Prueba" y dentro de él la clase "NewEmployee" que queremos validar.

9º. Una vez que tenemos en la edición del App.Config la clase que queremos validar con botón derecho sobre ella elegimos nuevo "RuleSet", le podemos cambiar el nombre a lo que queremos. Ahora con botón derecho sobre el conjunto de reglas elegimos nuevo "Choose Members", nos aparece una nueva ventana con todas las propiedades y métodos de la clase, si pinchamos sobre el check de Properties nos selecciona todas.

10º. Ahora con botón derecho sobre cada propiedad podemos ir añadiendo validadores, o carpetas de validadores "and" o "or" para poner varias condiciones a la vez. Como muestro en las siguientes imágenes, podemos añadir validadores de no nulidad, de longitud de cadena, expresiones regulares, de fechas y customizados.


En esta imagen he añadido a cada propiedad dos validadores, uno de no nulidad y otro de cadena, fecha, expresion regular o customizado según el caso, excepto para la propiedad LastName que solo he dejado una única validación de cadena. Es lo mismo que tenía en el artículo anterior mediante código para la clase Employee.


Como vemos en al imagen, el valor de no nulidad es bastante sencillito, le podemos nombrar como queramos, y para mostrar el texto cuando se produce la excepción de validación, lo podemos hacer mediante la propiedad MessageTemplate si no vamos a tener multi idioma, o con un fichero de recursos, en mi caso como quiero multi idioma lo he hecho con el fichero de recursos, simplemente hay que especificar el nombre de la cadena del fichero de recursos de la que extrae el mensaje gracias a la propiedad MessageTemplateResourceName, y donde se encuentra el fichero de recursos gracias a la propiedad MessageTemplateResourceTypeName, en este caso es "ELValidation.Resource1, ElValidation", es decir, "NameSpace.Clase, NameSpace". El Visual Studio también nos permite encontrar el fichero de recursos pulsando en cuando nos posicionamos en la propiedad, sería encontrar el Assembly donde está y seleccionarlo.


Para los validadores de cadena, simplemente es poner el valor menor y el máximo teniendo en cuenta si queremos que se validen incluso esos valores mediante las propiedades LowerBoundType y UpperBoundType respectivamente. El mensaje a mostrar funciona exactamente en todos los validadores de la misma manera que lo que he explicado en el validador no nulo.


Lo mismo para las fechas, podemos elegir un valor mínimo y uno máximo, decidir si queremos que sea el año, el mes, el día o la fecha entera la que se validad.


También podemos validar mediante expresiones regulares, e incluso tener un fichero de recursos con el patrón a seguir.

 
También podemos crearnos nuestros propios validadores. A esto tengo que comentar que he tenido que modificar ligeramente la clase NifValidator para que me funcione con respecto a lo que tengo en el artículo anterior.
He modificado el primer construtor de la clase NifValidator para que quede:
public NifValidator(NameValueCollection attributes)
            : base(null, null)
        {
        }

También he tenido que modificar la clase NifValidatorAttribute cambiando la llamada al constructor de NifValidator en el método DoCreateValidator quedando:
protected override Validator DoCreateValidator(Type targetType)
        {
            return new NifValidator(null, null);
        }

11º. Ahora solo nos queda modificar el ValidatorProvider del formulario Form1 para que mire en el App.Config

También he modificado el evento Load del formulario para crearme un objeto de tipo NewEmployee, que sus propiedades se rellenen con lo que inserto en las cajas de texto y ya estaría.

           NewEmployee otroEmpleado = new NewEmployee(); //Como variable de clase

            //Esta parte estaría en el Load del formulario
            otroEmpleado.Code = txtCode.Text;
            otroEmpleado.Nif = txtNIF.Text;
            otroEmpleado.FirstName = txtFirstName.Text;
            otroEmpleado.LastName = txtLastName.Text;
            otroEmpleado.DateOfBirth = dtpDateOfBirth.Value;
            otroEmpleado.Email = txtEmail.Text;

           //Este código iría en el botón de validar
           if (otroEmpleado != null)
            {
                vpEmployee.Enabled = true;
                this.ValidateChildren();
            }

Al final el formulario tiene que quedar así si no se introduce ningún dato y lo hemos validado

Sería un buen ejercicio que a apartir de las fuentes que he dejado en el artículo anterior, el que tenga interés en el tema, intente reproducir la situación que he comentado en este artículo.

Espero que os haya servido.

Saludos.

One Response to Ejemplo Validación con Enterprise Library en aplicación Windows (parte II)

  1. francisco dice:

    por favor como puedo usar el enterprise library para guardar, modificar datos. agradecere su partici[pacion

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 )

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 )

Google+ photo

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

Conectando a %s

A %d blogueros les gusta esto: