martes, 29 de septiembre de 2015

Nintex Forms & Javascript: Evento para cuando el formulario está realmente listo

Últimamente he estado trabajando mucho con Nintex Workflow & Forms 2013, y tras construir un formulario realmente "pesado", con diversas "pantallas", múltiples paneles que se ocultan o se muestran en función del tipo de formulario elegido en un menú "dropdown", multi-idioma y con más de 120 consultas a una lista de traductor de literales.

Cuando el formulario es ligero y le quieres añadir cierto JavaScript, no hay problema en ello, con un evento del tipo $(document).ready o $(window).load debería funcionar perfectamente. $(window).load se carga en teoría una vez que la página está completamente cargada, con sus imágenes, frames y objetos.

$(document).ready(function() {
/** work when all HTML loaded except images and DOM is ready **/
// your code
});


$(window).load(function() {
/** this is come when complete page is fully loaded, including all frames, objects and images **/
});


Pero en mi caso esto no era suficiente, pues una vez cargada la página Nintex tenía que cargar la lógica de sus componentes y consultar todos los literales multiidioma en la lista de SharePoint, produciendo un retraso de un par de segundos que hacían que el código JavaScript no encontrara todavía algunos controles del formulario en pantalla y retornara error al intentar acceder a ellos.

¿Existe algún evento que se ejecute cuando realmente todos los controles del formulario Nintex estén disponibles? La respuesta es sí, con "NWF.FormFiller.Events.RegisterAfterReady" podemos conseguirlo.

NWF.FormFiller.Events.RegisterAfterReady(function(){
     /** this is come when all the literals and Nintex Controls are full charged in the page**/
});

Esta función realmente se ejecuta después de $(window).load, y permite que el JavaScript acceda correctamente a todos los elementos del formulario.

Personalmente me ha evitado diversos quebraderos de cabeza y tener que andar chapuceando con delays forzados en el código JavaScript (setTimeout...).

Espero que a alguien más le pueda servir y evitar un buen rato de sufrimiento con los eventos del formulario.

¡Hasta la próxima!

No hay comentarios: