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,477 @@
|
|
|
1
|
+
# Generación XOne — Fase 7: plantilla Consola.xne
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-project-generator/references/xone-project-generation-workflow.md` L2563–3032. Referencia de la skill; el índice está en [../SKILL.md](../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §7.7 plantilla Consola.xne completa (obligatoria)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### 7.7 Plantilla: Consola.xne (OBLIGATORIA)
|
|
10
|
+
|
|
11
|
+
La consola es una pantalla técnica presente en **todos** los proyectos XOne. No es pantalla principal — se accede desde un botón secundario, un menu de ajustes o similar. Su función es dar al soporte técnico (call center) toda la información necesaria para resolver los problemas del usuario.
|
|
12
|
+
|
|
13
|
+
**Una sola coleccion: `MenuConsolaReplica`**, con los grupos que correspondan según el proyecto:
|
|
14
|
+
|
|
15
|
+
| Grupo | Siempre / Solo con replica |
|
|
16
|
+
|-------|---------------------------|
|
|
17
|
+
| Drawer lateral (id=99) + Header fijo (id=98) | Siempre |
|
|
18
|
+
| **Grupo 1** — Datos del dispositivo | Siempre |
|
|
19
|
+
| **Grupo 2** — Logs de replica | Solo si hay replica |
|
|
20
|
+
| **Grupo 3** — Replica de ficheros (lista pendientes recibir/enviar) | Solo si hay replica |
|
|
21
|
+
| **Grupo 4** — Control de ficheros (botones fotos/envio) | Solo si hay replica |
|
|
22
|
+
| **Grupo 5** — Utilidades (envio de logs y BD al soporte) | Siempre |
|
|
23
|
+
|
|
24
|
+
> El Drawer lateral lista solo los grupos presentes. Si no hay replica, aparecen solo "Datos del dispositivo" y "Utilidades".
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
#### Plantilla completa: MenuConsolaReplica
|
|
29
|
+
|
|
30
|
+
```xml
|
|
31
|
+
<?xml version="1.0" encoding="iso-8859-15"?>
|
|
32
|
+
<xml>
|
|
33
|
+
<coll name="MenuConsolaReplica" title="Consola"
|
|
34
|
+
sql="SELECT t1.* FROM ##PREF##empresa t1"
|
|
35
|
+
objname="empresa" updateobj="empresa"
|
|
36
|
+
progid="ASData.CASBasicDataObj"
|
|
37
|
+
notab="true" group-swipe="true" special="false">
|
|
38
|
+
|
|
39
|
+
<prop name="MAP_CAPTUREIMG" type="T" visible="0" />
|
|
40
|
+
<prop name="MAP_OS" type="T" visible="0" />
|
|
41
|
+
<prop name="MAP_TAB" type="T" visible="0" />
|
|
42
|
+
<prop name="MAP_GROUP" type="N" visible="0" />
|
|
43
|
+
<prop name="MAP_TOTAL_PAGES" type="N" visible="0" />
|
|
44
|
+
|
|
45
|
+
<!-- ================================================================ -->
|
|
46
|
+
<!-- DRAWER lateral (menu de navegacion entre grupos) -->
|
|
47
|
+
<!-- ================================================================ -->
|
|
48
|
+
<group name="Drawer" id="99" drawer-orientation="left" width="65%" height="100%">
|
|
49
|
+
<frame name="barraLateral" bgcolor="#FFFFFF" framebox="false"
|
|
50
|
+
height="100%" align="top|left">
|
|
51
|
+
<prop name="MAP_BT_OPCION1_DR" title="1- Datos del dispositivo"
|
|
52
|
+
type="B" visible="1" method="ExecuteNode(irGrupo(1))" />
|
|
53
|
+
<!-- Solo si la app tiene replica: -->
|
|
54
|
+
<prop name="MAP_BT_OPCION2_DR" title="2- Logs de replica"
|
|
55
|
+
type="B" visible="1" method="ExecuteNode(irGrupo(2))" />
|
|
56
|
+
<prop name="MAP_BT_OPCION3_DR" title="3- Replica de ficheros"
|
|
57
|
+
type="B" visible="1" method="ExecuteNode(irGrupo(3))" />
|
|
58
|
+
<prop name="MAP_BT_OPCION4_DR" title="4- Control de ficheros"
|
|
59
|
+
type="B" visible="1" method="ExecuteNode(irGrupo(4))" />
|
|
60
|
+
<!-- Siempre: -->
|
|
61
|
+
<prop name="MAP_BT_OPCION5_DR" title="5- Utilidades"
|
|
62
|
+
type="B" visible="1" method="ExecuteNode(irGrupo(5))" />
|
|
63
|
+
</frame>
|
|
64
|
+
</group>
|
|
65
|
+
|
|
66
|
+
<!-- ================================================================ -->
|
|
67
|
+
<!-- HEADER fijo -->
|
|
68
|
+
<!-- ================================================================ -->
|
|
69
|
+
<group name="Menu" id="98" fixed="true" orientation="top" height="10%">
|
|
70
|
+
<frame name="frmHeader" bgcolor="#93B359" align="left|center"
|
|
71
|
+
width="100%" height="100%">
|
|
72
|
+
<prop name="MAP_BTN_DRAWER" type="B" img="icon_drawer.png"
|
|
73
|
+
labelwidth="0" title=" " onclick="ui.toggleGroup('99');" />
|
|
74
|
+
<prop name="MAP_BTN_ATRAS" type="B" img="atras.png"
|
|
75
|
+
labelwidth="0" title=" " method="ExecuteNode(onback)" newline="false" />
|
|
76
|
+
<prop name="MAP_TAB" type="T" visible="1" width="60%" newline="false" />
|
|
77
|
+
</frame>
|
|
78
|
+
</group>
|
|
79
|
+
|
|
80
|
+
<!-- ================================================================ -->
|
|
81
|
+
<!-- GRUPO 1: Datos del dispositivo (SIEMPRE) -->
|
|
82
|
+
<!-- ================================================================ -->
|
|
83
|
+
<group name="Device" id="1" bgcolor="#E7E7E7" onfocus="ExecuteNode(irGrupo(1))">
|
|
84
|
+
<frame name="frmDevice" width="100%" height="100%" scroll="true">
|
|
85
|
+
<prop name="MAP_VERSIONAPP" type="T" visible="1" title="Versión aplicación:" locked="true" />
|
|
86
|
+
<prop name="MAP_VERSIONFRAME" type="T" visible="1" title="Versión framework:" locked="true" />
|
|
87
|
+
<prop name="MAP_VERSIONCODE" type="T" visible="1" title="Versión code:" locked="true" />
|
|
88
|
+
<prop name="MAP_MID" type="T" visible="1" title="MID dispositivo:" locked="true" />
|
|
89
|
+
<prop name="MAP_IMEI" type="T" visible="1" title="IMEI:" locked="true" />
|
|
90
|
+
<prop name="MAP_DISPOSITIVO" type="T" visible="1" title="Modelo:" locked="true" />
|
|
91
|
+
<prop name="MAP_FABRICANTE" type="T" visible="1" title="Fabricante:" locked="true" />
|
|
92
|
+
<prop name="MAP_DEVICE_TYPE" type="T" visible="1" title="Tipo dispositivo:" locked="true" />
|
|
93
|
+
<prop name="MAP_OS" type="T" visible="1" title="Sistema operativo:" locked="true" />
|
|
94
|
+
<prop name="MAP_OS_VERSION" type="T" visible="1" title="Versión SO:" locked="true" />
|
|
95
|
+
<prop name="MAP_ORIENTATION_SCREEN" type="T" visible="1" title="Orientación:" locked="true" />
|
|
96
|
+
<prop name="MAP_DENSITY" type="T" visible="1" title="Tipo densidad:" locked="true" />
|
|
97
|
+
<prop name="MAP_DENSITY2" type="T" visible="1" title="Densidad:" locked="true" />
|
|
98
|
+
<prop name="MAP_RESOLUTIONWIDTH" type="T" visible="1" title="Resol. ancho:" locked="true" />
|
|
99
|
+
<prop name="MAP_RESOLUTIONHEIGHT" type="T" visible="1" title="Resol. alto:" locked="true" />
|
|
100
|
+
</frame>
|
|
101
|
+
</group>
|
|
102
|
+
|
|
103
|
+
<!-- ================================================================ -->
|
|
104
|
+
<!-- GRUPO 2: Logs de replica + cola de operaciones (SOLO REPLICA) -->
|
|
105
|
+
<!-- ================================================================ -->
|
|
106
|
+
<group name="ReplicaDatos" id="2" bgcolor="#E7E7E7" onfocus="ExecuteNode(irGrupo(2))">
|
|
107
|
+
<frame name="frmReplicaDatos" width="100%" height="450p" scroll="true">
|
|
108
|
+
<prop name="MAP_CMDDATE" type="T" visible="1" title="Fecha ultima conexión:" locked="true" />
|
|
109
|
+
<prop name="MAP_RECORDSRX" type="T" visible="1" title="Operaciones recibidas:" locked="true" />
|
|
110
|
+
<prop name="MAP_RECORDSTX" type="T" visible="1" title="Operaciones enviadas:" locked="true" />
|
|
111
|
+
<prop name="MAP_RECORDSPEND" type="T" visible="1" title="Operaciones pendientes:" locked="true" />
|
|
112
|
+
<frame name="frmLog" width="98%" height="50%" lmargin="1%"
|
|
113
|
+
framebox="true" border-corner-radius="10" scroll="true">
|
|
114
|
+
<prop name="MAP_LOG" type="T" visible="1" labelwidth="0"
|
|
115
|
+
locked="true" lines="5" text-border="false" />
|
|
116
|
+
</frame>
|
|
117
|
+
</frame>
|
|
118
|
+
<!-- Cola de operaciones pendientes de replica -->
|
|
119
|
+
<frame name="frmOperQueue" width="100%" height="650p">
|
|
120
|
+
<prop name="MAP_TITLECOLA" type="L" title="Cola de operaciones pendientes:" />
|
|
121
|
+
<prop name="@OperQueue" type="Z" visible="1" locked="true"
|
|
122
|
+
contents="OperQueue" width="96%" lmargin="2%" />
|
|
123
|
+
<contents name="OperQueue" src="ContentOperQueue" />
|
|
124
|
+
</frame>
|
|
125
|
+
<frame name="frmBottomReplica" width="100%" height="13%" align="center|center">
|
|
126
|
+
<prop name="MAP_BT_REPLICAR" type="B" title="Replicar"
|
|
127
|
+
method="ExecuteNode(replicar)" width="40%" height="50%" />
|
|
128
|
+
<prop name="MAP_BT_COMPARTIR" type="B" title="Compartir"
|
|
129
|
+
method="ExecuteNode(compartir)"
|
|
130
|
+
width="40%" height="50%" newline="false" lmargin="5%" />
|
|
131
|
+
</frame>
|
|
132
|
+
</group>
|
|
133
|
+
|
|
134
|
+
<!-- ================================================================ -->
|
|
135
|
+
<!-- GRUPO 3: Lista de ficheros pendientes (SOLO REPLICA) -->
|
|
136
|
+
<!-- ================================================================ -->
|
|
137
|
+
<group name="ReplicaFicheros" id="3" bgcolor="#E7E7E7" onfocus="ExecuteNode(irGrupo(3))">
|
|
138
|
+
<frame name="frmReplicaFicheros" height="87%">
|
|
139
|
+
<prop name="MAP_TITLETOTAL" type="L" title="Ficheros pendientes recibir:"
|
|
140
|
+
visible="1" width="40%" />
|
|
141
|
+
<prop name="MAP_TOTAL" type="N" visible="1" newline="false"
|
|
142
|
+
width="50%" locked="true" />
|
|
143
|
+
<frame name="frmListaRecibir" width="100%" height="40%" scroll="true">
|
|
144
|
+
<prop name="replicafile" type="Z" visible="1" contents="replicafile"
|
|
145
|
+
width="100%" height="100%" locked="true"
|
|
146
|
+
disablevisible="MAP_OS='ios'" />
|
|
147
|
+
<contents name="replicafile" src="ContentReplicaFiles"
|
|
148
|
+
filter="STATUS!=201 AND REPLICATYPE=0" />
|
|
149
|
+
</frame>
|
|
150
|
+
<prop name="MAP_TITLETOTAL_ENV" type="L" title="Ficheros pendientes enviar:"
|
|
151
|
+
visible="1" width="40%" />
|
|
152
|
+
<prop name="MAP_TOTAL_ENV" type="N" visible="1" newline="false"
|
|
153
|
+
width="50%" locked="true" />
|
|
154
|
+
<frame name="frmListaEnviar" width="100%" height="40%" scroll="true">
|
|
155
|
+
<prop name="replicafile_ENV" type="Z" visible="1" contents="replicafile_ENV"
|
|
156
|
+
width="100%" height="100%" locked="true"
|
|
157
|
+
disablevisible="MAP_OS='ios'" />
|
|
158
|
+
<contents name="replicafile_ENV" src="ContentReplicaFiles"
|
|
159
|
+
filter="STATUS!=201 AND REPLICATYPE=1" />
|
|
160
|
+
</frame>
|
|
161
|
+
</frame>
|
|
162
|
+
<frame name="frmBottomFicheros" width="100%" height="13%" align="center|center">
|
|
163
|
+
<prop name="MAP_BT_REPLICAR2" type="B" title="Replicar"
|
|
164
|
+
method="ExecuteNode(replicar)" width="40%" height="50%" />
|
|
165
|
+
<prop name="MAP_BT_COMPARTIR2" type="B" title="Compartir"
|
|
166
|
+
method="ExecuteNode(compartir)"
|
|
167
|
+
width="40%" height="50%" newline="false" lmargin="5%" />
|
|
168
|
+
</frame>
|
|
169
|
+
</group>
|
|
170
|
+
|
|
171
|
+
<!-- ================================================================ -->
|
|
172
|
+
<!-- GRUPO 4: Control de ficheros con botones (SOLO REPLICA) -->
|
|
173
|
+
<!-- ================================================================ -->
|
|
174
|
+
<group name="ControlFicheros" id="4" bgcolor="#E7E7E7" onfocus="ExecuteNode(irGrupo(4))">
|
|
175
|
+
<frame name="frmCenter" width="100%" height="100%" align="top|center">
|
|
176
|
+
<prop type="B" name="Ok99" img="hacer_foto.png"
|
|
177
|
+
title="HACER FOTO"
|
|
178
|
+
align="center" width="550p" height="150p" visible="1"
|
|
179
|
+
method="ExecuteNode(camera)" label-wrap="true" />
|
|
180
|
+
<prop type="B" name="Ok3" img="archivos_nocomienza.png"
|
|
181
|
+
title="FOTOS SIN ENVIO INICIADO"
|
|
182
|
+
align="center" width="550p" height="150p" visible="1"
|
|
183
|
+
method="ExecuteNode(verFicheros(nocomienza))" label-wrap="true" />
|
|
184
|
+
<prop type="B" name="Ok4" img="archivos_enproceso.png"
|
|
185
|
+
title="FOTOS EN PROCESO DE ENVIO"
|
|
186
|
+
align="center" width="550p" height="150p" visible="1"
|
|
187
|
+
method="ExecuteNode(verFicheros(enproceso))" label-wrap="true" />
|
|
188
|
+
<prop type="B" name="Ok10" img="archivos_enviados.png"
|
|
189
|
+
title="FOTOS ENVIADAS A LA CENTRAL"
|
|
190
|
+
align="center" width="550p" height="150p" visible="1"
|
|
191
|
+
method="ExecuteNode(verFicheros(enviados))" label-wrap="true" />
|
|
192
|
+
<prop type="B" name="Ok2" img="iniciar_replica.png"
|
|
193
|
+
title="INICIAR ENVIO DE FICHEROS"
|
|
194
|
+
align="center" width="550p" height="150p" visible="1"
|
|
195
|
+
method="ExecuteNode(replicar)" label-wrap="true" />
|
|
196
|
+
</frame>
|
|
197
|
+
</group>
|
|
198
|
+
|
|
199
|
+
<!-- ================================================================ -->
|
|
200
|
+
<!-- GRUPO 5: Utilidades - envio de diagnostico (SIEMPRE) -->
|
|
201
|
+
<!-- ================================================================ -->
|
|
202
|
+
<group name="Utilidades" id="5" bgcolor="#E7E7E7" onfocus="ExecuteNode(irGrupo(5))">
|
|
203
|
+
<frame name="frmUtilidades" align="top|center" height="100%">
|
|
204
|
+
<!-- Enviar log Android (oculto en iOS) -->
|
|
205
|
+
<prop name="MAP_BT_ENVIAR_LOG" type="B" visible="1"
|
|
206
|
+
title="Enviar log" width="90%" height="10%"
|
|
207
|
+
onclick="javascript:doDebugTools(0);"
|
|
208
|
+
disablevisible="MAP_OS='IOS' OR MAP_OS='ios'" />
|
|
209
|
+
<!-- Enviar base de datos -->
|
|
210
|
+
<prop name="MAP_BT_ENVIAR_BD" type="B" visible="1"
|
|
211
|
+
title="Enviar base de datos" width="90%" height="10%"
|
|
212
|
+
onclick="javascript:doDebugTools(1);" />
|
|
213
|
+
<!-- Enviar BD debug replica (solo Android) -->
|
|
214
|
+
<prop name="MAP_BT_ENVIAR_BD_REP" type="B" visible="1"
|
|
215
|
+
title="Enviar BD depuracion replica" width="90%" height="10%"
|
|
216
|
+
onclick="javascript:doDebugTools(2);"
|
|
217
|
+
disablevisible="MAP_OS='IOS' OR MAP_OS='ios'" />
|
|
218
|
+
<!-- Enviar BD debug ficheros (solo Android) -->
|
|
219
|
+
<prop name="MAP_BT_ENVIAR_BD_FIC" type="B" visible="1"
|
|
220
|
+
title="Enviar BD depuracion ficheros" width="90%" height="10%"
|
|
221
|
+
onclick="javascript:doDebugTools(3);"
|
|
222
|
+
disablevisible="MAP_OS='IOS' OR MAP_OS='ios'" />
|
|
223
|
+
</frame>
|
|
224
|
+
</group>
|
|
225
|
+
|
|
226
|
+
<!-- ================================================================ -->
|
|
227
|
+
<!-- before-edit: cargar macros del dispositivo e inicializar datos -->
|
|
228
|
+
<!-- ================================================================ -->
|
|
229
|
+
<before-edit>
|
|
230
|
+
<action name="setval" field="MAP_VERSIONAPP" value="##VERSION##" />
|
|
231
|
+
<action name="setval" field="MAP_VERSIONFRAME" value="##FRAME_VERSION##" />
|
|
232
|
+
<action name="setval" field="MAP_VERSIONCODE" value="##FRAME_VERSION_CODE##" />
|
|
233
|
+
<action name="setval" field="MAP_DISPOSITIVO" value="##DEVICE_MODEL##" />
|
|
234
|
+
<action name="setval" field="MAP_FABRICANTE" value="##DEVICE_MANUFACTURER##" />
|
|
235
|
+
<action name="setval" field="MAP_DEVICE_TYPE" value="##DEVICE_TYPE##" />
|
|
236
|
+
<action name="setval" field="MAP_IMEI" value="##DEVICEID##" />
|
|
237
|
+
<action name="setval" field="MAP_MID" value="##MID##" />
|
|
238
|
+
<action name="setval" field="MAP_ORIENTATION_SCREEN" value="##CURRENT_ORIENTATION##" />
|
|
239
|
+
<action name="setval" field="MAP_OS" value="##DEVICE_OS##" />
|
|
240
|
+
<action name="setval" field="MAP_OS_VERSION" value="##DEVICE_OSVERSION##" />
|
|
241
|
+
<action name="setval" field="MAP_DENSITY" value="##CURRENT_DENSITY##" />
|
|
242
|
+
<action name="setval" field="MAP_DENSITY2" value="##CURRENT_DENSITY_VALUE##" />
|
|
243
|
+
<action name="setval" field="MAP_RESOLUTIONWIDTH" value="##SCREEN_RESOLUTION_WIDTH##" />
|
|
244
|
+
<action name="setval" field="MAP_RESOLUTIONHEIGHT" value="##SCREEN_RESOLUTION_HEIGHT##" />
|
|
245
|
+
<action name="runscript">
|
|
246
|
+
<script language="javascript">
|
|
247
|
+
// Activar flag de consola abierta (para el auto-refresh)
|
|
248
|
+
appData.getCurrentEnterprise().setVariable("ConsolaReplica", 1);
|
|
249
|
+
|
|
250
|
+
if (self.MAP_VERSIONCODE === "##FRAME_VERSION_CODE##") {
|
|
251
|
+
self.MAP_VERSIONCODE = "No disponible";
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Cargar datos de replica y ficheros
|
|
255
|
+
inicializarDatosReplica(self);
|
|
256
|
+
inicializarDatosReplicaFicheros(self);
|
|
257
|
+
|
|
258
|
+
// Iniciar auto-refresh cada 5 segundos
|
|
259
|
+
ui.executeActionAfterDelay("refreshDatosReplica", 1);
|
|
260
|
+
</script>
|
|
261
|
+
</action>
|
|
262
|
+
</before-edit>
|
|
263
|
+
|
|
264
|
+
<!-- Navegar entre grupos y actualizar título del header -->
|
|
265
|
+
<irGrupo refresh="false" show-wait-dialog="false">
|
|
266
|
+
<action name="runscript">
|
|
267
|
+
<param name="parametro" />
|
|
268
|
+
<script language="javascript">
|
|
269
|
+
irGrupoConsolaReplica(parametro, self);
|
|
270
|
+
</script>
|
|
271
|
+
</action>
|
|
272
|
+
</irGrupo>
|
|
273
|
+
|
|
274
|
+
<!-- Lanzar replica manual -->
|
|
275
|
+
<replicar refresh="false" show-wait-dialog="false">
|
|
276
|
+
<action name="runscript">
|
|
277
|
+
<script language="javascript">
|
|
278
|
+
replica.start();
|
|
279
|
+
ui.showToast("Iniciando ciclo de replica");
|
|
280
|
+
</script>
|
|
281
|
+
</action>
|
|
282
|
+
</replicar>
|
|
283
|
+
|
|
284
|
+
<!-- Auto-refresh mientras la consola esta abierta -->
|
|
285
|
+
<refreshDatosReplica refresh="false" show-wait-dialog="false">
|
|
286
|
+
<action name="runscript">
|
|
287
|
+
<script language="javascript">
|
|
288
|
+
if (appData.getCurrentEnterprise().getVariable("ConsolaReplica") == 1) {
|
|
289
|
+
inicializarDatosReplica(self);
|
|
290
|
+
inicializarDatosReplicaFicheros(self);
|
|
291
|
+
ui.getView(self).refresh(
|
|
292
|
+
"MAP_RECORDSRX", "MAP_RECORDSTX", "MAP_RECORDSPEND",
|
|
293
|
+
"MAP_LOG", "MAP_CMDDATE",
|
|
294
|
+
"MAP_TOTAL", "MAP_TOTAL_ENV",
|
|
295
|
+
"replicafile", "replicafile_ENV"
|
|
296
|
+
);
|
|
297
|
+
ui.executeActionAfterDelay("refreshDatosReplica", 5);
|
|
298
|
+
}
|
|
299
|
+
</script>
|
|
300
|
+
</action>
|
|
301
|
+
</refreshDatosReplica>
|
|
302
|
+
|
|
303
|
+
<!-- Capturar pantalla y compartir -->
|
|
304
|
+
<compartir show-wait-dialog="false">
|
|
305
|
+
<action name="runscript">
|
|
306
|
+
<script language="javascript">
|
|
307
|
+
try {
|
|
308
|
+
ui.captureImage("MAP_CAPTUREIMG");
|
|
309
|
+
ui.shareData("Compartir byXOne", "", self.MAP_CAPTUREIMG);
|
|
310
|
+
} catch(ex) {}
|
|
311
|
+
</script>
|
|
312
|
+
</action>
|
|
313
|
+
</compartir>
|
|
314
|
+
|
|
315
|
+
<!-- Onback: desactivar flag y salir -->
|
|
316
|
+
<onback show-wait-dialog="false">
|
|
317
|
+
<action name="runscript">
|
|
318
|
+
<script language="javascript">
|
|
319
|
+
appData.getCurrentEnterprise().setVariable("ConsolaReplica", 0);
|
|
320
|
+
exitCollection();
|
|
321
|
+
</script>
|
|
322
|
+
</action>
|
|
323
|
+
</onback>
|
|
324
|
+
|
|
325
|
+
</coll>
|
|
326
|
+
</xml>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
#### Coleccion ContentOperQueue — Cola de Operaciones Pendientes
|
|
332
|
+
|
|
333
|
+
Muestra las operaciones INSERT/UPDATE/DELETE pendientes en `master_replica_queue`. Se usa como contents en el Grupo 2.
|
|
334
|
+
|
|
335
|
+
```xml
|
|
336
|
+
<coll name="ContentOperQueue" title="OperQueue"
|
|
337
|
+
sql="SELECT
|
|
338
|
+
CASE WHEN t1.OPER=1 THEN 'INSERT'
|
|
339
|
+
WHEN t1.OPER=2 THEN 'DELETE'
|
|
340
|
+
WHEN t1.OPER=3 THEN 'UPDATE'
|
|
341
|
+
END AS MAP_OPER,
|
|
342
|
+
t1.SQL AS MAP_SQL
|
|
343
|
+
FROM master_replica_queue t1"
|
|
344
|
+
userawsql="true"
|
|
345
|
+
objname="empresa" updateobj="empresa"
|
|
346
|
+
progid="ASData.CASBasicDataObj"
|
|
347
|
+
cell-odd-color="#FFFFFF" cell-even-color="#F2F2F2">
|
|
348
|
+
<group name="General" id="1">
|
|
349
|
+
<prop name="MAP_OPER" class="classgrid" width="30%" />
|
|
350
|
+
<prop name="MAP_SQL" class="classgrid" newline="false" width="68%" />
|
|
351
|
+
</group>
|
|
352
|
+
</coll>
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
#### Coleccion ContentReplicaFiles — Ficheros con barra de progreso
|
|
356
|
+
|
|
357
|
+
Muestra los ficheros en proceso de envio con barra de progreso visual usando `##FLD_MAP_CALCULOBLOCK##` como ancho dinámico.
|
|
358
|
+
|
|
359
|
+
```xml
|
|
360
|
+
<coll name="ContentReplicaFiles" fontsize="8" title="ReplicaFiles"
|
|
361
|
+
show-toolbar="false" notab="true"
|
|
362
|
+
objname="master_replica_files" updateobj="master_replica_files"
|
|
363
|
+
progid="ASData.CASBasicDataObj"
|
|
364
|
+
sql="SELECT * FROM master_replica_files"
|
|
365
|
+
connection="Info_ReplicaFiles"
|
|
366
|
+
loadall="false" editmask="8"
|
|
367
|
+
check-owner="false" dependent="false">
|
|
368
|
+
<group name="General" id="1">
|
|
369
|
+
<frame name="page_contact" width="100%" height="100%" bgcolor="#FFFFFF">
|
|
370
|
+
<prop name="LICENSE" type="T" visible="7" locked="true" labelwidth="0" title="Licencia:" />
|
|
371
|
+
<prop name="FILENAME" type="T" visible="7" locked="true" labelwidth="0" title="Nombre:" />
|
|
372
|
+
<prop name="STATUS" type="N" visible="7" locked="true" labelwidth="0" title="Status:" align="center" />
|
|
373
|
+
<prop name="MAP_CALCULOBLOCK" type="N" visible="7" locked="true" labelwidth="0" title="Porciento:" align="center" newline="false" />
|
|
374
|
+
<prop name="BLOCK" type="N" visible="7" locked="true" labelwidth="0" title="B.Tras:" align="center" newline="false" />
|
|
375
|
+
<prop name="BLOCKS" type="N" visible="7" locked="true" labelwidth="0" title="Total:" align="center" newline="false" />
|
|
376
|
+
<!-- Barra de progreso: ancho dinámico según porcentaje -->
|
|
377
|
+
<frame name="progress_frame" width="100" height="30"
|
|
378
|
+
framebox="true" bgcolor="#505050" align="left|center">
|
|
379
|
+
<frame name="progress_bar" width="##FLD_MAP_CALCULOBLOCK##" height="28"
|
|
380
|
+
framebox="true" bgcolor="#FF0000" align="left|center">
|
|
381
|
+
<prop name="MAP_TL" type="L" visible="0" labelwidth="1" locked="true" title="" />
|
|
382
|
+
</frame>
|
|
383
|
+
</frame>
|
|
384
|
+
</frame>
|
|
385
|
+
</group>
|
|
386
|
+
</coll>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
> **NOTA:** `master_replica_files` y `master_replica_queue` son tablas internas del sistema XOne. No requieren definición en el modelo de datos del proyecto.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
#### Funciones JavaScript requeridas en functions.js
|
|
395
|
+
|
|
396
|
+
```javascript
|
|
397
|
+
// Envia información de diagnostico al servidor de soporte
|
|
398
|
+
// método: 0=log Android, 1=BD, 2=BD replica debug, 3=BD ficheros debug
|
|
399
|
+
function doDebugTools(metodo) {
|
|
400
|
+
var urlLog = "https://xoneisp.com/XoneLogRec/reclog.aspx";
|
|
401
|
+
var debugTools = new DebugTools();
|
|
402
|
+
if (typeof debugTools === "undefined") {
|
|
403
|
+
ui.showToast("Funcion no implementada en IOS");
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
var message, result;
|
|
407
|
+
switch (metodo) {
|
|
408
|
+
case 0: message = "el log de android";
|
|
409
|
+
result = debugTools.sendLog(urlLog); break;
|
|
410
|
+
case 1: message = "la base de datos";
|
|
411
|
+
result = debugTools.sendDatabase(urlLog); break;
|
|
412
|
+
case 2: message = "la base de datos de depuracion";
|
|
413
|
+
result = debugTools.sendReplicaDebugDatabase(urlLog); break;
|
|
414
|
+
case 3: message = "la base de datos de depuracion de ficheros";
|
|
415
|
+
result = debugTools.sendReplicaFilesDatabase(urlLog); break;
|
|
416
|
+
}
|
|
417
|
+
ui.showToast(result === -1 ? "No se pudo enviar " + message : "Enviado correctamente.");
|
|
418
|
+
debugTools = null;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Navega entre grupos de la consola y actualiza el título del header
|
|
422
|
+
function irGrupoConsolaReplica(parametro, objself) {
|
|
423
|
+
try {
|
|
424
|
+
switch (parametro) {
|
|
425
|
+
case '1': objself.MAP_TAB = "Datos del dispositivo 1/5"; break;
|
|
426
|
+
case '2': objself.MAP_TAB = "Logs de replica 2/5"; break;
|
|
427
|
+
case '3': objself.MAP_TAB = "Replica de ficheros 3/5"; break;
|
|
428
|
+
case '4': objself.MAP_TAB = "Control de ficheros 4/5"; break;
|
|
429
|
+
case '5': objself.MAP_TAB = "Utilidades 5/5"; break;
|
|
430
|
+
}
|
|
431
|
+
ui.hideGroup('99');
|
|
432
|
+
ui.showGroup(parametro);
|
|
433
|
+
ui.getView(objself).refresh("MAP_TAB");
|
|
434
|
+
} catch(e) {
|
|
435
|
+
writelogExceptionJSv2("irGrupoConsolaReplica ERROR: " + e.message, "functions.js", false);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// Carga los datos de replica en los campos MAP_ de la consola
|
|
440
|
+
function inicializarDatosReplica(coll) {
|
|
441
|
+
if (appData.getGlobalMacro("##DEVICE_OS##") === "android") {
|
|
442
|
+
coll.MAP_RECORDSRX = replica.getRecordsRX() + "/" + replica.getTotalRecordsRX();
|
|
443
|
+
coll.MAP_RECORDSTX = replica.getRecordsTX() + "/" + replica.getTotalRecordsTX();
|
|
444
|
+
coll.MAP_RECORDSPEND = replica.getRecordsPend();
|
|
445
|
+
coll.MAP_LOG = replica.getLog();
|
|
446
|
+
var replicaCMDLOG = appData.getCollection("ReplicaCmdLog");
|
|
447
|
+
replicaCMDLOG.loadAll();
|
|
448
|
+
coll.MAP_CMDDATE = replicaCMDLOG.getCount() > 0
|
|
449
|
+
? replicaCMDLOG.getItem(0).CMDTIME
|
|
450
|
+
: "Nunca";
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Carga los contadores de ficheros pendientes de replica
|
|
455
|
+
function inicializarDatosReplicaFicheros(objself) {
|
|
456
|
+
if (appData.getGlobalMacro("##DEVICE_OS##") === "android") {
|
|
457
|
+
var fc = objself.getContents("replicafile");
|
|
458
|
+
fc.loadAll();
|
|
459
|
+
objself.MAP_TOTAL = fc.getCount();
|
|
460
|
+
|
|
461
|
+
var fe = objself.getContents("replicafile_ENV");
|
|
462
|
+
fe.loadAll();
|
|
463
|
+
objself.MAP_TOTAL_ENV = fe.getCount();
|
|
464
|
+
|
|
465
|
+
ui.getView(objself).refresh(
|
|
466
|
+
"MAP_TOTAL", "MAP_TOTAL_ENV", "replicafile", "replicafile_ENV"
|
|
467
|
+
);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Arranca la replica y cierra la consola
|
|
472
|
+
function exitCollection() {
|
|
473
|
+
replica.start();
|
|
474
|
+
ui.getView(self).exit();
|
|
475
|
+
}
|
|
476
|
+
```
|
|
477
|
+
|