BUSCADOR |
---|
INDICE |
---|
INDICE PÁGINA ACTUAL |
---|
Tabla de Contenidos
BUSCADOR |
---|
INDICE |
---|
INDICE PÁGINA ACTUAL |
---|
El nodo sys-message es un nodo especial de la colección “Empresas”, para recibir eventos de XOneLive.
Utilizado para realizar acciones cuando esté ocurriendo alguno de los eventos llevados a cabo por el XOneLive.
Estos eventos están codificados numéricamente, y a continuación se pone un ejemplo de cada uno de ellos donde mostramos un mensaje descriptivo de la acción a la que pertenece cada código de evento.
Actualmente no se pueden controlar únicamente uno ó dos casos aislados del XOneLive y no hacer nada en los otros, si se especifica el nodo <sys-message> para sacar un mensaje con el código 1002, el programador debe gestionar también el caso 1003 (Provisión segura), puesto que el framework encontrará el nodo <sys-message> y entenderá que es el programador el que se hará cargo de las acciones a realizar.
<sys-message> <action name="runscript"> <param name="codigo" /> <param name="message" /> <param name="liveResponse" /> <script language="javascript"> sysMessage(codigo,message); </script> </action> </sys-message>
function sysMessage(codigo,message) { var cadena=""; switch(codigo) { case 1000: cadena=" Actualización descargándose (un mensaje por cada actualización)."; break; case 1001: cadena=" Actualización aplicada (un mensaje por cada actualización)."; break; case 1002: cadena=" Se han aplicado todas las actualizaciones (al comprobar las actualizaciones puede haber más de una, éste se invoca al aplicar todas)."; appData.getCurrentEnterprise().setVariables("ACTUALIZACIONES",1); // Obtenemos un puntero al objeto del menú principal que está en una variable global (En el before-edit del entry-point se habrá inicializado esta variable con self) var objeto=appData.getCurrentEnterprise().getVariables("MENUPRINCIPALFASE1"); var view=ui.getView(appData.getCurrentEnterprise().getVariables("MENUPRINCIPALFASE1")); if (view != undefined) { if (objeto != undefined) { objeto.executeNode("comprobarActualizaciones"); } } break; case 1003: /* Provisionamiento seguro. */ /* Declarar el nodo sys-message requiere que este caso lo controle el programador, /* es responsabilidad del programador limpiar la cola de réplica y cerrar la aplicación. /* ************************ */ //ui.showToast("Live: " + liveResponse.liveReceiver); ui.msgBox("Advertencia, se ha programado una actualización de base de datos. Se van a replicar todos los datos y cerrar la aplicación.", "Mensaje", 0); var bResult = replica.processReplicatorQueue(liveResponse); if (bResult) { //ui.msgBox("Cola de salida del replicador procesada correctamente. Cerrando aplicación.", "Mensaje", 0); appData.failWithMessage(-11888, "##EXITAPP##"); } else { ui.showToast("Error al procesar la cola de salida"); } break; } }
A continuación se desarrolla a modo de ejemplo un código para mostrar una ventana flotante cuando se recibe el código 1002 desde el XOneLive (Cuando se han aplicado todas las actualizaciones pendientes).
En la colección entry-point, hemos de definir un frame flotante que será el que mostremos al usuario cuando recibamos la notificación desde el XOneLive.
<!-- Código del frame flotante donde vamos a mostrar el mensaje informativo al usuario con una cuenta atrás para cerrar el framework y aplicar los cambios que hayan llegado a través del XOneLive --> <frame name="frmActualizacion" width="930p" height="714p" floating="true" top="0p" left="175p" bgcolor="#FFFFFF" align="left" disablevisible="MAP_ACTUALIZACION=0" modal="true" framebox="true"> <prop name="MAP_TXT_TITLE3" type="T" title=" " class="ppal_subtitulo" width="100%" height="20%" fontsize="20" text-bgcolor="#CCFF0000" /> <prop name="MAP_TXT_TITLE4" type="T" title=" " class="ppal_subtitulo" height="40%" lmargin="2%" tmargin="2%" text-forecolor="#000000" text-bgcolor="#FFFFFF" /> <prop name="MAP_ACEPTAR" type="B" title="ACEPTAR" class="btn_MsgActualizacion" method="ExecuteNode(aceptaractualizacion)" /> <prop name="MAP_CANCELAR" type="B" title="CANCELAR" class="btn_MsgActualizacion" method="ExecuteNode(cancelaractualizacion)" newline="false" /> </frame> <!-- Con el siguiente código en la colección entry-point, guardamos un puntero al objeto self en una variable global para poder referirnos a ella en cualquier momento. --> <before-edit> <action name="runscript"> <script language="javascript"> appData.getCurrentEnterprise().setVariables("MENUPRINCIPALFASE1",self); </script> </action> </before-edit> <!-- Este es el nodo que se ejecuta en el código de ejemplo anterior cuando se captura el código 1002. --> <comprobarActualizaciones show-wait-dialog="false" refresh="false"> <action name="runscript"> <script language="javascript"> comprobarActualizaciones(); </script> </action> </comprobarActualizaciones> <aceptaractualizacion show-wait-dialog="false" refresh="false"> <action name="runscript"> <script language="javascript"> appData.getCurrentEnterprise().setVariables("ACTUALIZACIONES",0); ui.restartApp(); </script> </action> </aceptaractualizacion> <cancelaractualizacion show-wait-dialog="false" refresh="false"> <action name="runscript"> <script language="javascript"> self.MAP_ACTUALIZACION=0; self.MAP_BANDERACANCELAR=1; ui.executeActionAfterDelay("comprobarActualizaciones",60); ui.getView(self).refreshAll("frmActualizacion"); </script> </action> </cancelaractualizacion>
En el código siguiente, se pone visible el frame flotante “frmActualizacion” y se programa un contador con una cuenta atrás que se muestra en dicha ventana
function comprobarActualizaciones() { if (appData.getCurrentEnterprise().getVariables("ACTUALIZACIONES")==1) { self.MAP_ACTUALIZACION=1; ui.getView(self).refreshAll("frmActualizacion"); appData.getCurrentEnterprise().setVariables("CONTADOR",10); //##XONE_TRANSLATE_NEXT_LINE## self.MAP_TXT_TITLE4="La aplicación se reseteará en " + appData.getCurrentEnterprise().getVariables("CONTADOR"); ui.refresh("MAP_TXT_TITLE4"); self.MAP_BANDERACANCELAR=0; ui.executeActionAfterDelay("contador",1); } } function contador() { if (self.MAP_BANDERACANCELAR==0) { var contador=appData.getCurrentEnterprise().getVariables("CONTADOR")-1; appData.getCurrentEnterprise().setVariables("CONTADOR",contador); //##XONE_TRANSLATE_NEXT_LINE## self.MAP_TXT_TITLE4="La aplicación se reseteará en " + appData.getCurrentEnterprise().getVariables("CONTADOR"); ui.refresh("MAP_TXT_TITLE4"); if (appData.getCurrentEnterprise().getVariables("CONTADOR")==0) { appData.getCurrentEnterprise().setVariables("ACTUALIZACIONES",0); ui.restartApp(); } else { ui.executeActionAfterDelay("contador",1); } } }
Código CSS utilizado
.ppal_subtitulo { extends:prop; width:96%; fontsize:10; fontbold:true; labelwidth:0; text-border:false; locked:true; text-forecolor:#FFFFFF; align:center|center; text-align:center|center; } .btn_MsgActualizacion { bgcolor:#CCFF0000; forecolor:#FFFFFF; width:33%; lmargin:11%; height:60p; text-align:left|top; textfont-size:12; tmargin:3%; }