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

 Hola a tod@s,

Os dejo con la segunda parte del artículo “Ejemplo Validación con Enterprise Library en aplicación Windows”, este también está traído de mi antiguo blog.

Para finalizar con el ejemplo de aplicando validaciones con Enterprise Library, ahora os voy a explicar como implementarlo 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.

1

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”

2

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

3

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.

4

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”

5 
6

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.

7

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.

8

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.

9
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.


10
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 15 cuando nos posicionamos en la propiedad, sería encontrar el Assembly donde está y seleccionarlo.


11
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.


12
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.


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


14 
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

16

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

17

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.

2 comentarios en “Ejemplo Validación con Enterprise Library en aplicación Windows (parte II)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *