martes, 8 de diciembre de 2009

Como evitar el mensaje de confirmación de cierre

En algunos casos, necesitamos que los formularios de CRM se cierren sin confirmación mediante la "X" del explorador, a pesar de que se hayan modificado atributos y no se haya guardado.
Como saben, es una funcionalidad estándar del CRM el avisarte con un mensaje de confirmación de si está seguro que quiere cerrar la ventana y perder los datos no guardados.
Para esto creo que es necesario comentar un poco como funciona "internamente" el javascript del formulario del CRM.
En primer lugar lo que hace es que en el evento "onbeforeunload" del fomulario, verifica si el formulario esta "sucio" (crmForm.IsDirty).
Esa función lo que hace es verificar si alguno de los atributos del formulario está "sucio" (recorriendo uno por uno), con que uno solo esté sucio, el crmForm.IsDirty devolverá "true".
Para verificar si un atributo está "sucio", simplemente verifica el valor actual de cada uno de los atributos, comparándolos con el valor que tenían al abrir el formulario ("load" del formulario).
Bien, ahora una aclaración en relación con este funcionamiento: SOLO VERIFICA SI SE HAN MODIFICADO ATRIBUTOS QUE ESTÉN "HABILITADOS".
De esta forma, si quisiésemos que el formulario se cierre sin advertencia, lo que deberíamos de hacer, es simplemente deshabilitar todos los atributos antes de que se se ejecute el "onbeforeunload" del CRM.
Para esto lo que hay que hacer es pegar este código en el evento OnLoad del formulario:

window.onbeforeunload = function()
{
var atributos=new Array();
atributos[0]="new_atributo1";
atributos[1]="new_atributo2";
atributos[2]="new_atributo3";
atributos[3]="new_atributo4";

deshabilito(atributos);
}


/************* FUNCIONES Adicionales **************/
function deshabilito(atributos)
{
for (attr in atributos)
{
crmForm.all[atributos[attr]].Disabled=true;
}
}
/*********** FIN FUNCIONES Adicionales **************/

Obviamente que es una modificación no soportada, pero que por ahora, funciona correctamente.
Simplemente lo que hace el código es deshabilitar los atributos que le digamos, antes de verificar si hay algo pendiente de guardar, entonces, cuando luego lo verifique, no habrá nada pendiente de guardar y el formulario se cerrará sin mas.

No hay comentarios:

Publicar un comentario