lunes, 28 de mayo de 2012

Javascript: Añadiendo notificaciones al formulario

Esta vez voy a publicar un artículo en donde vamos a añadir una funcionalidad que CRM 2011 no dispone, pero que a veces es muy útil teniendo en cuenta que a veces a los usuarios se los debe “Guiar” o añadir información necesaria para la introducción de información en los formulario de CRM.
La descripción del ejemplo de hoy es la siguiente:
Formulario: Cuenta
Evento: OnLoad() y OnChange()
Atributos: para este ejemplo, todos los requeridos y recomendados. 
Funcionalidad: Añade una notificación general de información del formulario, y verifica todos los atributos requeridos o recomendados y añade una alerta si es que están vacíos. Además en el OnChange() se actualiza el mensaje, dependiendo de si se ha introducido o no.
La idea es que en el formulario se enseñen notificaciones de la siguiente manera:
image
El javascript puede descargarse desde la página de Codeplex de EBDDCRM, en donde también iremos añadiendo mas funciones:
http://elblogdedynamicscrm.codeplex.com/documentation
El método principal que debe ser llamado tanto desde el OnLoad() como en el OnChange() es el siguiente:
function Verificaciones()
{
   addNotification ("",1);

   addNotification ("Formulario con la información general de la Cuenta.",2);
   
   var attributes = Xrm.Page.data.entity.attributes.get();
   for (var i in attributes)
    {
        var attribute = attributes[i];

        var requiredLevel = attribute.getRequiredLevel();
        var value="";
  if (attribute.getValue()!=null){value=attribute.getValue()};
  var control=Xrm.Page.getControl(attribute.getName());
  
  switch (requiredLevel)
  {
     case "required":
        if (value=="")
     {
    addNotification ("El campo "+control.getLabel()+" es requerido.",1);
     }
        break;
     case "recommended":
     if (value=="")
     {
    addNotification ("El campo "+control.getLabel()+" es opcional.",3);
     }
        break;
  }
  
    }
}


Lo que hacemos aquí es primero eliminar todas las notificaciones y luego recorrer los atributos del formulario y añadir notificaciones según estén rellenos o no los mismos.


Para hacer las llamadas a añadir notificaciones simplemente se debe llamar a la función “addNotificacion” con el texto y el tipo de notificación (1 crítico, 2 información, 3 advertencia).


El método que añade la notificación es el siguiente:


 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);
        }
    }


Este método se apoya en ciertos métodos de CRM que no están documentados en la SDK y que por lo tanto no están soportados, que hay que tener en cuenta, pero que aporta mucha funcionalidad de cara a los usuarios finales.


Lo bueno de este ejemplo es verlo “en acción”, en donde se puede ver como va cambiando el listado de notificaciones según se van rellenando los valores del formulario.


Espero les sirva.


Un abrazo!

No hay comentarios:

Publicar un comentario