xonecode 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +167 -0
- package/dist/agent/authEnDisco.js +56 -0
- package/dist/agent/authEnDisco.js.map +1 -0
- package/dist/agent/configEnDisco.js +109 -0
- package/dist/agent/configEnDisco.js.map +1 -0
- package/dist/agent/crearProyecto.js +34 -0
- package/dist/agent/crearProyecto.js.map +1 -0
- package/dist/agent/entorno.js +124 -0
- package/dist/agent/entorno.js.map +1 -0
- package/dist/agent/guionizado.js +53 -0
- package/dist/agent/guionizado.js.map +1 -0
- package/dist/agent/instantanea.js +129 -0
- package/dist/agent/instantanea.js.map +1 -0
- package/dist/agent/interrupts.js +83 -0
- package/dist/agent/interrupts.js.map +1 -0
- package/dist/agent/mensajes.js +24 -0
- package/dist/agent/mensajes.js.map +1 -0
- package/dist/agent/modelos.js +42 -0
- package/dist/agent/modelos.js.map +1 -0
- package/dist/agent/normalizar.js +20 -0
- package/dist/agent/normalizar.js.map +1 -0
- package/dist/agent/perfiles.js +103 -0
- package/dist/agent/perfiles.js.map +1 -0
- package/dist/agent/proyecto.js +107 -0
- package/dist/agent/proyecto.js.map +1 -0
- package/dist/agent/puente.js +142 -0
- package/dist/agent/puente.js.map +1 -0
- package/dist/agent/resumenDeTool.js +48 -0
- package/dist/agent/resumenDeTool.js.map +1 -0
- package/dist/agent/skills.js +65 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/textoDeTool.js +113 -0
- package/dist/agent/textoDeTool.js.map +1 -0
- package/dist/agent/turnoReal.js +173 -0
- package/dist/agent/turnoReal.js.map +1 -0
- package/dist/agent/verificador.js +65 -0
- package/dist/agent/verificador.js.map +1 -0
- package/dist/agent/xoneAgent.js +106 -0
- package/dist/agent/xoneAgent.js.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/aprobar.js +82 -0
- package/dist/cli/aprobar.js.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consola.js +346 -0
- package/dist/cli/consola.js.map +1 -0
- package/dist/cli/describe.js +53 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/doctor.js +45 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/main.js +520 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/markdown.js +90 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/run.js +164 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/spinner.js +89 -0
- package/dist/cli/spinner.js.map +1 -0
- package/dist/cli/stdio.js +193 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/tema.js +40 -0
- package/dist/cli/tema.js.map +1 -0
- package/dist/cli/verify.js +62 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/core/bitacora.js +30 -0
- package/dist/core/bitacora.js.map +1 -0
- package/dist/core/config.js +236 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextos.js +56 -0
- package/dist/core/contextos.js.map +1 -0
- package/dist/core/deps.js +51 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/diff.js +79 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/esqueleto.js +366 -0
- package/dist/core/esqueleto.js.map +1 -0
- package/dist/core/events.js +2 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/modelos.js +85 -0
- package/dist/core/modelos.js.map +1 -0
- package/dist/core/notify.js +106 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/ports.js +114 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/turno.js +127 -0
- package/dist/core/turno.js.map +1 -0
- package/dist/vendor/hitl.js +103 -0
- package/dist/vendor/hitl.js.map +1 -0
- package/dist/vendor/skillLoaders/catalog.js +74 -0
- package/dist/vendor/skillLoaders/catalog.js.map +1 -0
- package/dist/vendor/tokenTracking.js +58 -0
- package/dist/vendor/tokenTracking.js.map +1 -0
- package/package.json +41 -0
- package/skills/xone-debugging/SKILL.md +52 -0
- package/skills/xone-debugging/references/faq.md +561 -0
- package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
- package/skills/xone-development/SKILL.md +105 -0
- package/skills/xone-development/references/anti-patrones.md +94 -0
- package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
- package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
- package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
- package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
- package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
- package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
- package/skills/xone-development/references/datos/appdata.md +611 -0
- package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
- package/skills/xone-development/references/datos/http.md +366 -0
- package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
- package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
- package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
- package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
- package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
- package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
- package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
- package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
- package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
- package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
- package/skills/xone-development/references/indice-completo.md +77 -0
- package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
- package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
- package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
- package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
- package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
- package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
- package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
- package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
- package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
- package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
- package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
- package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
- package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
- package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
- package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
- package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
- package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
- package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
- package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
- package/skills/xone-development/references/tipos-de-prop.md +28 -0
- package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
- package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
- package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
- package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
- package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
- package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
- package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
- package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
- package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
- package/skills/xone-development/references/xml-ui/mapas.md +685 -0
- package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
- package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
- package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
- package/skills/xone-plan-builder/SKILL.md +183 -0
- package/skills/xone-plan-builder/agents/openai.yaml +5 -0
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
- package/skills/xone-project-generator/SKILL.md +111 -0
- package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
- package/skills/xone-project-generator/references/colecciones-base.md +16 -0
- package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
- package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
- package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
- package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
- package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
- package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
- package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
- package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
- package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
- package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
- package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
- package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
- package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
- package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
- package/skills/xone-review/SKILL.md +189 -0
- package/skills/xone-spec-builder/SKILL.md +235 -0
- package/skills/xone-spec-builder/agents/openai.yaml +5 -0
- package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
- package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
- package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# Generación XOne — Fase 7: plantillas de pantalla base
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-project-generator/references/xone-project-generation-workflow.md` L2269–2562. Referencia de la skill; el índice está en [../SKILL.md](../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §7.1-7.3 orden de generación y preguntas previas · §7.4 plantilla EntradaApp.xne (obligatoria) · §7.5 MenuPrincipal.xne · §7.6 Login.xne
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### 7.1 Objetivo
|
|
10
|
+
|
|
11
|
+
Crear todas las pantallas de la aplicación como archivos `.xne` individuales. Cada pantalla define su UI, eventos y lógica.
|
|
12
|
+
|
|
13
|
+
Antes de generar pantallas, el agente debe responder estas preguntas clave:
|
|
14
|
+
|
|
15
|
+
### 7.2 Preguntas de Decisión Previas a la Generación
|
|
16
|
+
|
|
17
|
+
#### Pregunta 1: ¿La app tiene autologin o requiere login?
|
|
18
|
+
|
|
19
|
+
| Escenario | Configuración en app.xml | Pantallas a generar |
|
|
20
|
+
|-----------|--------------------------|---------------------|
|
|
21
|
+
| **Con login** | `autologon="false"` + nodo `<login-coll>` apuntando a `LoginColl` | Generar `Login.xne` |
|
|
22
|
+
| **Sin login / autologin** | `autologon="true"` | NO generar `Login.xne` |
|
|
23
|
+
|
|
24
|
+
```xml
|
|
25
|
+
<!-- app.xml CON login -->
|
|
26
|
+
<app autologon="false" ...>
|
|
27
|
+
<login-coll>
|
|
28
|
+
<item name="LoginColl" conditions="" />
|
|
29
|
+
</login-coll>
|
|
30
|
+
<entry-point>
|
|
31
|
+
<item name="EntradaApp" conditions="" />
|
|
32
|
+
</entry-point>
|
|
33
|
+
</app>
|
|
34
|
+
|
|
35
|
+
<!-- app.xml SIN login (autologin) -->
|
|
36
|
+
<app autologon="true" ...>
|
|
37
|
+
<entry-point>
|
|
38
|
+
<item name="EntradaApp" conditions="" />
|
|
39
|
+
</entry-point>
|
|
40
|
+
</app>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### Pregunta 2: ¿Cual es el punto de entrada de la app?
|
|
44
|
+
|
|
45
|
+
El punto de entrada es la primera coleccion que se muestra al usuario tras el arranque (o tras el login si lo hay). Se configura en el nodo `<entry-point>` de `app.xml`.
|
|
46
|
+
|
|
47
|
+
| Nombre habitual | Cuando usarlo |
|
|
48
|
+
|-----------------|---------------|
|
|
49
|
+
| `EntradaApp` | **El más usado.** Pantalla de bienvenida que luego navega al menu |
|
|
50
|
+
| `MenuPrincipal` | Cuando la app arranca directamente en el menu sin pantalla de bienvenida |
|
|
51
|
+
|
|
52
|
+
> **REGLA:** Preguntar siempre al usuario cual prefiere. Si no especifica, usar `EntradaApp` por convencion.
|
|
53
|
+
|
|
54
|
+
#### Pregunta 3: ¿La app necesita consola de replica?
|
|
55
|
+
|
|
56
|
+
**Siempre si.** La `ConsolaReplica` es una pantalla técnica obligatoria en todo proyecto XOne. Proporciona información del dispositivo, estado de la replica y herramientas de diagnostico. No es visible para el usuario final en produccion — se accede típicamente desde un botón oculto o menu de administracion.
|
|
57
|
+
|
|
58
|
+
### 7.3 Orden de Generación de Pantallas
|
|
59
|
+
|
|
60
|
+
Generar las pantallas en este orden:
|
|
61
|
+
|
|
62
|
+
| Orden | Pantalla | Archivo | Obligatoria |
|
|
63
|
+
|-------|----------|---------|-------------|
|
|
64
|
+
| 1 | Login | `Login.xne` | Solo si `autologon="false"` |
|
|
65
|
+
| 2 | Punto de entrada | `EntradaApp.xne` o `MenuPrincipal.xne` | **Si** |
|
|
66
|
+
| 3 | Consola | `Consola.xne` | **Si (siempre)**. Si la app usa replica: incluir todos los grupos (info replica, dispositivo, ficheros). Si no usa replica: incluir solo el grupo de información del dispositivo |
|
|
67
|
+
| 4 | Menu principal | `MenuPrincipal.xne` (si EntradaApp es el entry-point) | Según proyecto |
|
|
68
|
+
| 5+ | Pantallas de negocio | `Lista[Entidad].xne`, `Detalle[Entidad].xne`, etc. | Según requisitos |
|
|
69
|
+
|
|
70
|
+
**Pantallas de negocio comunes:**
|
|
71
|
+
|
|
72
|
+
| Pantalla | Archivo | Proposito |
|
|
73
|
+
|----------|---------|-----------|
|
|
74
|
+
| Lista | `Lista[Entidad].xne` | Listado de registros |
|
|
75
|
+
| Detalle | `Detalle[Entidad].xne` | Formulario de edición |
|
|
76
|
+
| Mapa | `Mapa[Entidad].xne` | Visualizacion en mapa |
|
|
77
|
+
| Configuración | `Configuración.xne` | Ajustes de la app |
|
|
78
|
+
| Dashboard | `Dashboard.xne` | Panel con gráficos |
|
|
79
|
+
|
|
80
|
+
### 7.4 Plantilla: EntradaApp.xne (OBLIGATORIA)
|
|
81
|
+
|
|
82
|
+
```xml
|
|
83
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
84
|
+
<!--
|
|
85
|
+
Pantalla de entrada de la aplicación
|
|
86
|
+
Esta es la primera pantalla que ve el usuario
|
|
87
|
+
-->
|
|
88
|
+
<coll name="EntradaApp" title="Bienvenido"
|
|
89
|
+
special="true" notab="true" show-toolbar="false">
|
|
90
|
+
|
|
91
|
+
<!-- Inicialización (se ejecuta una sola vez) -->
|
|
92
|
+
<create>
|
|
93
|
+
<action name="runscript">
|
|
94
|
+
<script language="javascript">
|
|
95
|
+
// Inicialización de la aplicación
|
|
96
|
+
</script>
|
|
97
|
+
</action>
|
|
98
|
+
</create>
|
|
99
|
+
|
|
100
|
+
<!-- Al abrir la pantalla, antes de pintar la UI -->
|
|
101
|
+
<before-edit>
|
|
102
|
+
<action name="runscript">
|
|
103
|
+
<script language="javascript">
|
|
104
|
+
// Código al abrir la pantalla
|
|
105
|
+
</script>
|
|
106
|
+
</action>
|
|
107
|
+
</before-edit>
|
|
108
|
+
|
|
109
|
+
<group name="grpPrincipal" id="1" class="groupNoTab">
|
|
110
|
+
<!-- Header con logo -->
|
|
111
|
+
<frame name="frmHeader" class="frameHeader">
|
|
112
|
+
<prop name="imgLogo" type="IMG" visible="7"
|
|
113
|
+
width="200p" height="80p" align="center"
|
|
114
|
+
path="./icons/app_icon.png" />
|
|
115
|
+
</frame>
|
|
116
|
+
|
|
117
|
+
<!-- Contenido principal -->
|
|
118
|
+
<frame name="frmBody" class="frameBody">
|
|
119
|
+
<prop name="lblNombreApp" type="L" visible="7"
|
|
120
|
+
width="100%" height="50p" align="center"
|
|
121
|
+
class="textoTitulo" title="Nombre de la App" />
|
|
122
|
+
|
|
123
|
+
<prop name="lblDescripcion" type="L" visible="7"
|
|
124
|
+
width="80%" height="30p" align="center"
|
|
125
|
+
class="textoSubtitulo" title="Descripción breve" />
|
|
126
|
+
|
|
127
|
+
<prop name="btnEntrar" type="B" visible="7"
|
|
128
|
+
width="80%" height="50p" align="center"
|
|
129
|
+
class="btnPrimario" title="Entrar" tmargin="30p"
|
|
130
|
+
onclick="ui.openEditView('MenuPrincipal');" />
|
|
131
|
+
</frame>
|
|
132
|
+
|
|
133
|
+
<!-- Versión -->
|
|
134
|
+
<frame name="frmFooter" class="frameFooter">
|
|
135
|
+
<prop name="lblVersion" type="L" visible="7"
|
|
136
|
+
width="100%" height="30p" align="center"
|
|
137
|
+
class="textoSubtitulo" title="v1.0.0" />
|
|
138
|
+
</frame>
|
|
139
|
+
</group>
|
|
140
|
+
|
|
141
|
+
<!-- Manejo del botón atrás -->
|
|
142
|
+
<onback>
|
|
143
|
+
<action name="runscript">
|
|
144
|
+
<script language="javascript">
|
|
145
|
+
if (confirmar("¿Desea salir de la aplicación?", "Salir")) {
|
|
146
|
+
appData.exit();
|
|
147
|
+
}
|
|
148
|
+
</script>
|
|
149
|
+
</action>
|
|
150
|
+
</onback>
|
|
151
|
+
</coll>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 7.5 Plantilla: MenuPrincipal.xne
|
|
155
|
+
|
|
156
|
+
```xml
|
|
157
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
158
|
+
<!--
|
|
159
|
+
Menu principal de la aplicación
|
|
160
|
+
Muestra las opciones de navegacion
|
|
161
|
+
-->
|
|
162
|
+
<coll name="MenuPrincipal" title="Menu"
|
|
163
|
+
special="true" notab="true" show-toolbar="false">
|
|
164
|
+
|
|
165
|
+
<create>
|
|
166
|
+
<action name="runscript">
|
|
167
|
+
<script language="javascript">
|
|
168
|
+
// Inicialización del menu
|
|
169
|
+
</script>
|
|
170
|
+
</action>
|
|
171
|
+
</create>
|
|
172
|
+
|
|
173
|
+
<group name="grpMenu" id="1" class="groupNoTab">
|
|
174
|
+
<!-- Header -->
|
|
175
|
+
<frame name="frmHeader" width="100%" height="120p"
|
|
176
|
+
bgcolor="#2196F3" align="center">
|
|
177
|
+
<prop name="lblTitulo" type="L" visible="7"
|
|
178
|
+
width="100%" height="50p" align="center"
|
|
179
|
+
forecolor="#FFFFFF" fontsize="18"
|
|
180
|
+
title="Menu Principal" />
|
|
181
|
+
</frame>
|
|
182
|
+
|
|
183
|
+
<!-- Opciones del menu -->
|
|
184
|
+
<frame name="frmOpciones" width="100%" height="100%"
|
|
185
|
+
scroll="true" bgcolor="#FFFFFF">
|
|
186
|
+
|
|
187
|
+
<!-- Opción 1 -->
|
|
188
|
+
<frame name="frmOpcion1" width="90%" height="80p"
|
|
189
|
+
align="center" tmargin="15p"
|
|
190
|
+
bgcolor="#F5F5F5" border-corner-radius="10">
|
|
191
|
+
<prop name="imgOpcion1" type="IMG" visible="7"
|
|
192
|
+
width="48p" height="48p" lmargin="15p"
|
|
193
|
+
path="./icons/ic_opcion1.png" />
|
|
194
|
+
<prop name="lblOpcion1" type="L" visible="7"
|
|
195
|
+
width="70%" height="48p" lmargin="15p"
|
|
196
|
+
newline="false" fontsize="14"
|
|
197
|
+
title="Opción 1" />
|
|
198
|
+
<prop name="btnOpcion1" type="B" visible="7"
|
|
199
|
+
width="100%" height="100%"
|
|
200
|
+
bgcolor="#00000000"
|
|
201
|
+
onclick="ui.openEditView('ListaEntidad');" />
|
|
202
|
+
</frame>
|
|
203
|
+
|
|
204
|
+
<!-- Repetir para cada opción del menu -->
|
|
205
|
+
</frame>
|
|
206
|
+
</group>
|
|
207
|
+
|
|
208
|
+
<onback>
|
|
209
|
+
<action name="runscript">
|
|
210
|
+
<script language="javascript">
|
|
211
|
+
if (confirmar("¿Desea salir de la aplicación?", "Salir")) {
|
|
212
|
+
appData.exit();
|
|
213
|
+
}
|
|
214
|
+
</script>
|
|
215
|
+
</action>
|
|
216
|
+
</onback>
|
|
217
|
+
</coll>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 7.6 Plantilla: Login.xne
|
|
221
|
+
|
|
222
|
+
```xml
|
|
223
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
224
|
+
<!--
|
|
225
|
+
Pantalla de login
|
|
226
|
+
-->
|
|
227
|
+
<coll name="LoginColl" title="" special="true" notab="true"
|
|
228
|
+
show-toolbar="false">
|
|
229
|
+
|
|
230
|
+
<group name="grpLogin" id="1" class="groupNoTab">
|
|
231
|
+
<frame name="frmLogin" width="100%" height="100%"
|
|
232
|
+
bgcolor="#FFFFFF" align="center">
|
|
233
|
+
|
|
234
|
+
<!-- Logo -->
|
|
235
|
+
<prop name="imgLogo" type="IMG" visible="1"
|
|
236
|
+
width="200p" height="80p" align="center"
|
|
237
|
+
tmargin="150p" path="./icons/app_icon.png" />
|
|
238
|
+
|
|
239
|
+
<!-- Campo usuario -->
|
|
240
|
+
<prop name="MAP_USUARIO" type="T" visible="1"
|
|
241
|
+
width="80%" height="50p" align="center"
|
|
242
|
+
tmargin="80p" labelwidth="0"
|
|
243
|
+
floating-tooltip="true" tooltip="Usuario"
|
|
244
|
+
class="textoEditable" />
|
|
245
|
+
|
|
246
|
+
<!-- Campo contraseña -->
|
|
247
|
+
<prop name="MAP_PASSWORD" type="X" visible="1"
|
|
248
|
+
width="80%" height="50p" align="center"
|
|
249
|
+
tmargin="20p" labelwidth="0"
|
|
250
|
+
floating-tooltip="true" tooltip="Contraseña"
|
|
251
|
+
show-password-visibility-toggle="true"
|
|
252
|
+
class="textoEditable" />
|
|
253
|
+
|
|
254
|
+
<!-- Botón login -->
|
|
255
|
+
<prop name="btnLogin" type="B" visible="1"
|
|
256
|
+
width="80%" height="50p" align="center"
|
|
257
|
+
tmargin="40p" class="btnPrimario"
|
|
258
|
+
title="Iniciar Sesion"
|
|
259
|
+
method="executenode(aceptarLogin)" />
|
|
260
|
+
</frame>
|
|
261
|
+
</group>
|
|
262
|
+
|
|
263
|
+
<!-- Evento de login -->
|
|
264
|
+
<aceptarLogin>
|
|
265
|
+
<action name="runscript">
|
|
266
|
+
<script language="javascript">
|
|
267
|
+
var sUsuario = cstr(self.MAP_USUARIO);
|
|
268
|
+
var sPassword = cstr(self.MAP_PASSWORD);
|
|
269
|
+
|
|
270
|
+
// Solo validamos el usuario: en XOne puede haber usuarios sin
|
|
271
|
+
// contraseña (perfiles invitado, kiosco) y, si la contraseña es
|
|
272
|
+
// incorrecta, el propio backend la rechaza vía onLoginFailed.
|
|
273
|
+
if (isEmpty(sUsuario)) {
|
|
274
|
+
ui.showToast("Introduzca el usuario");
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
appData.login({
|
|
279
|
+
userName: sUsuario,
|
|
280
|
+
password: sPassword,
|
|
281
|
+
entryPoint: "MenuPrincipal",
|
|
282
|
+
onLoginSuccessful: function() {
|
|
283
|
+
ui.showToast("Bienvenido!");
|
|
284
|
+
},
|
|
285
|
+
onLoginFailed: function() {
|
|
286
|
+
ui.showToast("Usuario o contraseña incorrectos");
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
</script>
|
|
290
|
+
</action>
|
|
291
|
+
</aceptarLogin>
|
|
292
|
+
|
|
293
|
+
<onback>
|
|
294
|
+
<action name="runscript">
|
|
295
|
+
<script language="javascript">
|
|
296
|
+
appData.exit();
|
|
297
|
+
</script>
|
|
298
|
+
</action>
|
|
299
|
+
</onback>
|
|
300
|
+
</coll>
|
|
301
|
+
```
|
|
302
|
+
|