lunes, 2 de julio de 2012

DynamicForm 1.5: Mejorando las validaciones

En algún otro post anterior, expliqué como añadir mensajes de advertencias o errores en el formulario de una entidad. En nuestra librería común, hasta el momento las validaciones muestran los tan horribles “alerts” de javascript.

Me propuse hoy mejorar algo nuestras validaciones, añadiendo mensajes mas “bonitos” e integrados en CRM. Además he añadido algunos tipos mas de campos a validar, de forma que tengamos mas funcionalidad soportada por DynamicForm.

Lo primero es explicar los cambios añadidos hoy :

Formulario: Cuenta
Evento: OnLoad(), OnChange(), OnSave()

Atributos: he añadido dos campos nuevos (address2_line1 y address2_line2). 
Funcionalidad:  Se han añadido dos tipos de campos nuevos a validar (direcciones IP y campos con URL). Además los mensajes de error aparecen ya integrados como mensajes del formulario de CRM.

Todo este ejemplo estará como siempre disponible en Codeplex:

http://elblogdedynamicscrm.codeplex.com/documentation

Lo que he añadido nuevo en el XML son los dos tipos de validaciones “ipaddress” y “url”:


 
 
 
 



Además he modificado las validaciones, para que en vez de mostrar un “alert”, añadan mensajes de CRM en el formulario:



function ValidateField (fieldName, RegEx) 
 {
     var regularExpression = RegEx;
 
     try {
         var control = getControl(fieldName);
      var fieldValue = getValue(fieldName);
   if (fieldValue=="" || fieldValue==null) return true;
         if (regularExpression.test(fieldValue) == false) {
    addNotification ("El campo "+control.getLabel()+" no se encuentra en el formato adecuado.",1);
             return false;
         }
         return true;
     }
     catch (e) {
         alert('Field validation failed with exception ' + e.Message);
         return false;
     }
 
 }

Para las notificaciones he añadido la función de Notificaciones (addNotification):



function  addNotification (message, level) {
        /// The warning level of the message: [1 critial, 2 information, 3 warning]
        var notificationsArea = document.getElementById('crmNotifications');
        if (notificationsArea == null) {
            alert('div not found'); return;
        }
        if (level == 1) {
            //critical  
            notificationsArea.AddNotification('mep1', 1, 'source', message);
        }

        if (level == 2) {
            //Info  
            notificationsArea.AddNotification('mep3', 3, 'source', message);
        }
        if (level == 3) {
            //Warning  
            notificationsArea.AddNotification('mep2', 2, 'source', message);
        }
        if (message == "") {
            notificationsArea.SetNotifications(null, null);
        }
    }


El ejemplo y la solución completa funcionando la he dejado como siempre en CodePlex.



Por último les enseño una imagen de esta nueva modificación en acción:



image



Un saludo y espero les guste!

No hay comentarios:

Publicar un comentario