Controla tu empresa a tu modo !

Archivo mensual: noviembre 2014

Power-up dinámico para simular tarea CRON

Al desarrollar webs en entornos Windows a menudo nos encontramos con el problema de probar las llamadas tareas CRON. Aunque disponemos de las “tareas de Windows” estas no tienen la flexibilidad del “demonio” CRON de Linux.

Para la depuración de tareas CRON necesitamos hacer llamadas a una URL de forma periódica y constante, por ejemplo cada 5 minutos.

PSFGeneric no está pensado para estas cosas, ni es la plataforma ideal para tener una tarea de este tipo en producción, pero para desarrollar nos pueden venir muy bien sus power-ups dinámicos y la potencia de su motor Javascript. Veamos como…

simulador de cron

Para empezar entramos en el “Editor de power-ups dinámicos” y creamos un nuevo proyecto, al que añadiremos un formulario y una librería Javascript.

En la librería vamos a añadir lo siguiente:

// Este código se usará de forma global

var idInterval = 0;

var cntInterval = 0;

 

function getURL(url) {

                var conn = GetXmlHttpObject();

                debug(“Estado: ” + conn.readyState);

                var data = “”;

                conn.open(“post”, url, data, true);

 

                conn.onload = function() {

                               debug(“Respuesta: ” + conn.status + ” – ” + conn.statusText);

                }

                conn.onreadystatechange = function() {

                               debug(“Estado: ” + conn.readyState);

                }

                conn.onabort = function() {

                               debug(“Petición cancelada”);

                }

                conn.onloadstart = function() {

                               debug(“Descarga iniciada”);

                }

                conn.onprogress = function(percentage, TotalBytesToReceive, BytesReceived) {

                               debug(“Descargado: ” + percentage + “, ” + TotalBytesToReceive + ” bytes de ” + BytesReceived + ” bytes”);

                }

}

 El código anterior declara dos variables globales y una función para hacer la llamada a nuestra URL. La variable idInterval guardará la ID del temporizador Javascript necesario y cntInterval es simplemente un contador para mostrar algo al usuario y sepa que está trabajando.

 En la función se crea un objeto XmlHttpObject y se hace la petición, aunque la respuesta no nos importa mucho se hace seguimiento de los eventos de respuesta y estado y se muestra por consola información sobre esto.

Ahora a por el formulario.

formulario

En mi propuesta permitimos configurar el intervalo de tiempo entre llamadas y la URL a la que llamar. Además añadí un botón de inicio y otro de parada. Los nombré como sigue:

  • nudPeriodo: Contendrá el periodo en milisegundos de intervalo. (Hay una errata en la imagen del formulario, i’m sorry ;)
  • txtURL: Para que el usuario ponga la URL a llamar.
  • txtPasadas: Donde mostraremos el número de peticiones realizadas hasta el momento.

 Ya tenemos la interfaz, ahora a iniciar y parar el temporizador.

“Al pulsar”, así se llama el evento en PSFGeneric, en el botón de inicio se ejecutará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

}

cntInterval = 0;

var per = MyForm.Field(“nudPeriodo”).Field(“value”).Value;

if (MyForm.Field(“txtURL”).Field(“value”).Value == “”) {

                alert(“Debe indicar una URL.”);

} else {

                idInterval = setInterval(function() {

                                               MyForm.Field(“txtPasadas”).Field(“value”).Value = cntInterval++;

                                               var url = MyForm.Field(“txtURL”).Field(“value”).Value;

                                               getURL(url);

                }, per)

};

 Comprueba que no haya un temporizador funcionando, y si lo hay lo para. Luego recupera el intervalo de tiempo definido por el usuario. Si el usuario no introdujo una URL lo avisa y en caso contrario crea el temporizador.

 En cada ciclo pone el valor de cntInterval en la caja de texto a tal efecto e incrementa en uno su valor. A continuación recupera la URL y ejecuta la función para hacer la llamada, la que definimos al principio en la librería.

 En algún momento el usuario querrá dejar de trabajar y tomarse un descansito, y puede que hasta quiera parar el temporizador, por muy remota que pueda parecer esa idea :P . Para ello le dimos el botón Parar, que al pulsarse hará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

                idInterval = 0;

}

 Si hay un temporizador en marcha lo destruye, y por ende se para, y reiniciar el ID de temporizador.

 Y de este modo, pongamos con media hora, como mucho, de hacer clics y pruebas, tendremos la pequeña herramienta que necesitábamos.

 Y para aquellos que no quieran complicarse tenéis esta herramienta en la lista de power-ups dinámicos de vuestro PSFGeneric y el proyecto con el código fuente para descargar aquí mismo.

 Un saludo a todos y feliz codificación…

Publicado PSFGeneric 1.6.4

Ya disponible PSFGeneric 1.6.4 con las siguientes mejoras destacadas:

  • Añadido editores de texto con formato por toda la aplicación.
  • Gestor de ficheros distribuido, gestor documental, para compartir ficheros en la nube, ahora tambien soporta sFTP, protegidos por permisos de acceso.
  • Añadidos iconos a multitud de botones y menus.
  • Mejora notable del rendimiento.
  • Mejoras en el motor javascript que dan mas libertad de desarrollo y control sobre el power-up dinamico.
  • Desglose de impuestos en tickets.
  • Agregado procesador de textos.
  • Ahora se permite definir usuarios invitados con acceso limitado a opciones especificas, por ejemplo el gestor documental, y control mas estricto de la seguridad al cargar power-ups.
  • Añadido importador de contactos.
  • Además de muchísimas mejoras más

Como siempre podemos descargar de esta misma web.