{{indexmenu_n>1}} ===== Nodo MAINTENANCE ===== Para definir mantenimientos en una aplicación hay que añadir el nodo <**maintenance**> a una colección.\\ \\ Dependerá de la relación que tenga la acción que se va a tomar con la colección, es decir, si vamos a realizar una acción muy genérica que no depende de ninguna colección, entonces podemos definirla en la colección que queramos, por el contrario, si la acción, por ejemplo, es un script y en él accedemos a algunas de las particularidades de la colección, en ese caso, hay que definirla en esa colección.\\ \\ Los mantenimientos siempre se agregan como una pestaña al final de las existentes (En Windows Mobile).\\ \\ Para ejecutar mantenimientos en segundo plano que ocurran cada cierto tiempo, independientemente de la colección donde se esté, se ponen en la coll "**Empresas**" .\\ \\ Asimismo, se recuerda que es OBLIGATORIO tener una empresa y un usuario asociado a dicha empresa en las tablas gen_empresa y gen_usuarios respectivamente. ===== Estructura: ===== A continuación, se explican los atributos de los action específicos para el nodo maintenance:\\ \\ ^ ATRIBUTO ^ DESCRIPCION ^ |**period**=" S / X / H / D / M / Y " | Indica el periodo de tiempo que va a usar para hacer el cálculo. Segundos, Minutos, Horas, Dias, Meses y Años, respectivamente. | |**frecuency**="Valor" | Es un número que indica los periodos que tienen que transcurrir para que ocurra el mantenimiento. | |**executealways="true/false"** | Se ejecuta el mantenimiento que tiene esa propiedad a true, cuando le toque, aunque se este dentro de alguna colección. | |**Showintab=”true/false”** | Indica si el mantenimiento debe aparecer en la pestaña de mantenimientos o no. Valor por defecto “true”| En Windows Mobile se muestra una pestaña **mantenimientos** por defecto con las acciones que se ejecutan.\\ \\ Si queremos que se oculte la pestaña **mantenimientos** ocultando también la consola de réplica, se pone **Showintab=”false”** a nivel de maintenance\\ === NUEVA FORMA DE REALIZAR LOS MANTENIMIENTOS === \\ **ATENCION!** en los nuevos frameworks (Android, Iphone), se ha detectado una posible pérdida de información en la réplica.\\ \\ Anteriormente en Windows Mobile por ejemplo, cuando se estaba en la ventana de edición, los mantenimientos no se ejecutaban para no penalizar el rendimiento de la aplicación. Ahora con los nuevos frameworks con hardware multicore, multithread y demás, ésto ya no es un problema y pueden ejecutarse varios scripts simultáneamente.\\ \\ Aquí es donde se ha encontrado el problema... Cuando nosotros ejecutábamos un mantenimiento, se ponía al principio AppData.IsReplicating=false", provocando que las operaciones definidas a continuación no entrasen en réplica.\\ Ahora, como pueden ejecutarse varios scripts al mismo tiempo, si un mantenimiento salta por ejemplo en el momento en que estamos haciendo algunas operaciones pulsando algún botón en una pantalla de la aplicación, el IsReplicating desactiva la réplica **NO SOLAMENTE PARA LOS MANTENIMIENTOS**, de forma que las operaciones que se hayan podido realizar con el botón, tampoco han entrado en réplica.\\ Para evitar esto, se ha definido una nueva forma de trabajar cuando no queremos replicar una información, **eliminando el uso del IsReplicating**. 1.- **Definimos una Colección que nos hace de conexión con la BD para ejecutar las SQL que no queremos que entren en réplica.** \\ 2.- **Definir los mantenimientos.**\\ \\ __Este código sería para VBScript:__ \\ \\ __Este código sería para JavaScript:__ === MANTENIMIENTOS ANTIGUOS === El maintenance también puede ser utilizado a la hora de crearnos nuestro propio sistema de avisos (notificaciones de réplica), como se puede ver [[http://www.xoneisp.com/xonewiki/doku.php?id=b.-programacion:b18.-extras:b18.2.-notificaciones:start&#por_control_libre_y_autonomo_donde_el_programador_tiene_el_control_total | aquí]].