This translation is older than the original page and might be outdated.



XOneLive

Este Componente de la plataforma XOne, es el encargado de gestionar la transmisión y ejecución de las instalaciones y actualizaciones.

Esta herramienta tiene una parte CLIENTE y una parte SERVIDOR.

  • En el cliente, puede estar embebido en el Framework, o puede ser un proceso independiente (Caso de Android y Windows Mobile).
  • En el Servidor, es un webservice.


El xonelive está ligado a otros componentes de la plataforma a la hora de gestionar las actualizaciones (Provisioning para generar la Base de Datos y xonemanager para generar las actualizaciones), aunque puede funcionar individualmente.

El xonelive del server, está esperando a la llamada que realice el xonelive del Cliente, enviando el PIN/IMEI/DEVICEID del dispositivo, el Web Service, revisa en la estructura de carpetas que hay en el server, para ver si dispone de actualizaciones pendientes para dicho dispositivo.
Si hubiera actualizaciones pendientes, empezaría a enviarlas hasta que todas hayan sido ejecutadas y confirmadas de forma correcta.

El orden de descarga de las actualizaciones NO ES POR FECHA DE CREACIÓN, es el siguiente:

  1. Actualizaciones Generales (Mayor prioridad).
  2. Actualizaciones de su Plataforma (Android, Iphone, blackberry, Windows Mobile…).
  3. Actualizaciones propias para ese dispositivo (Menor prioridad).

Para evitar errores, las actualizaciones generales deberían borrarse cuando ya se las hayan descargado TODOS los dispositivos y hemos de tener en la carpeta de instalación la última versión actualizada de la aplicación.

<?xml version="1.0"?>
<configuration>
   <!-- Este nodo appSettings se va a sustituir por el contenido de la tabla ADM_PROVISIONING_CONFIG en la BD del XOneManager.
   	En este fichero de configuración solo tendremos la conexión a la BD del XOneManager, aunque seguirá funcionando todo por compatibilidad -->
   <appSettings>
 
	<!-- Ruta de la carpeta de repositorio XOne. -->
		<add key="Updates Path" value="C:\XOneUpdates"/>
 
	<!-- Nombre de la carpeta donde se pondrán las actualizaciones. -->
		<add key="Version Folder" value="Actualizaciones"/>	
 
	<!-- Nombre de la carpeta donde se generan los gzip para descargar. -->
		<add key="Licenses Folder" value="Licencias"/>
 
	<!-- Fichero con las versiones que ha ido confirmando el usuario. -->	
		<add key="last Version File" value="lastversion"/>
 
	<!--  Ruta de la carpeta que contiene la primera instalación. -->
		<add key="RepositoryPath" value="C:\XOneUpdates\Instalaciones" />	
 
	<!-- Maximo número de registros de log por cada MID, en ADM_XONELIVE_LOGS.  0=infinito. -->
		<add key="LimitRowLog" value="0"/>
 
	<!-- A qué MID se le activa el log, igual que en imprimir de WORD. Ejemplos: “0-999”,  “2,3,7”, ”2-5,10”. -->
		<add key="Log" value="0"/>
 
	<!-- Si se quiere generar un log de texto, además del log en ADM_XONELIVE_LOGS, el valor es 0 ó 1 (Desactivado/Activado). -->
		<add key="Logtxt" value="0"/>
 
	<!-- Ruta y nombre del fichero de log siempre y cuando la clave anterior tenga valor 1. -->
		<add key="PathLogtxt" value="C:\inetpub\wwwroot\XOneLive"/>
 
	<!-- Si se desea cambiar el directorio temporal de windows -->
		<add key="PathTemp" value="C:\inetpub\wwwroot\XOneLive\tmp"/>
 
	<!-- RegenerateGZIP, por defecto, 1 (true), regenera el GZIP en cada llamada inicial de petición del update -->
		<add key="RegenerateGZIP" value="0"/>
 
	<!-- Esta clave 'XoneManagerUrl' indica la ruta del XOneManager antiguo -->
		<add key="XoneManagerUrl" value="http://127.0.0.1/xonemanager"/>
 
	<!-- Esta clave 'XOneAdminUrl' indica la ruta del XOneManager nuevo (prevalece sobre 'XoneManagerUrl' en el GenerateInstall) -->
		<add key="XOneAdminUrl" value="http://127.0.0.1/xoneadmin/api/services/"/>
 
   </appSettings>
 
   <connectionStrings>
 
	<!-- Cadena de conexión a la BD del XOneManager. -->
		<add name="XoneConnectionString" 
		connectionString="Data Source=192.168.1.100;Initial Catalog=xonemanager;User ID=XXX;Password=YYY"
		providerName="System.Data.SqlClient"/>
 
   </connectionStrings>
	……………
</configuration> 

Este fichero se incluye en cada actualización que se realiza, y contiene las instrucciones que deberá seguir el xonelive para procesar la actualización.

A continuación se exponen las diferentes instrucciones que tenemos a nuestra disposición a la hora de hacer una actualización.

<root>
	<!-- Conexion con la BD,  En type le decimos que tipo de conexion vamos a utilizar con la BD. En este caso odbc.  -->
 
		<dns type="system" name="XXXX" user="root" pwd="" silent="false" imei="000000000000000"/>
 
 
	<!-- Cambios en BD, necesitamos abrir los nodos dbms y dentro de éste, el item .  
		NOTA: Es obligatorio definir “DataBase” y “OLEProvee” en el registro de Windows Mobile si se va a hacer 
		alguna operación que conecte con la BD (Hasta v.3.3.0.1 de XOneLive cliente de WM solo para fichero .sdf). 
			[HKEY_LOCAL_MACHINE\SOFTWARE\CGSoft\CGMobile\Data]
			"DataBase"="%ProgramFiles%\CGMobile\BD\Gestion.sdf”
			"OLEProvee"="Microsoft.SQLSERVER.OLEDB.CE.3.0”
	-->
		<dbms>
			<item>
				<!--  Ejecutar SQL directo sobre la BD -->
				<oper type="direct execute">INSERT INTO GEN_CLIENTES (NOMBRE) VALUES ('PRUEBA INSERCION 1');</oper> 
				<oper type="direct execute">INSERT INTO GEN_CLIENTES (NOMBRE) VALUES ('PRUEBA INSERCION 2');</oper>
				<!--  Ejecutar SQL de un FICHERO sobre la BD. filename sera el fichero que contenga las sql a realizar    -->
				<oper type="execute file" filename="pruebainsercion3.sql" path="{currentpath}"/>
			</item>
		</dbms>
 
	<!-- Copiar Ficheros:  
		Name: nos indica el nombre del fichero
		From: la ruta de origen, casi siempre sera {currentpath}: la ruta donde se extrae la actualizacion, 
		To: ruta donde vamos a copiar ese fichero.    	-->
 
		<copy name="mappings.xml" from="{currentpath}" to="\Archivos de Programa\CGMobile" />
		<copy name="gestion.exe" from="{currentpath}" to="\Archivos de Programa\CGMobile" />
		<copy name="CGSGestionCE.dll" from="{currentpath}" to="{winsys}" />
		<copy name="ASDataCE.dll" from="{currentpath}" to="\Windows" />
 
	<!-- Borrar Ficheros:  
	Si el fichero es el propio ejecutable lo renombra a .old (ya que no es posible autoborrarse) y elimina las notificaciones proximas
	Name: nos indica el nombre del fichero,
	Path: la ruta del fichero	-->
		<delete name="appwizard.xml" path="\Archivos de Programa\CGMobile" /> 
		<delete name="XoneLive.exe" path="{}" />
 
	<!-- Ejecutar Fichero.      
		wait: indica si esperamos a que finalice la ejecucion o no para seguir actualizando.	-->
		<execute name="regsvrce.exe" path="{currentpath}" wait="false" />
 
	<!-- Registrar dlls. Abrimos nodo register 
		Name: nos indica el nombre de la dll a registrar.   
		Path: nos indica la ruta en la que se encuentra la dll.  	-->
		<register>
			<item name="CGSGestionCE.dll" path="\Windows" />
			<item name="ASDataCE.dll" path="{winsys}" /> 
		</register>
 
	<!-- Crear/modificar valores en el registro de Windows Mobile
		El nodo registry es distinto al 'register', que solo sirve para registrar .dll y NO requiere de un nodo 'copy' previo -->
		<registry name="Camera.reg" path="{currentpath}" />
</root>
Macro Valor
{win} \Windows
{winsys} \Windows
{Windows} \Windows
{} Ruta de xonelive
{root} Raiz del dispositivo
{currentpath} Donde se descomprimen los ficheros
{apppath} Donde está el Framework, en WM clave del registro cgmobilepath, por defecto: “\Archivos de Programa\CGMobile”
{%CE1%} Carpeta de sistema \Archivos de Programa
{CE1} Carpeta de sistema \Archivos de Programa
{programfiles} Carpeta de sistema \Archivos de Programa

Con estas macros se puede 'jugar', por ejemplo: “{programfiles}\CGSoft\CGMobile”….

En Base de datos, tenemos 2 tablas, tanto en la BD del proyecto en cuestión, como en la BD del xonemanager:

En la tabla ADM_XONELIVE_LOGS (de la BD del proyecto) se van logueando TODAS las operaciones que va realizando el dispositivo.

Para que esta tabla se rellene, hay que activar el log de los dispositivos a los que queremos hacerle el seguimiento, esto se hace con los parámetros limitrowlog y Log que están en el fichero WEB.CONFIG del xonelive:


limitrowlog Máximo número de registros de log por cada MID, en la tabla ADM_XONELIVE_LOGS. 0=infinito
Log A que MID se le activa el log.



Ejemplo web.config para dejar log en adm_xonelive_logs:

<?xml version="1.0"?>
<configuration>
   <appSettings>
 	……………
 	……………
	<!-- Máximo número de registros de log por cada MID, en ADM_XONELIVE_LOGS.  0=infinito. -->
		<add key="LimitRowLog" value="0"/>
 
	<!-- A que MID se le activa el log, igual que en imprimir de WORD. Ejemplos: “0-999”,  “2,3,7”, ”2-5,10”. -->
		<add key="Log" value="0"/>	<!-- NO rellena la tabla de LOG (ADM_XONELIVE_LOGS) -->
   </appSettings>
    	……………
	……………
</configuration> 

Ejemplos de valores para la clave “Log” del fichero web.config de xonelive:

  • Log=“0-999” : Para los dispositivos del 0 al 999, ambos inclusive.
  • Log=“2,3,7” : Para los dispositivos 2, 3 y 7 solamente.
  • Log=“2-5,10” : Log para los dispositivos 2, 3, 4, 5 y 10.


En la BD del xonemanager, esta tabla NO se utiliza actualmente.


En la tabla adm_xonelive_errorlog de la BD del proyecto que sea, se van logueando únicamente los errores que se vayan produciendo y en la BD del xonemanager, se van logueando aquellas operaciones que están provocando error y no se puede determinar a qué proyecto pertenece el dispositivo.


XOnelive por defecto utiliza el puerto 80, si se quiere utilizar otro, en IIS se configurará el puerto que se quiera y en XOne, hay que configurarlo en el fichero web.config del xonemanager.

	<add key="XoneLiveUpdate.XoneLiveWS" value="http://IP:PUERTO/xonelive/XoneLiveWS.asmx" />

El log del xonelive se activa en el fichero web.config del xonelive, en el nodo appSettings.
El log se deja en las tablas adm_xonelive_errorlog (sólo errores) y adm_xonelive_logs de la base de datos de la aplicación. Más info.


XOnelive chequea en busca de actualizaciones cada cierto tiempo, que puede ser configurable.

1.- En ANDROID, por defecto cada hora, la frecuencia vendrá dada por la configuración que tenga el xonelive.
2.- En Windows Mobile, por defecto es cada media hora, aunque puede cambiarse (en minutos) en la clave del registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\CGSoft\XoneLive]
Interval="30"


Al montar un XOnemanager se nos puede dar el caso de provisionar un dispositivo y al intentar descargar la aplicación no se traiga nada.

Lista de cosas a comprobar:

1.- Ir a HTTP://IPDELSERVIDOR/xonelive/xonelivews.asmx
2.- Función multiplechecklic: Ponemos el PIN\IMEI\DEVICEID (según sea BB\ANDROID\IPHONE) de nuestro dispositivo.

Si devuelve END:

1.- Comprobar que la función checklic nos devuelva nuestra licencia.
2.- Tabla adm_provisioning_task tiene un registro para ese MID con STATUS=1. Ponerlo a 0
3.- Lanzar la siguiente SQL sustituyendo -DEVICE- por nuestro PIN\IMEI\DEVICEID:

SELECT e.ID, d.PIN, k.NAME AS COMPANYNAME, a.NAME AS APPNAME, a.DBPREF, 
b.ICON, a.ENABLE, e.DEVICE_RINTERVAL, b.VERSION, e.DEVICE_VERSION, 
a.ENABLE AS DEVENABLE, e.DEVICE_USERID, e.DEVICE_LOGIN, e.DEVICE_PASSWORD, 
e.DEVICE_PWDEXPIRE, b.MAPPINGS_XML, b.APPWIZARD_XML, b.REPLICATOR_XML, e.LIC, 
a.CMD_URL, a.REPLICA_URL, b.INSTALL_SQL, a.SERVER_LIC, f.DEVICE_TYPE, g.MODEL 
 
FROM adm_application a, adm_application_repository b, adm_devices d, 
adm_devices_application e, adm_company k, adm_devices_plataform f, 
adm_devices_model g, master_replica_slave s 
 
WHERE a.ID = b.IDAPPLICATION AND e.IDREPOSITORY = b.ID 
AND e.IDDEVICE = d.ID AND d.IDCOMPANY = k.ID AND d.IDMODEL=g.ID 
AND g.IDPLATAFORM=f.ID AND e.LIC=s.SERIAL 
AND (a.ENABLE <> e.ENABLE OR e.DEVICE_VERSION <> b.VERSION) 
AND (s.PENDIENTE IS NULL OR s.PENDIENTE=0) AND d.PIN='-DEVICE-'

Esta SQL tiene que devolver nuestro dispositivo, si NO lo hace, alguna condición NO se está cumpliendo, comprobarlas todas.

Si devuelve NULL:

1.- Comprobar que la función checklic nos devuelva nuestra licencia.
2.- Comprobar que la ruta de ficheros en el web.config de xonemanager, sea la correcta.
3.- Comprobar que la ruta de ficheros en la tabla adm_databases sea la correcta.
4.- Comprobar que existe el directorio de carpeta de esa ruta de ficheros.
5.- Comprobar permisos de esa ruta de ficheros (SERVICIO DE RED / NETWORK SERVICES control total).
6.- Comprobar el web.config del xonelive, clave key=“xonemanagerurl” (Conexión con xonemanager). Mirar PUERTO del IIS.


Revisar que el SQL SERVER o el DBMS de turno permita conexiones por IP, comprobar que las cadenas de conexión del xonemanager y el xonelive son iguales en los respectivos WEB.CONFIG. El providername es CASE SENSITIVE, p.ej:providerName=“mysql.Data.mysqlclient”

NOTA: En los 4 últimos puede ponerse como parámetro la dirección a la que tiene que enviar, siempre que se tenga instalado en el servidor la web para recepcionar los datos. En el caso de que no se especifique ninguna dirección, será enviado a las oficinas centrales de XOne. Estos últimos métodos devuelven 0 si el envío fue OK y -1 si se produjo algún error, como que por ejemplo no haya conectividad.



Para poder iniciar el XOneLive desde el framework:

  function lanzarXOneLive() 
  If appData.GlobalMacro("##DEVICE_OS##") = "android" Then
      Set intent = CreateObject("AndroidIntent")
intent.SetClassName "com.xone.android.framework", "com.xone.live.services.CheckServiceStatus"
      intent.SetAction "android.content.Intent", "ACTION_VIEW"
      intent.StartActivity
      Set intent = nothing
  End If
  end function


Donde pone SetClassName hay que especificar el nombre de la aplicación.