Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa |
wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:start [2018/09/11 13:26] – editor externo 127.0.0.1 | wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:start [2024/10/10 13:19] (actual) – [Tabla] ary |
---|
| |
{{indexmenu_n>1}} | {{indexmenu_n>1}} |
====== Eventos / Reglas de negocio ====== | ====== Eventos / Reglas de negocio ====== |
/* | /* |
{{indexmenu>wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:#eventos_reglas_de_negocio}} | {{indexmenu>wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:#eventos_reglas_de_negocio}} |
*/ | */ |
\\ | \\ |
^Elemento ^Descripción ^ | ^ Elemento ^ Descripción ^ |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:1.-action:start ]]| Nodo donde se expondrán las acciones a realizar en los eventos definidos en nuestra aplicación. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:1.-action:start]] | Nodo donde se expondrán las acciones a realizar en los eventos definidos en nuestra aplicación. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:2.-create:start ]]| Nodo en el cual se van a describir las reglas de creación de las colecciones. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:2.-create:start]] | Nodo en el cual se van a describir las reglas de creación de las colecciones. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:3.-insert:start ]]| Nodo en el cual se van a establecer las reglas y acciones de grabación en una colección.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:3.-insert:start]] | Nodo en el cual se van a establecer las reglas y acciones de grabación en una colección. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:4.-before-edit:start ]]|Evento ejecutado al ir a editar un objeto, aún no se ha empezado a pintar la pantalla. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:4.-before-edit:start]] | Evento ejecutado al ir a editar un objeto, aún no se ha empezado a pintar la pantalla. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:4.5.-after-edit:start|4.5.-after-edit ]]| Evento ejecutado al ir a editar un objeto, una vez que ya está pintado el UI. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:4.5.-after-edit:start|4.5.-after-edit ]] | Evento ejecutado al ir a editar un objeto, una vez que ya está pintado el UI. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:5.-onchange:start]]| Nodo en el cual se describen los campos cuyos cambios se quieren monitorear y las acciones que se desea que se ejecuten cuando ocurran los cambios.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:5.-onchange:start]] | Nodo en el cual se describen los campos cuyos cambios se quieren monitorear y las acciones que se desea que se ejecuten cuando ocurran los cambios. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:6.-delete:start ]]| Nodo en el cual se van a describir las reglas y acciones de eliminación de las colecciones.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:6.-delete:start]] | Nodo en el cual se van a describir las reglas y acciones de eliminación de las colecciones. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:7.-maintenance:start ]]| Nodo para definir mantenimientos en una aplicación.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:7.-maintenance:start]] | Nodo para definir mantenimientos en una aplicación. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:8.-selecteditem:start ]]| Nodo que tiene lugar cuando se selecciona una fila de contents. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:8.-selecteditem:start]] | Nodo que tiene lugar cuando se selecciona una fila de contents. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:9.-onlogon:start ]]| Regla de negocio que tiene lugar cuando entramos en la aplicación. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:9.-onlogon:start]] | Regla de negocio que tiene lugar cuando entramos en la aplicación. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:10.-onlogoff:start]]|Regla de negocio que tiene lugar cuando vamos a salir de la aplicación. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:10.-onlogoff:start]] | Regla de negocio que tiene lugar cuando vamos a salir de la aplicación. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:11.-onback:start]]| Evento que atiende al botón de volver atrás que ejecuta este nodo. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:11.-onback:start]] | Evento que atiende al botón de volver atrás que ejecuta este nodo. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:12.-replica-ok:start]]| Nodo que sirve para capturar el evento de réplica de alguna tabla de la base de datos. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:12.-replica-ok:start]] | Nodo que sirve para capturar el evento de réplica de alguna tabla de la base de datos. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:13.-auto-selecteditem:start]]| Tiene lugar cuando van pasando automáticamente los “slides” o presentaciones en un contents| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:13.-auto-selecteditem:start]] | Tiene lugar cuando van pasando automáticamente los “slides” o presentaciones en un contents | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:14.-reglas-de-negocio:start]]| Explicación de los distintos “eventos” disponibles en XOne para definir las reglas de negocio. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:14.-reglas-de-negocio:start]] | Explicación de los distintos “eventos” disponibles en XOne para definir las reglas de negocio. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:15.-binding:start]]| <nowiki>Binding</nowiki> | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:15.-binding:start]] | %%Binding%% | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:16-sys-message:start]]| Nodo especial de la colección “Empresas”, para recibir eventos de <nowiki>XOneLive</nowiki>. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:16-sys-message:start]] | Nodo especial de la colección “Empresas”, para recibir eventos de %%XOneLive%%. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:17-notificaciones-push:start]]| Nodo especial de la colección empresas que se lanza cuando se pulsa en una notificación PUSH. | | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:17-notificaciones-push:start]] | Nodo especial de la colección empresas que se lanza cuando se pulsa en una notificación PUSH. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:18-onlong-press:start]] |onlong-press.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:18-onlong-press:start]] | onlong-press. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:19-oneditoraction:start]] | On editor action.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:19-oneditoraction:start]] | On editor action. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:20.-onmessage:start]] |onMessage.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:20.-onmessage:start]] | onMessage. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:21.-onrecovery:start]] |onRecovery.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:21.-onrecovery:start]] | onRecovery. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:22.-after-recovery-login:start]] | after-recovery-login.| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:22.-after-recovery-login:start]] | after-recovery-login. | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:23.-permissions:start]] | permisos de la aplicación| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:23.-permissions:start]] | permisos de la aplicación | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:24.-ondate-selected:start]] | onDateSelected| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:24.-ondate-selected:start]] | onDateSelected | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:25.-onpage-selected:start]] | onPageSelected| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:25.-onpage-selected:start]] | onPageSelected | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:26.-oncelldraw:start]] | onCellDraw| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:26.-oncelldraw:start]] | onCellDraw | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:27.-onfocus:start]] | onFocus| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:27.-onfocus:start]] | onFocus | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:28.-onlostfocus:start]] | onLostFocus| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:28.-onlostfocus:start]] | onLostFocus | |
| [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:29.-load:start]] | Nodo que salta por cada registro que se carga en un contents| | | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:29.-load:start]] | Nodo que salta por cada registro que se carga en un contents | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:30.-onTextChanged:start]] | onTextChanged | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:31.-onConsolemessage:start]] | onConsoleMessage | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:32.-onfocuschanged:start]] | onfocusChanged | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:33.-onclick:start]] | onclick | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:34.-ondatashare:start]] | ondatashare | |
| | [[wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos:35-clipboard:start]] | Manejo del clipboard o portapapeles en Apps XOne | |
\\ | \\ |
<WRAP center round important 60%> | <WRAP center round important 60%> |
==== Prop type=”T” ==== | ==== Prop type=”T” ==== |
\\ | \\ |
^onTextChanged |keyPressed: Tecla pulsada o todo el texto nuevo introducido de golpe (ej. por copiar y pegar)\\ oldText: Texto antes del cambio\\ newText: Texto ya cambiado | | ^onTextChanged |<WRAP> |
| **target**: Propiedad donde se produce el evento.\\ **keyPressed**: Tecla pulsada o todo el texto nuevo introducido de golpe (ej. por copiar y pegar)\\ **oldText**: Texto antes del cambio\\ **newText**: Texto ya cambiado\\ |
| <code javascript onTextChanged.js> |
| function eventoOnTextChanged(evento) { |
| ui.showToast("onTextChanged! target: " + evento.target + "\nObjItem: " + evento.objItem + "\nTecla pulsada: " + evento.keyPressed + "\noldText: " + evento.oldText + "\nnewText: " + evento.newText); |
| } |
| </code> |
| </WRAP>| |
^onTextLengthChanged |length: Tamaño total del texto | | ^onTextLengthChanged |length: Tamaño total del texto | |
^onFocusChanged |isFocused: Si tiene focus o no el target | | ^onFocusChanged |isFocused: Si tiene focus o no el target | |
| |
| |
| {{indexmenu>:wiki:2.-desarrollo-app:2.3.-codigo:c.-eventos30.-onTextChanged:start}} |
| |
| \\ |
| ====== Eventos / Inactividad en aplicaciones XOne ====== |
| |
| |
| \\ |
| ===== Contador de inactividad cuando la app está abierta ===== |
| |
| \\ |
| |
| Para implementar y lanzar el contador, debe definirse el código en el nodo entryPoint. |
| \\ |
| \\ |
| |
| \\ |
| ^ Lanzar contador de inactividad | <code javascript> let inactividad=setInactivityTimer(jsconst_oper.tiempoInactividad); </code> | |
| \\ |
| |
| |
| /** |
| * Valores de retorno del callback |
| * 0: Cerrar la app |
| * 1: Volver al entry-point o appwizard |
| * 2: Logout y volver a la pantalla de login |
| * 3: No hacer nada. Este timer se cancela, y se debe volver a lanzar |
| * ui.setInactivityTimer() si fuera necesario |
| * |
| * Este script siempre debe devolver uno de estos valores en todos los caminos. |
| */ |
| <code javascript> |
| function setInactivityTimer(nValue) { |
| // Tiempo en milisegundos que lleva la app inactiva |
| ui.setInactivityTimer({ |
| timeout : nValue, |
| callback : function() { |
| // ui.showToast("Se ha superado el tiempo de inactividad"); |
| |
| //Si la ventana LoginColl_Inactivity está activa, no se vuelve a lanzar |
| var objVisible=getLoginInStack(); |
| if (isNothing(objVisible)){ |
| let coll=appData.getCollection("LoginColl_Inactivity"); |
| let objCrear=coll.createObject(); |
| ui.openEditView(objCrear); |
| } |
| return 3; |
| |
| } |
| }); |
| } |
| </code> |
| \\ |
| **Función que retorna los objetos activos de la aplicación** |
| \\ |
| <code javascript> |
| function getLoginInStack(){ |
| try { |
| var objViewInStack=null; |
| var stackWindow=ui.getViewStack(); |
| var ststack=""; |
| var countStack=stackWindow.length; |
| var i=0; |
| var bOK=false; |
| while ((i <= countStack-1) && (!bOK)) { |
| bOK=isLoginColl(getViewCollName(stackWindow[i])); |
| if (bOK){ |
| objViewInStack=getObjView(stackWindow[i]); |
| } |
| i++; |
| } |
| return objViewInStack; |
| }catch (e) { |
| let sterror=e.message; |
| writelogExceptionJSv2(" getLoginInStack. ERROR: "+sterror,"funciones.js",false); |
| return null; |
| } |
| |
| } |
| </code> |
| \\ |
| **Función para buscar si la coll LoginColl_Inactivity está activa** |
| \\ |
| <code javascript> |
| function isLoginColl(stCollname){ |
| try { |
| var stcollsaviso="LoginColl_Inactivity"; |
| var posicion= stcollsaviso.search(stCollname); |
| let bOK=false; |
| if (posicion>=0){ |
| bOK=true; |
| } |
| return bOK; |
| }catch (e) { |
| let sterror=e.message; |
| writelogExceptionJSv2(" isLoginColl. ERROR: "+sterror,"funciones.js",false); |
| return false; |
| } |
| } |
| </code> |
| \\ |
| \\ |
| ===== Eventos para ocultar la app de primer plano y volver a primer plano ===== |
| |
| \\ |
| ^ on-app-foreground | Este es el evento que se ejecuta cuando la app vuelve a primer plano | |
| \\ |
| <code javascript> |
| <!-- Evento que se ejecuta cuando la app vuelve a primer plano --> |
| <on-app-foreground refresh="false" show-wait-dialog="false"> |
| <action name="runscript"> |
| <script> |
| // Tiempo en milisegundos que lleva la app inactiva |
| let nTime = ui.getInactivityTime(); |
| // ui.showToast("Inactivity time: " + nTime); |
| |
| if (nTime>=jsconst_oper.tiempoInactividad) |
| { |
| //Si la ventana LoginColl_Inactivity está activa, no se vuelve a lanzar |
| var objVisible=getLoginInStack(); |
| if (isNothing(objVisible)){ |
| let coll=appData.getCollection("LoginColl_Inactivity"); |
| let objCrear=coll.createObject(); |
| ui.openEditView(objCrear); |
| } |
| } |
| |
| //Lanzar el contador de inactividad cuando la app vuelve a primer plano |
| let inactividad=setInactivityTimer(jsconst_oper.tiempoInactividad); |
| |
| </script> |
| </action> |
| </on-app-foreground> |
| </code> |
| \\ |
| ===== Evento que se ejecuta cuando la app pasa a segundo plano ===== |
| \\ |
| ^ on-app-background | Este es el evento que se ejecuta cuando la app pasa a segundo plano | |
| \\ |
| <code javascript> |
| <!-- Evento que se ejecuta cuando la app pasa a segundo plano --> |
| <on-app-background refresh="false" show-wait-dialog="false"> |
| <action name="runscript"> |
| <script> |
| // ui.showToast("on-app-background invocado"); |
| |
| //Quitar el contador de inactividad cuando la app pasa a segundo plano |
| ui.removeInactivityTimer(); |
| </script> |
| </action> |
| </on-app-background> |
| </code> |
| |
| \\ |
| ===== Inactividad Ventana Login ===== |
| \\ |
| ^ Ventana Login Coll Inactiva | Se crea colección "LoginColl_Inactivity" donde en llamada a función %%LoginWithLDAP%%, si el login es correcto, se vuelve a lanzar el setInactivityTimer() | |
| \\ |
| <code html> |
| <coll name="LoginColl_Inactivity" special="true" notab="true"> |
| <group name="Login" id="1"> |
| <frame name="frmGeneral_2" imgbk="background_login.png" width="100%" height="100%" align="top|left"> |
| <frame name="frmContenido_1" width="80%" height="40%" tmargin="40%" lmargin="10%" align="top|center" bgcolor="#00000000"> |
| <prop name="MAP_BTUSUARIO" type="B" img="login.png" xwidth="60p" height="70p" keep-aspect-ratio="true" tmargin="70p" locked="true" /> |
| <prop name="MAP_USUARIO" type="T" oneditoraction="javascript:oneditoraction(self,0,'MAP_CONTRASENNA');" lines="1" lpadding="110p" lmargin="-80p" tooltip="Expediente de usuario" class="font5 border-only-bottom tooltip-color-green font-regular" text-forecolor="#cfcfcf" height="200p" width="80%" floating-tooltip="true" visible="1" newline="false" updates="MAP_USUARIO_LDAP" locked="true"/> |
| |
| <prop name="MAP_BTCONTRASENNA" type="B" img="pwd.png" xwidth="60p" height="70p" keep-aspect-ratio="true" tmargin="70p" /> |
| <prop name="MAP_CONTRASENNA" type="X" oneditoraction="javascript:oneditoraction(self,1,'MAP_MESSAGE_ERROR_LOGIN');" lines="1" xtmargin="50p" lpadding="110p" lmargin="-80p" tooltip="Clave" class="font5 border-only-bottom tooltip-color-green text-color-black font-regular" height="200p" width="80%" floating-tooltip="true" visible="1" newline="false" updates="MAP_PWD" /> |
| <prop name="MAP_MESSAGE_ERROR_LOGIN" locked="true" type="T" visible="1" class="font4 no-border text-color-red no-labelwidth font-regular" tmargin="30p" height="-2" width="80%" /> |
| |
| <prop name="MAP_BT_INICIAR_SESION_REAL" method="executenode(login)" type="B" title="Entrar" bgcolor="#93B359" height="15%" width="90%" border-corner-radius="50" align="center" class="font7 no-border color-white font-regular" visible="1" tmargin="20p" /> |
| <!--<prop name="MAP_BT_INICIAR_SESION_SALIR" method="executenode(onback)" type="B" title="Salir" bgcolor="#93B359" height="15%" width="90%" border-corner-radius="50" align="center" class="font7 no-border color-white font-regular" visible="1" tmargin="20p" />--> |
| </frame> |
| |
| <frame name="frmContenido_2" bgcolor="#00000000" align="center" width="100%" height="5%" framebox="false" tmargin="12%"> |
| <prop name="MAP_VERSION" visible="1" type="T" locked="true" text-forecolor-disabled="#CECECE" text-border="false" labelwidth="0" width="100%" height="50%" text-align="left|center" fontsize="2" lpadding="100p" fontname="Nunito-Italic" /> |
| <prop name="MAP_FRAMEWORKVERSION" visible="1" type="T" locked="true" text-forecolor-disabled="#CECECE" text-border="false" labelwidth="0" width="100%" height="50%" text-align="left|center" fontsize="2" lpadding="100p" fontname="Nunito-Italic" /> |
| </frame> |
| <prop name="MAP_PWD" type="X" visible="0" hash-type="SHA256" encode="HEX" /> |
| <prop name="MAP_USUARIO_LDAP" type="X" visible="0" hash-type="SHA256" encode="HEX" /> |
| |
| </frame> |
| </group> |
| |
| |
| <after-edit refresh="false" show-wait-dialog="false"> |
| <action name="runscript"> |
| <script language="javascript"> |
| self.MAP_VERSION="Aplicación: " + appData.getGlobalMacro("##VERSION##") + " MID="+replica.getMid(); |
| self.MAP_FRAMEWORKVERSION = "Framework: " + appData.getGlobalMacro("##FRAME_VERSION##") + " IMEI: "+appData.getGlobalMacro("##DEVICEID##"); |
| |
| ui.refresh("MAP_USUARIO","MAP_VERSION","MAP_FRAMEWORKVERSION","MAP_CONTRASENNA"); |
| </script> |
| </action> |
| </after-edit> |
| |
| |
| <login refresh="false" show-wait-dialog="false"> |
| <action name="runscript"> |
| <script language="javascript"> |
| ui.showWaitDialog("Entrando..."); |
| |
| if(jsconst_oper.loginWithLDAP){ |
| //loginOnline |
| // ui.showToast("Entra aqui"); |
| LoginWithLDAP(self,self.MAP_USUARIO,self.MAP_CONTRASENNA,1); |
| }else{ |
| // ui.showToast("Entra aqui 2"); |
| comprobarLoginLocal(self,1); |
| } |
| |
| </script> |
| </action> |
| </login> |
| |
| |
| <onback refresh="false" show-wait-dialog="false"> |
| <action name="runscript"> |
| <script language="javascript"> |
| |
| </script> |
| </action> |
| </onback> |
| |
| |
| </code> |