Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:16-sys-message:start [2018/09/07 12:02]
ejetoro [NODO SYS-MESSAGE]
wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:16-sys-message:start [2018/09/07 17:53] (actual)
ejetoro [Colección entry-point]
Línea 1: Línea 1:
 {{indexmenu_n>1}} {{indexmenu_n>1}}
-====== NODO SYS-MESSAGE ======+===== NODO SYS-MESSAGE =====
 \\ \\
 El nodo **sys-message** es un nodo especial de la colección “Empresas”, para recibir eventos de <nowiki>XOneLive</nowiki>. \\ El nodo **sys-message** es un nodo especial de la colección “Empresas”, para recibir eventos de <nowiki>XOneLive</nowiki>. \\
 +\\
 Utilizado para realizar acciones cuando esté ocurriendo alguno de los eventos llevados a cabo por el <nowiki>XOneLive</nowiki>. \\ Utilizado para realizar acciones cuando esté ocurriendo alguno de los eventos llevados a cabo por el <nowiki>XOneLive</nowiki>. \\
 +\\
 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.\\ 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.\\
 \\ \\
 +<WRAP center round important 60%> 
 +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. 
 +</WRAP> 
 +==== EJEMPLO DE USO ====
 <code xml> <code xml>
 <sys-message> <sys-message>
Línea 36: Línea 41:
  cadena=" Se han aplicado todas las actualizaciones (al comprobar las actualizaciones puede haber más de una, éste se invoca al aplicar todas).";  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);  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 objeto=appData.getCurrentEnterprise().getVariables("MENUPRINCIPALFASE1");
  var view=ui.getView(appData.getCurrentEnterprise().getVariables("MENUPRINCIPALFASE1"));  var view=ui.getView(appData.getCurrentEnterprise().getVariables("MENUPRINCIPALFASE1"));
Línea 51: Línea 58:
  /* es responsabilidad del programador limpiar la cola de réplica y cerrar la aplicación.  /* es responsabilidad del programador limpiar la cola de réplica y cerrar la aplicación.
  /* ************************ */  /* ************************ */
-  + 
- ui.msgBox("Advertencia, se ha programado una actualización de base de datos. Se va a replicar todos los datos y cerrar la aplicación.", "Mensaje", 0);+ //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);  var bResult = replica.processReplicatorQueue(liveResponse);
  if (bResult) {  if (bResult) {
Línea 61: Línea 69:
  }  }
  break;  break;
-    }+ }
 } }
 </code> </code>
  
 +==== CODIGO ADICIONAL ====
 +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).\\
 +\\
 +
 +=== Colección entry-point ===
 +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.
 +
 +<code xml>
 +<!-- 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>
 +</code> 
 +\\
 +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\\
 +\\
 +<code javascript>
 +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);
 + }
 + }
 +}
 +</code>
 +\\
 +Código CSS utilizado\\
 +<code css>
 +.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%;
 + }
 +</code>