A pesar de esto, en muchos entornos, es posible que esto puede provocar funcionamientos no esperados, por esto primero intentaré explicar como funciona, para luego ver alternativas posibles.
El autosave funciona de la siguiente manera:
Al abrir un formulario de CRM aparece en la parte inferior derecha un disco:
Al modificar cualquiera de los campos del formulario cambia a lo siguiente:
Cada 30 segundos a partir del primer cambio, los datos modificados (los “Dirty”) se envían al servidor y se guardan:
Cuando esto ocurre hay que tener en cuenta lo siguiente:
1) Todos los plugins relacionados se disparan (síncronos y asíncronos)
2) Todos los workflows relacionados se disparan (síncronos y asíncronos)
3) El formulario hace un “refresh” de los datos, sin hacer un “postback” de toda la página.
4) Los eventos del Save del formularios son ejecutados
5) Al hacer un Autosave, los eventos del “load” del formulario no se disparan (solo se disparan al cargar el formulario por primera vez). De hecho estos eventos tampoco se disparan si se hace un Save manual. Es decir, para que el Load se vuelva a ejecutar, hay que cargar de nuevo el formulario (hacer un postback).
6) No existe botón de guardar de forma manual en el menú superior, pero dándole al disco se puede grabar manualmente.
Ok, así es como funciona el Autosave. Lo bueno es que podemos deshabilitar esta funcionalidad de forma global para todo el CRM en la configuración de la organización:
Una vez deshabilitado el autosave, en el formulario aparece un nuevo botón de Guardar (como en CRM 2011):
Ok, hasta aquí todo bien. Pero el problema surgirá cuando un cliente nos pida deshabilitar el Autosave, pero solo para determinadas entidades. Para esto no hay nada previsto a nivel de configuración, sino que se debe controlar a través de código en Javascript.
Para esto, primero creamos un WebResource de tipo Javascript con el siguiente método (el número 70, nos dice que es un Autosave):
1: function preventAutoSave(econtext) {
2: var eventArgs = econtext.getEventArgs();
3: if (eventArgs.getSaveMode() == 70 || eventArgs.getSaveMode() == 2) {
4: eventArgs.preventDefault();
5: }
6: }
7:
Luego añadimos la llamada en el OnSave del formulario a dicho método:
Una vez publicados los cambios, el Autosave deja de funcionar para el formulario en que hemos añadido este código.
Para el usuario final es como si no existiese el Autosave, es totalmente transparente. Si el usuario intenta cerrar la ventana, aparece la típica advertencia de que los cambios no están guardados:
Y si intentas navegar a otra página ocurre lo mismo:
Si el usuario quiere guardar los cambios deberá hacer click en donde se muestra a continuación de forma manual:
Espero les sea de ayuda este pequeño resumen, y a tenerlo en cuenta para nuevas implementaciones con Dynamics CRM 2013!
No hay comentarios:
Publicar un comentario