Nuevas funcionalidades:
  • Añadida compatibilidad para Android 7.0 (Nougat).
  • Se ha implementado los nuevos nodos <include-layout> para reutilizar código. Ejemplo de uso: <include-layout file="MiBarraDeBotones.xml"
  • Se ha implementado el nodo <onexpand> al content viewmode=“expanview”, para cuando se abra el hijo seleccionado.
  • Se ha implementado el nodo <oncollapse> al content viewmode=“expanview”, para cuando se cierre el hijo seleccionado.
  • Se ha implementado el nodo <after-edit>, se ejecuta después de pintar la ventana.
  • Se ha implementado soporte inicial con el futuro lanzamiento del XOneWebStudio. Permite lanzar aplicaciones.
  • Se ha implementado soporte para cambios “en caliente” con el nuevo XOneWebStudio. Permite aplicar cambios a atributos, colecciones y funciones mientras se programan, acelerando así el desarrollo.
  • Nuevos iconos.
Cambios:
  • Se han portado varios cuadros de diálogo con el estilo del sistema operativo
  • El entry-point no se tragará ya ciertos errores
  • Se ha mejorado el manejo de errores de mappings en general
Bugfixes:
  • Se ha añadido soporte para el type=“D”, type=“DT” y type=“TT” en Android 7.0 (Nougat)
  • Se han arreglado algunos errores relativos a métodos no expuestos en Javascript del objeto FileManager
  • El width y height se refrescan correctamente en los type=“NC”.
  • Se ha corregido un error en Android >= 6.X.X provocado por cambios en la API que impedía al replicador obtener el PIN correcto en dispositivos sin hardware de telefonía.
  • Se ha corregido varios errores al tratar de actualizar campos desde un hilo paralelo
  • Se ha corregido un problema en el parser de VBScript que entraba en bucle infinito al encontrarse un punto y coma en vez de mostrar error de sintaxis como corresponde
  • Arreglados varios detalles de las propiedades linkedto y linkedfield.
  • Solucionados varios errores en el content edit-inrow.
  • Múltiples bugfixes menores.
Nuevas funcionalidades:
  • Se ha añadido el método ui.isWifiConnected (retorna true o false) para saber si está conectado a una red wifi.
  • Se ha añadido el método getImageInfo al objeto ImageDrawing para obtener la resolución y el mime type de una imagen. Devuelve un objeto con los métodos getWidth, getHeight y getMimeType.
  • Se ha añadido métodos para pintar y editar líneas y rutas al type=“Z” viewmode=“mapview”.
  • Se ha añadido y expuesto a javascript el parser de XML DOMParser. La API es igual que en los navegadores web.
  • Se ha portado de BlackBerry 10 el método ui.isOnCall() para saber si se está en medio de una llamada telefónica.
  • Se ha añadido traducciones a rumano y búlgaro a los mensajes del framework y XOneLive.
Cambios:
  • Se ha sustituido el parser de XML por uno más eficiente.
  • Se ha sustituido el código de los mantenimientos para hacerlo más flexible y ahorrar batería en ciertas situaciones.
Bugfixes:
  • El objeto ImageDrawing no estaba calculando correctamente las coordenadas al añadir texto.
Bugfixes:
  • Corregido un error al aplicar la orientación de la ventana.
  • Corregido un error al aplicar el tamaño a los contents slideview.
Nuevas funcionalidades:
  • Ahora es posible mostrar distintas colecciones de entry-point y login-coll según las condiciones visuales del dispositivo, al estilo de los CSS (landscape, portrait, phone, tablet, hiphone, etc…).
  • La ventana de configuración del XOne Web Studio ahora obtiene también la dirección IP cuando se está en modo hotspot WiFi para enviarla al Web Studio al escanear el QRCode. No siempre es posible obtener la IP automáticamente, en cualquier caso siempre se puede añadir manualmente en el Web Studio.
  • La tabla master_replica_cmdlog local ahora registra más estados y errores de réplica.
  • La tabla master_replica_cmdlog local ahora soporta más de una aplicación y tendrá un registro por aplicación, en vez de uno solo. Cuando sea necesario en un entorno con varias aplicaciones en el mismo framework, aplicarle un WHERE APPNAME = 'nombre_aplicacion' a la consulta SQL de la colección.
  • Se ha implementado el método refreshValue() para refrescar únicamente el valor de una propiedad, sin aplicar estilos, fuentes, visibilidad, etc… Es útil a la hora de optimizar una aplicación. Está disponible en los objetos ui y ventana.
  • Se ha añadido soporte para ejecutar el framework en entornos Android for Work con Play Store. El framework se integra correctamente con nuestra nueva solución de MDM, disponible en un futuro próximo.
Cambios:
  • El antiguo mapa a pantalla completa (type=“Z” viewmode=“mapview”), que usaba APIs obsoletas, ha sido sustituido por el mapa incrustado nuevo. Se comporta igual que el antiguo, mostrando el botón y a pantalla completa.
  • Se ha cambiado la forma en la que se aplica la orientación a las ventanas de edición.
Bugfixes:
  • Se han corregido fugas de memoria en los servicios de réplica, gps, capa de datos ASData y en las abstracciones de base de datos con manejo de cursores. Esto se relaciona con el mensaje de error “Cursor window allocation of 2048 kb failed”.
  • Se han serializado la ejecución de mantenimientos para evitar posibles errores de concurrencia.
  • Se ha solucionado un error que bajo ciertas condiciones impedía al content viewmode=“gridview” ejecutar un selecteditem.
  • Se ha solucionado un error en el cual el atributo path en los type=“AT” y los type=“PH” con attach era ignorado en colecciones que contuvieran varios de estas propiedades.
  • Se han aplicado múltiples optimizaciones al framework en general y reducido su huella de memoria.
  • Múltiples bugfixes menores.
Nuevas funcionalidades:
  • Añadida compatibilidad para Android 7.0 (Nougat).
  • Se ha implementado los nuevos nodos <include-layout> para reutilizar código. Ejemplo de uso: <include-layout file=“MiBarraDeBotones.xml”>
  • Se ha implementado keep-aspect-ratio para los type=“IMG”.
  • Se ha implementado el nodo <onexpand> al content viewmode=“expanview”, para cuando se abra el hijo seleccionado.
  • Se ha implementado el nodo <oncollapse> al content viewmode=“expanview”, para cuando se cierre el hijo seleccionado.
  • Se ha implementado el nodo <after-edit>, se ejecuta después de pintar la ventana.
  • Añadido soporte mediante SDK oficial del escáner de codigos de barras integrado en los dispositivos Honeywell.
  • Se ha implementado soporte inicial con el futuro lanzamiento del XOneWebStudio. Permite lanzar aplicaciones.
  • Se ha implementado img-att, img-att-sel, img-delete y img-delete-sel en el type=“AT”.
  • Se ha implementado img-rotate y img-rotate-sel en el type=“PH”.
  • Nuevos iconos.
Cambios:
  • El entry-point no se tragará ya ciertos errores.
  • Se ha mejorado el manejo de errores de mappings en general.
  • Se han hecho pequeñas optimizaciones a los campos editables.
Bugfixes:
  • Se ha añadido soporte para el type=“D”, type=“DT” y type=“TT” en Android 7.0 (Nougat)
  • Múltiples bugfixes menores
  • Se ha arreglado algunos errores relativos a métodos no expuestos en Javascript del objeto FileManager
  • Se ha corregido un error en Android >= 6.X.X provocado por cambios en la API que impedía al replicador obtener el PIN correcto en dispositivos sin hardware de telefonía
  • Se ha corregido un problema que hacía que en algunos casos los messagebox reprodujeran el sonido antes de llegar a mostrar la ventana por primera vez
  • Se ha corregido un problema en el parser de VBScript que entraba en bucle infinito al encontrarse un punto y coma en vez de mostrar error de sintaxis como corresponde
  • Se ha corregido un problema que hacía que el type=“DT” y “VD” se ocultara
Nuevas funcionalidades
  • Se han añadido nuevos métodos al objeto replica para controlar la réplica de ficheros por WiFi o 3G.
  • El type=“DT” y type=“AT” ya no ignora width y height.
  • Nuevo atributo scale-fontsize=“true” para el nodo <app> para reescalar las fuentes en base a un factor en distintas pantallas.
  • Los action name=“setval” ahora funcionan con los type=“AT”, type=“WEB” y type=“PH”.
Cambios
  • Se ha cambiado el encoding de la réplica a windows-1252.
  • Ahora los botones ya no necesitan width y height para aplicar los atributos de padding.
Bugfixes
  • Solucionado un problema con los frame scroll=“true” cuando se creaban.
  • Solucionado un problema de refresco de elementos imágenes en un content.
  • Solucionado un problema de scroll en el type=“WEB” en Android ⇐ 5.1.X.
  • Otros arreglos menores.
Nuevas funcionalidades
  • Se ha añadido una nueva tabla master_replica_cmdlog a la base de datos de información de réplica local. Sólo contiene un registro. Sus campos son:
    1. HASERROR integer NOT NULL: Vale 1 si el último comando de réplica realizado tuvo error, en caso contrario 0.
    2. LASTCMD text NOT NULL: Texto con la descripción de la última acción.
    3. LASTERROR text NULL: Texto con la descripcion del error si lo hubo.
    4. CMDTIME date NOT NULL: La fecha y hora de la última acción.
    5. LASTSYNCOKTIME date NULL: La fecha y hora del último ciclo de réplica correcto y sin errores de ninguna clase.
Bugfixes
  • Se ha arreglado el soporte para el evento de grupo onfocus en versiones de Android obsoletas.
Nuevas funcionalidades
  • Nuevo objeto reservado para javascript $http para hacer consultas a un servicio web y obtener resultado.
  • Nuevo método de colección y de objeto loadFromJson(String sJson) para cargar una colección/objeto con una cadena JSON directamente.
Cambios
  • La generación de nombres de fichero aleatorios para la firma, foto, etc, se ha cambiado a un algoritmo que usa UUIDs para que haya mucha menos probabilidad de colisión. Recordar que siempre es posible cambiar manualmente el nombre del fichero con el objeto FileManager y luego en el campo antes de guardar el objeto.
Bugfixes
  • Se ha arreglado un problema con el salto del foco al pulsar siguiente en el teclado.
  • Se ha corregido un problema en los content que contenían una sola propiedad IMG.
Nuevas funcionalidades
  • Nuevo método ToFile del objeto FileManager para escribir un fichero a partir de una cadena en base64.
  • Nuevo método ToBase64 del objeto FileManager para escribir una cadena en base64 a partir de un fichero.
  • Nuevo atributo show-pois=“false” para el mapa incrustado para ocultar el botón de POIs y bloquear su drawer.
  • Se ha implementado soporte para el escáner de códigos del smartphone rugerizado Symbol TC70.
Bugfixes
  • Se ha solucionado un problema que provocaba que el servicio de SMS duplicara envíos.
Nuevas funcionalidades
  • Se ha implementado el atributo imgbk en el nodo colección.
  • Se ha implementado soporte para el escáner de códigos del smartphone rugerizado Symbol TC55.
  • Se ha implementado el método DrawMapRoute en el objeto ventana.
Cambios
  • Las funciones anónimas javascript ahora se identifican como tal en la ventana de error.
  • Las funciones callback javascript que tengan nombre ahora lo mostrarán en la ventana de error.
  • Optimización de la carga de imágenes en el content.
  • Optimización en la ejecución de los nodos onfocus y onlostfocus.
  • El framework avisará ahora cuando un <include> hace referencia a un fichero que no existe, y cuando el lenguaje especificado sea inexistente.
  • El framework avisará ahora cuando el lenguaje de scripting especificado en un sea inexistente.
  • El framework avisará ahora cuando el appwizard esté mal formado.
  • El framework avisará ahora cuando no se pudo obtener el id necesario para ui.RefreshContentRow.
  • El framework ya no solicitará que se active la localización por GPS si no dispone de hardware adecuado.
Bugfixes
  • Corregido un problema en el getValue()/setValue() en javascript que no convertía los tipos correctamente.
  • Corregido un problema por el cual se cacheaban incorrectamente las imágenes en un content si la URL llevaba parámetros.
  • Corregido un problema de encoding con varios mensajes del framework.
  • Corregido un problema con los parámetros de LaunchApplication.
  • Corregido un problema que provocaba que se pudiera pulsar en rápida sucesión un elemento del appwizard y lanzarlo varias veces.
  • Corregido un problema por el cual varios script en background podían ocultar la ventana de cargando.
  • Corregido un problema por el cual la réplica no detectaba correctamente la conexión activa si el adaptador wifi estaba deshabilitado.
  • Corregido un problema que provocaba un refresco global si se encadenaban varios refrescos selectivos.
  • Corregido un problema en el content edit-inrow en el que el valor introducido se perdía al hacer scroll si el campo de texto no había perdido el foco.
Nuevas funcionalidades
  • Se ha añadido la propiedad GMT_OFFSET al objeto SystemSettings.
  • Implementación inicial del debugguer Javascript.
  • Los ficheros de script globales ahora se pueden incluir en el nodo <app>.
  • Se ha añadido un nuevo viewmode=“slider” para los type=“N”. Muestra el valor de un type=“N” en forma de barra deslizante, se controla el valor máximo y mínimo con los atributos max=“100” y min=“0”.
  • Se ha añadido un nuevo viewmode=“rounded-slider” para los type=“N”. Muestra el type=“N” como el viewmode=“slider”, pero circular. Con clockwise=“true” se controla si se rota a en sentido horario o no.
  • Se ha implementado el atributo sound=“loquesea.wav” en los type=“B”, que reproducira dicho sonido al hacer click sobre el botón.
Cambios
  • Se ha incluido más información de debug cuando ocurre un error en un script Javascript.
  • El atributo default-language=“javascript” del nodo app también se aplica a los scripts inlineados en un atributo de eventos.
Bugfixes
  • Varias correcciones al motor Javascript.
  • Corregido un error en el sistema de eventos.
  • Se ha corregido un problema en el mapa incrustado.
  • Se ha corregido un problema en el parser de vbscript por el cual los decimales perdían precisión en cálculos complejos.
  • Se ha corregido un problema por el cual el onchange colgaba la aplicación si éste era provocado por un botón de showinline y éste contenía un message box.
  • Se ha corregido un problema al combinar los atributos fixed-text=“true” y upper=“true”/lower=“true”.
  • Se ha corregido un problema al aplicarle la altura a propiedades linkedto/linkedfield que no definían height.
  • Se ha corregido un error al distinguir mayúsculas/minúsculas en el atributo showinline-keyboard.
  • Al hacer OpenUrl este distinguía mayuscúlas en el esquema de la url innecesariamente.
Nueva funcionalidad, eventos

Se ha implementado el soporte inicial de eventos en objetos para controlar distintas funcionalidades en controles para ejecutar scripts y responder mejor a la interacción del usuario. De momento están implementados un número limitado de eventos, próximamente habrá más y se documentarán públicamente.

  • Implementado el método Bind() en objeto XOneDataObject y XOneWindow. Sirve para definir eventos.
  • Implementado el evento onClick en los botones. Similar a nuestro method=“ExecuteNode(node)”.
  • Implementado el evento onScroll en los frame con scroll=“true”, para responder a los eventos de scroll y responder, por ejemplo, a cuando se ha terminado de hacer scroll.
  • Implementado el evento onTextChanged en los type T. Responde a cada nuevo carácter introducido y provee de información sobre el texto anterior.
  • Implementado el evento onFocusChanged en los type T. Responde a cuando gana o pierde el foco un campo.
  • Los eventos pueden bindearse también a través de atributos. El valor del atributo del evento se evaluará directamente. Ejemplo para los botones: onclick=“javascript: invocoMiFuncion('hola', (2 + 2) * 3);”.
Nuevo tipo de objeto, XOneWindow

Este nuevo tipo de objeto representa la ventana visible al usuario de un XOneDataObject que está visible en modo de edición. Su utilidad es principalmente para poder ejecutar acciones y otros metodos que típicamente se aplicaban por defecto sólo a la ventana visible. Por ejemplo, se pueden refrescar campos de ventanas no visibles, aplicar el foco a campos y bindear eventos a los controles de dicha ventana.

  • Se ha implementado el método ui.getView(obj), para obtener el objeto ventana. Si dicho objeto todavía no tiene ventana, devolverá null.
  • Se ha implementado el método ventana.Refresh(), el clásico ui.Refresh pero aplicado a una ventana específica.
  • Se ha implementado el método ventana.Bind(), para soporte de eventos en la ventana.
  • Se ha implementado el método ventana.SetFocus, para darle foco a una propiedad concreta.
  • Se ha implementado el método ventana.PickFile, para usar la funcionalidad del type=“AT” mediante script.
Otras nuevas funcionalidades
  • Se ha implementado el método SetTimeout(nTimeout) al objeto de script BluetoothSerialPort. Si nTimeout ⇐ 0, se configurará tiempo de espera infinito.
  • Se ha implementado console.log() para javascript.-Se ha implementado un nuevo método ui.ReturnToForeground para que un script que se ejecute en el fondo pueda poner visible la última ventana.
  • Se ha implementado el atributo default-language=“” en el nodo <app> para cambiar el engine de scripting por defecto en nodos de botones, nodos <include>, etc. Sirve para poder omitir language=“javascript” en los nuevos proyectos que sean puramente javascript. Valores posibles: “javascript”, “vbscript”.
  • Se han aplicado varias mejoras a ui.ShowNotification, para notificaciones cuando la aplicación está cerrada.
  • Se han implementado los atributos img-checked/img-unchecked en los content edit-inrow.
  • Se ha implementado el atributo width en los type=“D” en los content edit-inrow.
  • Se han expuesto los métodos para editar colecciones en runtime en Javascript.
  • Añadido soporte para imágenes nine-patch, que no se deforman al reescalarse. Se puede usar el mismo editor de Android.
  • Se han implementado nuevos atributos para serializar de distintas formas los content cuando se usa el conector SOAP de webservices.
  • Portado hash-type=“bcrypt” para el type=“X”.
Cambios
  • El objeto de script BluetoothSerialPort configurará un timeout de 10 segundos por defecto, como en Windows Mobile.
  • Se ha activado por defecto el modo estricto al motor Javascript. Usar modo estricto obliga no declarar variables globales dentro de funciones y otras cosas que inducen a error.
  • Ahora group-swipe=“false” se aplica automáticamente si hay un solo grupo.
  • Se han hecho algunos cambios para que los type=“T” respeten correctamente los atributos lines y fixed-lines.
Bugfixes
  • Se ha solucionado un problema con teclados software personalizados.
  • Se ha solucionado un problema en el cálculo del tamaño de los frames scroll.
  • Se ha solucionado un problema por el cual la ventana de cargando podía no aparecer.
  • Se ha solucionado un problema con ui.StartPrint al invocarse tras haberse cerrado el proceso remoto del XOnePrinterServer.
  • Se ha corregido un error en el intérprete VBScript cuando se encadenaban llamadas.
  • Se ha corregido un error en el intérprete VBScript por el cual no se estaba aplicando la prioridad correcta en los operadores NOT y MOD.
  • Se ha implementado en el intérprete VBScript el manejo de operaciones bitwise para máscaras de bits.
  • Se ha solucionado un error con el sistema GPS.
  • Solucionados varios errores en el engine Javascript.
Nuevas funcionalidades
  • La ventana de cargando ahora también aplica el tema de la aplicación.
  • Se ha implementado el método GetHostname para el objeto de script replica. Se le puede pasar con parámetro el índice del hostname en el license.ini, si hubiera varios.
  • Se ha implementado el método GetLicenseNumber para el objeto de script replica. Devuelve la licencia.
  • Se ha implementado el método GetMid para el objeto de script replica. Devuelve el mid.
  • Se ha implementado el método GetDatabaseId para el objeto de script replica. Devuelve el dbid.
  • Se ha implementado el método GetChecksum para el objeto FileManager. Sirve para obtener el checksum de un fichero para verificar su integridad posteriormente.
Cambios
  • En Android >= Honeycomb, si por X motivo la base de datos está corrupta, Android ya no la borrará automáticamente. Su mensaje de error es ahora más claro.
  • Los mensajes de error “Debe instalar X plugin” cada vez que se hace CreateObject de un plugin sin estar instalado ahora ya no son forzados y se pueden ocultar con on error resume next y appData.error.clear, o con try-catch en caso de javascript.
  • Se ha mejorado la actualización de plugins en caliente, ahora ya no hace falta salir de la aplicación.
  • Se ha sustuido algunas partes de librerías obsoletas.
  • Los mensajes de error lanzados manualmente por un throw en código Javascript ahora sólo muestran el mensaje especificado, sin incluir información de debug. La información de debug se reserva para los errores sin controlar.
Bugfixes
  • Se ha solucionado un problema de scroll en grupos.
  • Se ha solucionado un problema al destruir ventanas en teléfonos LG.
  • Se ha solucionado un problema con los grupos fijos al cambiar de orientación la pantalla.
  • Se ha solucionado un problema con el tamaño del grupo fijo cuando se usaba la nueva forma de definirlo a nivel de grupo.
  • Se ha solucionado un problema en los content al hacer click sobre elementos especiales.
  • Se ha solucionado un error al cargar la aplicación.
  • Se ha solucionado un desperdicio de memoria en el método appData.WriteConsoleString.
  • En ciertos casos no se interrumpían los scripts pendientes al salir.
  • Varios arreglos al motor de Javascript.
  • Se ha solucionado un problema con el GPS. Podía ocurrir que se lanzase la ventana de activar las fuentes de ubicación más de una vez.
  • Se ha solucionado un problema con el cálculo de tamaños en un frame flotante.
Nuevas funcionalidades
  • Se ha implementado un servicio de envío de SMSs para asegurar su envío correcto.
  • Se ha implementado el atributo theme=“” a nivel de <app> para cambiar el tema global de la aplicación. Puede que no todos los temas estén disponibles según la versión de android, en cuyo caso aplicará el tema por defecto del dispositivo. Está disponible a nivel de <prop> para los showinline. Valores posibles: “classic”, “holo_light”, “holo_dark”, “device_default_light”, “device_default_dark”, “material_light”, “material_dark”.
  • Se ha implementado el refresco selectivo en los content edit-inrow.
  • Se puede cambiar el tema de los show-progress-dialog=“true” con el atributo “theme” en el nodo a ejecutar.
  • Se ha implementado postonchange en los botones del navigation drawer.
  • Se ha implementado el atributo LocationTrackingEnabled=true para el fichero app.ini. Permite la captura de GPS aún estando la aplicación XOne cerrada. Generará operaciones de réplica para dos tablas nuevas.
  • Se ha implementado el atributo gps-service-version=“v1” para forzar el uso del sistema GPS antiguo sin Google Play Services.
  • Se han implementado los atributos Username y Password en las cadenas de conexión SOA. Esto le añade una cabecera de seguridad WSSE a la petición.
Cambios
  • IMPORTANTE: Los atributos img-date-width/img-date-height y img-time-width/img-time-height para los campos de tipo fecha no estaban respetando el resolution-width/resolution-height ni le hacían caso a los tamaños en píxeles o porcentajes. Esto se ha corregido en esta versión, por favor revise su aplicación.
  • Los mensajes y recuadros del framework ahora muestran el tema por defecto asignado según la versión de Android. Hasta ahora siempre se mostraba el antiguo de Android 2.1. Se puede volver a forzar el tema clásico con el atributo theme=“classic” en el nodo <app>.
  • Cambios cosméticos menores al messagebox.
  • El método AsyncDownload del objeto FileManager muestra ahora una notificación de progreso.
  • Ciertos dispositivos podían elegir el cifrado más débil en vez de el más fuerte en las conexiones online. Esto se ha cambiado.
  • Varios arreglos al motor de javascript.
  • Las conexiones JSON tirarán un error más claro ahora cuando no haya conexión.
  • Se ha corregido un problema al introducir comillas en una propiedad con atributo contextual-filter=“true”.
Bugfixes
  • Se ha corregido un error en el mapview incrustado cuando éste pertenecía a un grupo no visible.
  • Se ha corregido un error en el mapview incrustado cuando se cargaba en segundo plano.
  • Se ha corregido un error por el cual los métodos del objeto DebugTools devolvían 0 aunque el envío fuera reportado incorrecto por la respuesta HTTP.
  • Se ha corregido un error al aplicar el cambio de orientación de la pantalla.
  • Se ha corregido un error en cual los content edit-inrow=“true” no cambiaba el foco correctamente al saltar de campo.
  • Se ha corregido un problema por el cual se mostraba una notificación la instalación de los Servicios de Google Play si estos no estaban disponibles.
  • Se ha arreglado una fuga de recursos en el conector SOA y otras funcionalidades que requieran de servicios SOA.
Buenas prácticas
  • Si bien un cliente puede querer forzar el tema clásico de Android 2.1 al que está acostumbrado, con el tema por defecto del dispositivo la aplicación visualmente se integra mejor con el resto de aplicaciones y el propio sistema operativo.
Nuevas funcionalidades:
  • Nuevo objeto de script BluetoothSerialPort, que permite la comunicación con un dispositivo bluetooth.
  • Nuevo atributo para el fichero app.ini, HideLoadAppProgressBar=true, que oculta la barra de carga de la aplicación y deja sólo el splash.
  • Nuevos atributos webview-username y webview-password para el type=“WEB”. Permite especificar un usuario y contraseña para autentificación web básica.
  • Nuevo atributo encoding para el type=“WEB”. Se usa cuando se carga directamente con un código HTML. Por defecto UTF-8
  • Nuevo atributo contextual-filter-when-empty para los campos de texto. Complementa a contextual-filter, cuando el valor es vacío.
  • Nuevo método UploadFile para el objeto FileManager para subir ficheros por http, método post. Soporta parámetros.
  • Se ha ampliado la funcionalidad del editor de colecciones en runtime añadiendo la posibilidad de buscar nodos por valor de atributo.
  • Se ha implementado la opción 1 (vbOkCancel) en el messagebox.
  • Los messagebox ahora controlan que no se pase el texto de tamaño ocupando toda la pantalla y hacen scroll tanto en título como en texto.
  • Ahora se acepta img-search, img-date, y img-width/img-height en las propiedades de los content edit-inrow.
Cambios:
  • Ahora la ventana del framework desaparecerá de la lista de aplicaciones recientes cuando se cierre la app. Antes sólo reiniciaba la aplicación y mostraba una previsualización de la última ventana, que ya no existía.
Bugfixes:
  • Varias correcciones menores a la maquinaria Javascript.
Nuevas funcionalidades:
  • Se ha añadido una nueva maquinaria de Javascript para poder ejecutar scripts en dicho lenguaje. Esta funcionalidad está en fase de pruebas.
  • Se ha añadido soporte para mappings y recursos encriptados.
  • Nuevo objeto de script AndroidIntent. Permite el envío de intents Android para interactuar con el SO u otras aplicaciones.
  • Nuevo objeto de script DeviceInfo. Permite obtener información diversa del dispositivo.
  • Nuevo objeto de script SystemSettings. Permite obtener algunos valores globales y de sistema del dispositivo en el que se ejecuta, de acuerdo a los valores en la documentación oficial de Android sobre la clase Settings.Global.
  • Nuevo objeto de script NativeObjectWrapper. Permite la creación fácil de plugins. Sólo Android.
  • Nuevo objeto de script AmazonAppStore. Permite las compras integradas con la tienda de apps de Amazon.
  • Nuevo atributo mapview-embedded=“true” para los type=“Z” viewmode=“mapview”, permite incrustar los mapas como si fuera un content normal más en vez del botón para lanzarlo a pantalla completa como antes.
  • Nuevo método ui.DrawMapRoute para dibujar por script una ruta en el mapa incrustado.
  • Nuevo atributo onenterkey=“ExecuteNode(ejemplo)” para los campos editables. Permite capturar la tecla Intro del teclado y ejecutar un nodo.
  • Nuevo atributo para el nodo <app> automatic-crash-report=“true” para enviar log automáticamente en caso de crash del teléfono. No es eficaz en todos los casos.
  • Nuevo atributo para el nodo <style> encoding=“” para poder leer los CSS en un encoding distinto al por defecto (el cual es ISO-8859-1).
  • Nuevo atributo input-type=“valor” para cambiar el tipo de teclado software que se muestra en un type=“T”. Valores posibles: “text”, “numeric”, “decimal”, “phone”, “datetime”, “email”.
  • Nuevo atributo para el nodo <group> fixed=“true”, que indica que es un grupo fijo, permitiendo usar múltiples grupos fijos. No es compatible con el atributo fixed-group a nivel de coll.
  • Nuevo atributo loglevel=“0” a nivel de nodo <app> para forzar desactivar todo el log que tira el framework al logcat.
  • Nuevo atributo debug-socket=“false” a nivel de nodo <app> para forzar desactivar el debugguer de script ignorando si se está en debug o release.
  • Nuevo atributo scrollbar-fading=“false” para los frames con scroll=“true” que evita que la barra de scroll desaparezca, siendo permanentemente visible.
  • Nuevo atributo zoom-controls=“false” para deshabilitar los botones de +/- en un type=“WEB”.
  • Nuevo atributo draggable-scrollbar al prop content que permite mostrar una barra de scroll que el usuario puede arrastrar para moverse rápido por el content.
  • Nuevo tipo de propiedad, type=“DR”. Permite hacer un dibujo sobre una superficie, sirve para tener un control firma incrustado en vez de a pantalla completa y otros propósitos.
  • Nuevo valor para el atributo method de los botones, “ExecuteVBScript”, para evaluar y ejecutar un script Visual Basic sin necesidad de definir un nodo.
  • Nuevo valor para el atributo method de los botones, “ExecuteJavascript”, para evaluar y ejecutar un script Javascript sin necesidad de definir un nodo.
  • Los type=“WEB” permiten ahora reproducción de vídeo a pantalla completa.
  • Los type=“WEB” ahora ya respetan los atributos de márgenes.
  • Los type=“VD” ahora obtienen la ruta de la base de datos si no hay atributo path.
  • Nuevos atributos para el type=“NC” img-checked-disabled y img-unchecked-disabled para ponerle una imagen con el checkbox marcado/desmarcado y deshabilitado, complementando a los ya existentes img-checked y img-unchecked.
  • Se ha mejorado la seguridad de las colecciones online implementando certificate pinning para SSL, esto ayuda a prevenir ataques MITM. Está disponible para los conectores JSON, XML y SOAP. Se usa añadiendo los valores EnableCertificatePinning=true y LocalCertificatePath=certificadossl.cer a la cadena de conexión, siendo certificadossl.cer el certificado público guardado en la carpeta certificates.
  • Se puede cambiar el color del trazo visible en la firma con ui.StartSignature, añadiéndole un sexto parámetro en forma de color HTML. El color que se plasma en el fichero sigue siendo negro.
  • Se ha añadido traducción al alemán a los mensajes del framework.
  • Se ha añadido la macro global ##CURRENT_DENSITY_VALUE## que devuelve los dpi de la pantalla.
  • Se ha implementado el valor “D” del atributo period para los nodos maintenance, para ejecutar cada X días.
  • Se ha optimizado el refresco que provocan los botones.
  • Se han añadido una versión de alta resolución de el icono de XOne para dispositivos de mayor densidad de pantalla.
  • Añadida traducción al idioma flamenco de los mensajes del framework.
  • Se han actualizado las traducciones al inglés y al francés de los mensajes del framework.
Cambios:
  • El framework antes no avisaba ni detenía el script al hacer un Save sobre un objeto que tuviera campos que no existen en base de datos, si este tiraba contra base de datos.
  • El framework ahora puede detectar más errores de programación y tratará de registrar dichos errores en el logcat.
  • ui.PlaySoundAndVibrate ahora ya no ignora el parámetro de repetir reproducción X veces. Antes sólo le hacía caso si era menor que cero, lo cual significa repetir hasta el infinito o hasta ejecutar ui.StopPlaySoundAndVibrate.
  • ui.PlaySoundVolume ahora ya no ignora el parámetro volumen. Antes ajustaba al valor máximo siempre.
  • Ahora también se aplica el resolution-width y resolution-height al atributo cell-height.
  • Varias correcciones de implementación al objeto PinpadPayment.
  • La ventana de información de la réplica no respetaba el atributo screen-orientation.
  • Se han hecho varios cambios para compatibilidad con el MDM Blackberry BES.
  • Se ha mejorado la robustez del sistema de réplica push.
  • El selector de ficheros de los type=“AT” permite navegar hasta el tope del teléfono, no sólo la sdcard.
  • Cuando se edita un registro de un content de forma normal, ahora se aplica su bgcolor de colección correspondiente más temprano para evitar un efecto indeseado de transparencia.
  • El método Download del objeto FileManager devuelve ahora 0 o -1 en vez de true o false, en concordancia con la documentación y al resto de métodos.
Bugfixes:
  • Corregido un error que provocaba que no se le aplicase la fuente correcta a los type=“X”.
  • Corregido un error al parsear cadenas de conexión online XMLRPC.
  • Corregido un error en el cual el replicador podía dejar de replicar tras un cambio de conectividad.
  • Corregido un error al parsear los parámetros que se le pasaban al atributo postonchange.
  • Corregido un error al salir de ventanas abiertas con OpenMenu con ##EXITAPP##.
  • Corregido un error poco frecuente que impedía pulsar en algunos botones.
  • Corregido un error de parámetros al ui.StartSignature.
  • Corregido un error al aplicarle la orientación a los frames flotantes.
  • Corregido un error que podía agotar los recursos para abrir ficheros.
  • Corregido un error al seleccionar archivos de sistema en el selector de ficheros de los type=“AT”.
  • Corregido un error al invocar los métodos de envío de base de datos del objeto DebugTools.
  • Corregida una incompatibilidad muy específica de la tablet Asus K012 que provocaba que los botones del menú en la ventana de edición fueran ignorados.
Limitaciones:
  • Por el momento no está disponible el debugguer cuando se depure Javascript.
Bugfixes:
  • Se ha corregido un error con el ExecuteActionAfterDelay si la ventana estaba destruida.
  • Se ha corregido un error que impedía la instalación en teléfonos/emuladores que no tengan Google Maps instalado.
Nuevas funcionalidades:
  • Se ha implementado el width y height en el type=“TL”.
  • Se ha implementado el selecteditem en el content mapview. Se ejecuta al pulsar sobre el globo de un item del mapa, tal y como si fuera un registro normal de un content.
  • Se ha implementado el atributo wait-dialog-text=“texto de cargando” en los nodos de los botones para cambiar el texto de la ventana de cargando.
  • Se ha implementado el atributo rotate-button=“true” en el type=“PH”, sirve para rotar la imagen 90 grados y guardarla. Es útil con ciertas aplicaciones de cámara problemáticas que rotan la imagen que devuelven.
  • Se ha implementado el método SetCnnString al objeto XOneDataCollection para cambiar la cadena de conexión asociada al nodo <connection> de la colección. Se debe tener cuidado si hay más colecciones que dependan del mismo nodo. En un futuro los nodos <connection> podrán manejarse por script.
  • Ahora se puede ejecutar un script directamente en un botón sin crear un nodo para ello, desde el atributo method. En vez de usar el típico method=“ExecuteNode (nodoaejecutar)”, se puede poner method=“ExecuteVBScript(texto del script)”.
  • El framework avisará por pantalla de errores al definir la jerarquía de frames y de si hay props sin atributo nombre definido.
  • Ahora es posible depurar el Javascript incrustado en los type=“WEB” si el framework es debug. Para aprender cómo depurar, revisar el siguiente enlace. https://developer.chrome.com/devtools/docs/remote-debugging#debugging-webviews
  • El type=“KEYPAD” admite personalización ahora con los atributos img y img-sel. A diferencia del atributo img habitual, hay que pasarle 12 rutas separadas por comas (una para cada botón).
  • El type=“KEYPAD” implementa el atributo target-property para ignorar el campo con foco y escribir siempre sobre el que diga este atributo.
  • Añadido atributo software-input a los type=“T” para evitar que estos desplieguen el teclado en pantalla de Android. Útil cuando se usa el type=“KEYPAD” o en dispositivos con teclado por hardware mal implementado.
  • Se ha expuesto el atributo encoding en los nodos <include> para especificar charset de otros idiomas. Por defecto pone ISO-8859-1, el encoding europeo habitual, que permite tildes y eñes.
  • Los type=“WEB” ahora admiten páginas que hagan uso del GPS. Se deben activar los ajustes de localización con ui.StartGPS para que esto funcione.
  • Las cadenas de conexión http admiten los atributos Cache=true y UseAlwaysCache=true para cachear resultados antiguos. Cache=true trata de actualizar online el resultado siempre y guardarlo, si no hay conexión devuelve el último guardado. UseAlwaysCache siempre tirará del resultado cacheado aunque haya conexión, si no hay resultado cacheado lo actualizará online de forma normal y lo guardará para la próxima vez, se debe combinar con Cache=true.
  • Se ha añadido la macro ##CURRENT_COUNTRY_CODE## que devuelve el código de país de dos dígitos. Complementa a ##CURRENT_LANGUAGE##.
  • Se ha preparado el framework para poder incrustar el XOneLiveServices en el paquete APK. Próximamente se dispondrá de herramienta online para generarlo. Esto también permite tener dos framework apuntando a dos servidores de XOneLive distintos.
  • De la misma manera, pronto se dispondrá de la posibilidad de incrustar aplicaciones en el APK.
  • Se ha implementado el atributo hardware-accelerated=“false” a nivel de nodo <coll>. Permite controlar la aceleración por hardware antes usada en el framework para suavizar las animaciones y poder desactivarla en el caso de usar la aplicación en teléfonos escasos de memoria RAM.
  • Nuevo objeto de script ImageDrawing para crear imágenes, añadirle texto a una imagen, etc.
  • Se han añadido siguientes nuevos métodos del objeto FileManager: ListFiles, ListDirectories y DeleteDirectory.
Cambios:
  • Se ha subido el código de versión del framework de 4 a 5. Esto significa que si se instala este framework, no se podrán volver a versiones anteriores sin desinstalar por completo.
  • Se ha optimizado la descarga de imágenes en los type=“IMG”.
  • Se ha optimizado la descarga de ficheros en el método ui.OpenFile y eliminado el timeout extra innecesario.
  • El framework creará un fichero llamado .nomedia en los directorios temporales de imágenes en la sdcard para tratar de evitar que estas se muestren en la aplicación de galería del usuario. No se garantiza que todas las aplicaciones de galería hagan caso de este fichero.
  • Cambios visuales menores en la pantalla de información de la réplica.
  • Se ha actualizado la API push cliente del replicador.
  • Se ha mejorado la integración con el servidor de réplica nuevo para las notificaciones push. El dispositivo dejará de recibir notificaciones si no está instalada la aplicación, esto funciona a partir de la versión 3.33.4.1462 del servidor de réplica.
  • El framework comprueba y avisa al usuario de si la versión instalada de Google Play Services no está actualizada para que los servicios de notificaciones push funcionen correctamente. En caso de no estarlo enviará al usuario al Play Store para que instale o actualice.
  • El type=“N” viewmode=“seekbar” lanzaba el evento onchange cada vez que se arrastraba. Ahora lo hace al terminar el gesto.
  • Si se muestra un MsgBox con un texto demasiado grande para caber en pantalla, ahora el texto del MsgBox será scrolleable y se podrá leer todo. De la misma forma éste texto ya no ocultará los botones.
Bugfixes:
  • Corregido un error al mostrar un MsgBox sin existir ventana activa.
  • Corregido un error al usar los botones XOne App Icons y XOne Replicator si la aplicación estaba activa.
  • Corregido un error al cargar imágenes en red y salir de la ventana antes de que éstas terminen de cargarse.
  • Corregido un error muy poco frecuente en la réplica.
  • Corregido un error al ejecutar PlaySoundAndVibrate desde un nodo <replica-ok> cuando no hay aplicación abierta.
  • Corregido un error de fuga de memoria al cambiar el tamaño de las imágenes con file-maxwidth y file-maxheight.
  • Corregido un error de fuga de memoria al cambiar la foto de nuevo en un type=“PH”.
  • Corregido el método Move() del objeto FileManager que estaba reportando un número incorrecto de parámetros obligatorios a la maquinaria VBScript.
  • Corregido un error del método FileExists del objeto FileManager que no devolvía -1 si el parámetro viene vacío.
  • Corregido un error con el content XoneContentPager que podía dejar hilos de carga de datos sin detener tras salir de la ventana actual, ocasionalmente colgando la aplicación.
  • Corregido un error de doble pulsación de botones en teléfonos lentos.
  • Las aplicaciones task killers y el propio Android en situaciones de extrema baja memoria podían dejar el framework inestable cuando matan el framework y la ventana original trataba de recuperarse. Se ha implementado un mecanismo para tratar de recuperarse correctamente.
Buenas prácticas:
  • Es recomendable incluir el atributo language a los nodos <script>, aunque al framework ponga por defecto “vbscript” a los que no lo tengan por motivos de compatibilidad.
  • Es recomendable incluir el atributo encoding a los nodos <include>, especificando qué charset traen estos ficheros. Esto es imposible detectarlo de manera automática y fiable. El framework asume por defecto ISO-8859-1, que acepta el alfabeto latino.
  • Recordatorio de que el sistema operativo Android no se traga bien nombres de fichero con tildes y eñes, y pueden causar errores al crear y/o leer esos ficheros.
  • Recordatorio de que las aplicaciones task killers para manejo de RAM son innecesarias en el entorno Android y que pueden dejar las aplicaciones en un estado impredecible. No se recomienda su uso.
Nuevas funcionalidades:
  • Se han homologado los escáneres de códigos de barra Unitech PA700 y Itos IC20. Si hay atributo barcode=“true”, escanearán el código directamente en ese prop.
  • Ahora se puede usar ##FLD_## para cambiar el título de un grupo.
  • Se pueden pasar extras (parámetros) a aplicaciones externas usando ui.LaunchApplication. Para su uso, añadir los extras como segundo parámetro, separándolos por punto y coma, y separando la clave del valor por el signo =.
  • Se ha implementado el atributo keep-aspect-ratio=“false” en el type=“PH”, valor por defecto true. Estira la foto para que coincida exactamente con el tamaño del PH.
Cambios:
  • UpdateWaitDialog se oculta automáticamente al mostrar un MsgBox y se vuelve a mostrar al salir de éste.
  • Android KitKat o superior requiere que se declare un permiso extra para leer en cualquier lugar de la sdcard. Esta versión lo añade.
Bugfixes:
  • Corregido un bug raro que colgaba la aplicación al salir de una ventana de edición mientras un content estaba cargando datos.
  • Corregido un bug raro en la réplica de ficheros.
  • Corregido un bug que hacía que se interpretasen mal los atributos evaluados con ##FLD_## en el content si había más de uno.
  • Corregido un error de implementación en el baracoda.
Buenas prácticas:
  • Recordar crear los campos ISDEVICEROOTED varchar(10) y ISTASKKILLERINSTALLED varchar(10) en la tabla master_replica_slave si no se ha hecho ya, para que se actualice correctamente la información del inventario de los dispositivos.
Bugfixes:
  • Corregido un error de resizeo del imgbk de grupo.
Nuevas funcionalidades:
  • Al entrar en una colección, el framework avisará de si hay nodos prop con el atributo name duplicado.
  • Añadido método AsynchronousDownload al objeto FileManager. Permite descargar ficheros sin bloquear el script. Su sintaxis es igual al método Download.
  • Nuevo método ui.RefreshContentSelectedRow “NOMBREPROPCONTENT”. Permite refrescar mediante script exclusivamente la fila seleccionada de un content.
  • Implementado nuevo atributo max-duration para el type=“VD” con readonly=“false”. Permite limitar la duración del vídeo.
  • Cuando se lanza una aplicación con el AppLauncher, el framework desbloquea la pantalla en caso de que estuviera apagada.
  • Se han portado desde Windows Mobile los atributos lower=“true” y upper=“false” para forzar las minúsculas o las mayúsculas en un type=“T”.
  • Experimental: Se ha implementado la capacidad de lanzar y crear clases Activities, Services y IntentServices nativas de Android con los plugins. Pronto se actualizará la documentación en la wiki.
Cambios:
  • El type=“VD” ya no continúa la reproducción estando invisible o en otro grupo.
  • Ya no se escribe en el logcat la salida del parser de scripts, reduciendo sensiblemente la cantidad de log innecesario que se escribe.
Bugfixes:
  • El type=“VD” no mostraba la imagen del botón del play en caso de reproducir contenido local.
Nuevas funcionalidades:
  • El replicador descarga automáticamente el certificado público del servidor si hubiera. Recordar que usar un certificado incrementa la seguridad.
  • Se ha implementado guardar a la colección especial de contactos del teléfono. Equivale a añadir contactos manualmente en la agenda del teléfono.
Bugfixes:
  • Corregidas fugas de memoria.
  • Corregido un error poco frecuente al forzar la orientación.
  • Corregido un error al parsear cadenas de conexión.
  • La ventana del appwizard no cambiaba de tamaño correctamente al cambiar la orientación en aplicaciones que no la forzaban.
Nuevas funcionalidades:
  • Implementado nuevo método ui.StartCamera “PROPDESTINO”, “photo”. Permite lanzar la cámara tal y como lo haría el type=“PH”. Puede grabar vídeo también.
  • Implementado nuevo método ui.StartSignature “PROPDESTINO”, nTotalAncho, nTotalAlto, sImagenFondoRuta. Parecido a StartCamera, pero éste lanza la firma. El último parámetro es opcional e indica una imagen de fondo que se plasmará también en la firma resultante.
  • Implementado nuevo método ui.CaptureImage “PROPDESTINO”. Permite capturar la pantalla o sólo la imagen de un frame específico. Añadir el nombre de un frame específico como segundo parámetro si se desea capturar sólo un frame, en caso contrario ignorar el segundo parámetro.
  • Implementado nuevo método ui.StartAudioRecord “grabacionok”, “MAP_PROPDESTINO”, duración. El primer parámetro indica el nodo a ejecutar cuando termine de grabar, el segundo es la propiedad donde guardará el fichero resultante. Si la duración es cero, seguirá grabando sin bloquear hasta invocar StopAudioRecord. En versiones de Android inferiores a la versión 4.1 Jelly Bean, generará un fichero .3gp. En versiones superiores generará un fichero .mp4 encodeado en formato AAC de mejor calidad.
  • Implementado nuevo método ui.StopAudioRecord. Detiene la grabación iniciada anteriormente.
  • Atributo corner-radius=“numero” implementado en type=“T”. Permite redondear las esquinas de la caja de texto.
  • Añadido alias para el plugin QRGenerator.
  • Implementados atributos autologon-username y autologon-password en el nodo <app> para usar un usuario/contraseña específico junto al autologon=“true”
  • Implementado atributo filename-template para poder cambiar el nombre de las fotos que generan los tipo PH.
  • El type=“TT” implementa el atributo width.
Cambios:
Bugfixes:
  • Se han corregido diversos bugs de fugas de memoria. Se recomienda la instalación de este framework en dispositivos de escasa memoria. Habrá más mejoras en este sentido en futuras versiones.
  • Los type=“X” no aplicaban el nuevo cálculo correcto del fieldsize.
  • Solucionado un error de aplicar atributos a un action bar o un navigation drawer global de la colección empresas.
  • Solucionado un error en el objeto DebugTools al devolver los códigos de error de envío de bases de datos.
  • Solucionado un error al recuperar el ID en una conexión externa.
  • Solucionado un error en el atributo lines.
  • Solucionado un error de mostrar botones de edición al aplicar el atributo disableedit=“” en editables.
  • Solucionado un error al aplicar los atributos img-date y img-time en los type=“D”, type=“DT” y type=“TT”.
  • Solucionado un error al mostrar un content gridview.
  • Solucionado un error al aplicar el atributo width al type=“D”.
  • La macro ##FLD## añadía comillas extra en el atributo title.
Nuevas funcionalidades:
  • Añadidas nuevas macros globales ##SCREEN_RESOLUTION_WIDTH## y ##SCREEN_RESOLUTION_HEIGHT## para averiguar la resolución de la pantalla.
Cambios:
  • La pantalla de login por defecto añade un efecto de animación de transparencia.
  • Los contents mapview avisan por pantalla si hay algún error común estilo atributo contents no definido o nodo contents no definido.
  • El botón de un type=“Z” mapview aplica estilos y la personalización típica de un botón. Usar el atributo apply-css=“false” para aplicar compatibilidad con la forma antigua.
  • Los iconos de aplicaciones desinstaladas lanzan un mensaje adecuado. Si vuelven a ser instaladas vuelven a ser funcionales.
Bugfixes:
  • Corregido un error en la aplicación del estilo al contenedor interno padre del content.
Nuevas funcionalidades:
  • El nodo <actionbar> permite el uso de CSS.
  • Los campos con showinline y linkedto-linkedfield implementan el width y height en base al resolution-width y resolution-height.
  • Método ui.Refresh. Fuerza el refresco mediante script de los props que se especifiquen.
Cambios:
  • Ahora hace el cálculo correcto de labelwidth para todas las fuentes, siguiendo la regla de 1 unidad de labelwidth o fieldsize equivale al tamaño un carácter M mayúscula para esa fuente y tamaño.
Bugfixes:
  • Pulsar el botón deshacer sobre un campo contraseña encodeada en base64 devolvía el valor sin traducir a texto plano.
  • El content gridview calculaba erróneamente el height.
  • Cierta optimización al type=“ph” podía colgar la aplicación.
  • Arreglos de márgenes y visibilidad al frame scroll=“true”.
Nuevas funcionalidades:
  • Implementado nuevo control Action Bar. Disponible en Android 3.0 en adelante.
  • Implementado nuevo control Navigation Drawer.
  • Se pueden definir varias colecciones distintas en un mismo fichero xml, consultar la wiki para implementar esta funcionalidad.
  • Homologado escáner de códigos de barras Zebex Z-3250. Hay que emparejar el dispositivo y desactivar la opción de “Teclado físico” en las opciones de Android. El framework detectará cuando se conecte el escáner y rellenará el campo barcode=“true”.
  • El fixed-group implementa resolution-width y resolution-height.
  • El selecteditem del picturemap permite show-progress-dialog.
  • Se ha implementado labelfont-underline al resto de controles.
  • La firma admite el atributo imgbk. Esto permite que el control tipo firma permita marcar imágenes.
  • Se puede definir el atributo imgbk al nodo <menus> del appwizard, éste aplica el fondo a todos los grupos del appwizard y hace que la transición parezca más suave.
  • Se ha implementado soporte beta para la integración con pinpad de pagos con tarjeta de itos.
  • Implementado atributo divider-height a nivel de prop del content. Especifica el tamaño del separador de registros.
  • Implementado atributo divider-color a nivel de prop del content. Le da un color a el separador.
  • Implementado atributo divider-background a nivel de prop del content. Especifica una imagen para usarse como separador.
  • Se han implementado animaciones en los frames, para cuando cambie su visibilidad. Usa los mismos atributos que las animaciones de grupo. Por ejemplo: animation-in=“##ALPHA_IN##” animation-out=“##ALPHA_OUT##” animation-in-delay=“1000” animation-out-delay=“1000”.
  • Se ha implementado la vista semanal en el control calendario. Añadir calendar-viewmode=“week”. Este atributo se puede modificar dinámicamente.
  • Si se termina un ciclo de réplica que afecte a una colección en modo lista que se esté mostrando actualmente, ésta se refrescará sola.
  • Para frames flotantes, se ha implementado ignore-touch-on-transparent-area=“true” para evitar que las pulsaciones sobre fondo transparente pasen al fondo.
  • Se puede filtrar un content según un campo prop mientras se escribe sobre éste.
Cambios:
  • IMPORTANTE: El atributo width en los type=“T” le da su width al campo editable menos el labelwidth al igual que en iOS.
  • IMPORTANTE: Ya no se pueden usar propiedades en un disablevisible o disableedit que no estén definidas en la colección.
  • ExecuteActionAfterDelay ahora se ejecuta fuera del hilo principal de la UI evitando que se bloquee la pantalla durante su ejecución.
  • tmargin=“0” pega el control al inmediatamente superior. En caso de no definirlo, deja el mismo margen que antes.
  • El método ui.ShowNotification muestra brevemente el texto del mensaje también además del icono cuando se invoca. Si se quiere modificar este texto, añadir un parámetro cadena adicional.
  • El método ui.ShowNotification enciende el LED de notificaciones dispositivo si lo tuviera y si está la pantalla apagada. No se garantiza que todos los dispositivos hagan caso del LED.
  • Se ha ajustado a 0 siempre la máscara de edición en la login-coll.
  • Se ha eliminado el margen extra del label interior en los type=“B” al igual que otras plataformas.
  • El content slideview ya no emite sonidos en modo autoslide.
  • Activada la aceleración por hardware de forma global.
Bugfixes:
  • En ciertas ocasiones al hacer un ui.MsgBox éste se mostraba sobre el escritorio y no transparente sobre la anterior ventana abierta.
  • Correciones en la carga de datos en el control calendario.
  • Corregidas un par de fugas de memoria.
  • Ocultar un botón mediante disablevisible no llegaba a eliminar los márgenes del botón oculto.
  • Las propiedades de un fixed-group no cogían el tamaño correcto si eran huérfanas.
  • Arreglado un error de atributos con frames nesteados en frames flotantes.
  • Arreglado error de márgenes en frames con scroll=“true”.

Versión con bugfixes menores.

Bugfixes:
  • Al regenerar los iconos de la aplicación mediante el botón XOne App Icons, cuando no hacía falta reescalar el icono fallaba al crearlo.
  • En una rara ocasión el mantenimiento podía ejecutarse dos veces.
  • ui.PlaySoundAndVibrate no hacía caso de la macro ##DEFAULT## por error.
  • DateDiff devolvía fecha errónea en el caso de usar días.
  • En la replica por bloques podía confirmar antes de tiempo si había muchos DMID encolados.
  • Al cargar un license.ini real (no de desarrollo) con el XOneStudio la pantalla de réplica no mostraba los datos de licencia.
  • En un caso especial, un error en la pantalla de réplica podía colgar la aplicación al pulsar el botón de réplica.
Nuevas funcionalidades:
  • Se ha implementado en el selecteditem de los contents normales el atributo refresh-selected-row=“true”. Esto provoca el refresco en sólo la fila que se pulsa.
  • Implementado atributo fullscreen=“true” en el nodo app. Permite aplicar pantalla completa al 100% ocultando incluso la barra de estado y los botones de navegación. Estos se vuelven a mostrar momentáneamente arrastrando desde el tope superior de la pantalla. Solo disponible en Android 4.4 Kitkat en adelante.
Cambios:
  • IMPORTANTE: Se ha implementado el atributo width en los type=“TL”, al igual que en iOS. Como en el resto de propiedades, recordar que tiene preferencia sobre labelwidth.
  • Si no hay atributo content=“Coleccion” definido en un type=“Z”, avisará en pantalla con un mensaje claro.
  • La macro ##DEVICEID## se puede leer desde cualquier parte ahora.
  • El atributo textfont-underline le aplica ahora un filtro de antialiasing a la propiedad.
  • Han cambiado las cadenas que se muestran en la pantalla de réplica por defecto para hacerla más clara.
  • Las flechas del appwizard ahora son botones de navegación y no simples imágenes.
  • Implementado atributo width para los type=“TL” en el modo content.
Bugfixes:
  • Arreglos a los métodos DownloadDatabase y DeleteDatabase del objeto FileManager para poder sustituir la BD limpiamente.
  • Corregido un error en el atributo editinline-rows que no provocaba que no se le hiciera caso. Este atributo limita la cantidad de registros que aparecen en un showinline. Se define a nivel de <coll> en la colección mapeada.
  • En ocasiones el alineado de props en un content sólo aceptaba left.
  • Corregido un error por el cual al atributo hide-softinput no se le hacía caso si el campo anterior no era de tipo texto.
  • Al cambiar dinámicamente el tamaño de un content, éste podía aparecer cortado en el último registro.
  • Corregido un defecto visual con el atributo pull-to-refresh definido en las colecciones en modo lista.
Cambios:
  • Añadido método ui.ShowToast “Mensaje” para mostrar mensaje emergente que desaparece al cabo de unos segundos.
  • Añadido método ui.ShowNotification nID, “Título”, “Mensaje” para mostrar una notificación. El número de ID identifica una notificación y permite editarla o descartarla por código. Se puede implementar dentro de un nodo replica-ok para avisar de que la tabla objetivo ha recibido nuevos registros.
  • Añadido método ui.DismissNotification nID. Descarta la notificación visible que tenga el ID especificado.
  • Implementado nuevo atributo allow-swipe=“true” para los contents. Este atributo permite que se pueda borrar un registro de un content deslizándolo hacia la derecha o la izquierda. Se puede capturar este evento si se define el nodo <ondismiss> en la colección content y hacer otra cosa que no sea borrar el registro.
  • Implementado “tirar para refrescar” en contents, al estilo iOS. Los contents por defecto refrescarán tirando de ellos si se está al principio de la lista definiendo el atributo pull-to-refresh=“true”.
  • Implementados nuevos atributos img-checked y img-unchecked en el control checkbox para poder cambiar la imagen cuando están marcados y cuando no están marcados. Buscará la imagen en la carpeta icons. Controlar el tamaño de estos iconos con “img-width” y “img-height”.
  • Implementado labelfont-underline=“true” para type=“TL”.
  • Implementados atributos file-maxwidth y file-maxheight para los campos de tipo firma.
  • Implementado objeto de script DebugTools para replicar la funcionalidad del widget del XOneLive dentro de la aplicación XOne.
  • Implementado nuevo método ui.CheckGPSStatus para, por ejemplo, comprobar el estado del GPS antes de invocar ui.StartGPS y que evitar que ui.StartGPS saque la pantalla de ajustes del GPS en caso de que éste no esté activado. Para más detalles mirar la wiki.
  • Al pulsar sobre el fondo, el campo activo pierde el foco.
  • Añadido método OpenFile al objetoFileManager.
  • Ahora el nodo <onback> acepta show-progress-dialog=“true”.
  • Ahora el nodo <replica-ok> también se ejecuta desde fuera de la aplicación.
  • Mejorado la velocidad de scrolling en contents.
  • Cambios en la réplica por bloques, ahora no confirmará los bloques hasta que no hayan sido procesados.
  • Por características de Android 4.4 KitKat, la propiedad type=“WEB” permite HTML5, CSS3 y Javascript v8 por defecto en estas versiones.
  • Activado write-ahead logging para SQLLite en Android >= 3.0, esto permite mejor la concurrencia en base de datos y acelera la velocidad.
  • El replicador avisará de si está rooteado o hay task killers instalados a la tabla slave. Añadir los campos ISDEVICEROOTED y ISTASKKILLERINSTALLED (varchar[3]) a dicha tabla.
  • La caché de imágenes e iconos es limpiada al salir de la aplicación XOne. Esto evitará problemas en dispositivos de baja memoria.
  • La caché de imágenes e iconos es limpiada al recibir una actualización desde el XOneLive. Esto permite que las actualizaciones que contengan imágenes no necesitarán reiniciar el framework para aplicarse. Es necesario actualizar el XOneLive a la última versión.
  • Atributos width y height implementados en campos linkedto-linkedfield. Al igual que en los type=“T”, afectan a todo el control, etiqueta y campo.
  • Añadido método ui.SendSMSRetryIfNetworkIsDown que espera a que haya conectividad para enviar un SMS.
  • Se ha cambiado la forma en la que ASData inserta y lee de la base de datos, esto debe mejorar la concurrencia con la base de datos y aumentar la velocidad de los INSERT.
  • Los contents editables con edit-inrow=“true” ahora respetan la máscara de edición y el disableedit, si no permiten la edición, generará un content normal y corriente.
Bugfixes:
  • Solucionado un problema de concurrencia de base de datos al tener varios contents en la misma pantalla ejecutando una consulta.
  • En ocasiones, cuando la aplicación se iba al fondo o se pulsaba el botón HOME del dispositivo y se volvía a la aplicación mediante el icono de XOne, éste no devolvía a la última ventana de edición si no a la ventana padre.
  • Correcciones al type=“WEB” que no se visualizaba correctamente en modo edición en caso de cargar HTML directamente en vez de una URL.
  • Corregido un error en la cual si no existía height en un type=“IMG” este tenía un alto ligeramente superior en modo edición que en modo contents.
  • Corregido un error en contents editables con edit-inrow=“true” en el cual perdía la posición actual. Ahora también se puede editar y saltar entre campos sin que pierda el foco.
  • Corregido un error al type=“Z” viewmode=“mapview” en el cual no reescalaba la imagen correctamente ni le aplicaba márgenes.
  • Corregido un error en el cual el GPS permanecía activo incluso tras salir de la aplicación, consumiendo batería.
  • Corregido un error en el driver NFC en el cual no ejecutaba correctamente el nodo callback al leer un tag NFC.
  • Corregido un error en el content calendario en el cual duplicaba registros.
  • Corregido un error por el cual los métodos del objeto FileManager no detectaba correctamente los ficheros si estos tenían mayúsculas en el nombre.
  • Otros bugfixes menores.
Buenas prácticas:
  • Se debe implementar file-maxwidth y file-maxheight para los campos de tipo foto y firma para que los distintos dispositivos repliquen fotos y firmas con la misma resolución siempre. Esto hará que el tamaño de las fotos sea más predecible y de pequeño tamaño, y evitará problemas de memoria en dispositivos de gama baja.
Cambios:
  • La propiedad de tipo WEB ahora acepta también código HTML como valor. Se pueden incrustar diseños web.
  • La propiedad de tipo WEB ahora puede mostrarse en contents.
  • Implementado objeto de script FileManager para la descarga de ficheros, bases de datos y otros métodos de manejo sencillo de ficheros. Este objeto puede descargar manualmente bases de datos a la carpeta bd que posteriormente pueden ser usadas en un nodo connection.
  • Implementado método ui.LaunchApplication para lanzar una aplicación ajena.
  • Reducido el tamaño del framework al eliminar librerías sin usar.
  • En las versiones de Android que dispongan de corrector ortográfico, en los campos de texto editables no se subrayarán en rojo las palabras no reconocidas, como por ejemplo los tags HTML de un tipo THTML.
  • El tamaño de la imagen de fondo de un group será reescalada al tamaño total de la pantalla, si la imagen fuera más pequeña que éste. Si hay más propiedades de las que quepan en la pantalla, se estirará como antes.
  • Mejoras de rendimiento.
  • El tamaño del splash será redimensionado al ancho de la pantalla.
Bugfixes:
  • En las conexiones JSON, en algunos casos no enviaba el tamaño correcto de la petición.
  • Al cambiar la orientación del dispositivo, se recalculará el tamaño de la pestañas visibles.

Versión beta.

Cambios:
  • Añadidos atributos visuales de personalización del content en modo calendario. Por documentar.
  • Los atributos antiguos del content calendario no deben ponerse en la coll si no en el prop que muestra el content calendario.
  • En un prop tipo “Z” en modo Google Maps, se puede personalizar la imagen del botón con el atributo “img”.
  • Atributo select-all-text-on-focus=“false” para los campos editables, decide si debe seleccionar todo el texto al coger el foco.
  • Limpieza de código menor.
Bugfixes:
  • Arreglado un problema con el refresco del botón de las pestañas no activas si se modificaban sus atributos dinámicamente.
  • Implementado el refresco de algunos atributos del botón de manera dinámica.
  • Reducida ligeramente la complejidad interna de la pantalla mostrada. Debería ayudar en los casos de problemas de falta de memo

Versión experimental, no disponible para producción. Avisar de cualquier problema.

Cambios:
  • Nueva característica, es posible inyectar código al fichero XML en memoria y crear nuevos nodos y props dinámicamente.
  • Añadidas nuevas cadenas a la traducción inglesa de los mensajes del framework.

Versión beta, no disponible para producción. Avisar de cualquier problema.

Cambios:
  • Añadido método ui.SetLanguage. Este método permite cambiar el idioma de la aplicación XOne en tiempo de ejecución. Es necesario reiniciar la aplicación para que los cambios surtan efecto.
  • Integración nativa con Twitter a modo de nuevo tipo de conexión que permite obtener datos. Consultar la wiki para implementarla.
  • Los plugins internos del framework ya no tienen preferencia sobre los externos. En caso de que haya framework con un plugin incrustado, se puede actualizar su versión instalando el APK separado del plugin.
  • Añadido nuevo control seekbar. Muestra una pequeña barra para seleccionar el valor de un type=“N” en lugar del clásico campo de texto. Se usa añadiéndole el atributo viewmode=“seekbar”. max=“número” determina el máximo valor que puede tomar.
  • Nuevos iconos para el acceso directo, en distintas resoluciones para tablets y teléfonos de distinto tamaño.
  • Se ha implementado el atributo path en prop de tipo AT, permite especificar la ruta por defecto en la que aparecerá. showgallery=“true” irá directo a la carpeta de las fotos del dispositivo.
  • Nuevas animaciones para las transiciones de entrada y salida de grupo. Entrada: ##BOUNCE##, Salida: ##MOVE_AWAY##. Se pueden usar con ui.ShowGroup
Bugfixes:
  • Al cargar una aplicación mediante XOneStudio, si el framework ya estaba abierto éste no se cerraba correctamente y la aplicación se colgaba. Necesita usarse en conjunto con la nueva versión del AppLauncher.
  • En la cadena de conexión JSON, si el valor del parámetro contenía un signo igual éste no se procesaba correctamente.
  • La duración de la animación de entrada en un ShowGroup estaba siendo ignorada. Por lo tanto, si ahora la animación no dura lo que se espera, se debe corregir este error en el script.