{{indexmenu_n>1}} ===== Colecciones OnLine ===== La plataforma XOne, por regla general, opera con una Base de Datos local en el dispositivo, de forma que aunque no haya conexión de datos, podamos trabajar en todo momento con la aplicación. Ello no implica que siempre tenga que trabajarse "OFF-LINE", es la forma más cómoda y rápida para trabajar con un dispositivo, pero la tecnología también nos permite crear colecciones "ON-LINE" para recuperar determinados datos o incluso crear la aplicación completa "ON-LINE" si fuese necesario. - El nombre de los nodos **connection** debe ser único para todo el mappings.xml, aunque estén en distintas colecciones. Si bien pueden definirse en cualquier colección, para tener todas las conexiones localizadas, mejor definirlos en el nodo app al inicio del mappings.\\ - Todas las colecciones ONLINE cargan los datos con LOADALL, NO se pueden recorrer los datos con STARTBROWSE. ==== Comprobar Conectividad ==== Antes de lanzar una Coleccion ONLINE tenemos que asegurarnos de tener conexión a internet, y para ello podemos hacer uso de esta función y colección para hacer la comprobación:\\ \\ //FUNCION PARA COMPROBAR SI TIENE CONEXION CON ALGUNA DIRECCION function comprobarConexionJS() { var conexion=0; $http.get( "https://www.google.es/", function() { conexion=1 //self.setFieldPropertyValue("MAP_CONNECTION", "text-forecolor-disabled", "#509c16"); //self.MAP_CONNECTION="** DISPOSITIVO CON CONEXION **"; //ui.refresh("MAP_CONNECTION"); }, function(){ //No hay conexión //self.setFieldPropertyValue("MAP_CONNECTION", "text-forecolor-disabled", "#CC3333"); //self.MAP_CONNECTION="!!! DISPOSITIVO SIN CONEXION !!!"; //ui.refresh("MAP_CONNECTION"); }); return conexion; } === Comprobar Conexión con Proxy JSON === //FUNCION PARA COMPROBAR SI TIENE CONEXION CON UN PROXY JSON function ComprobarConexion() { var conexion=0; try{ //appdata.Error.Clear //on error resume next var coll=appData.getCollection("ContentComprobarConexion"); coll.startBrowse(); //appdata.Error.Clear if (coll.getCurrentItem()!==null) { //Si nos ha devuelto algún registro quiere decir que tenemos conexión. //if (coll.getCurrentItem().RESULTADO==="##OK##") { conexion=1; //} } coll.endBrowse(); coll.clear(); coll=null; return conexion; }catch(err){ return conexion; } } ==== Opciones Online ==== En la plataforma XOne, tenemos varias formas de conectarnos para obtener datos remotos: |< 80% 20% 25% 25% 30% >| ^ Nombre Conexión Online ^ Servidor de Conexión ^ Conexión a ERP Cliente ^ Plataformas ^ | **JSONBD** | Proxy intermedio que devuelve JSON | Conexión a BD | Android, IOS, W8 (En desarrollo) | | **JSONWS** | Proxy intermedio que devuelve JSON | Conexión a Web Service | Android, IOS, W8 (En desarrollo) | | **xoneonline** | Proxy intermedio que devuelve XML | Conexión a BD | Android, IOS, Windows Mobile, blackberry | | **xonedirect** | Directo a Web Services del Cliente | Web Services del Cliente | Android, IOS (En desarrollo) | \\ ==== NODO connection en mappings ==== \\ En las colecciones ONLINE, tenemos que tener un nodo **connection** con la cadena de conexión al Proxy intermedio, o Web Service del que obtendremos los datos.\\ \\ ^ Parámetros Connection ^ Descripción ^ | **name** | Debe ser único en TODO el mappings. | | **connstring** | Llamada al Proxy o Web Service al que nos vamos a conectar, pasándole diferentes parámetros: \\ -**Provider** :**Xone Remote Provider**. Este valor debe ser siempre así ya que es de sistema. \\ -**Data Source**:Nombre del web service al que llamamos. \\ -**namespace**: Nombre que se obtiene del WSDL del atributo targetNamespace. \\ -**progid**:Nombre del progID utilizado por la maquinaria, los valores son: \\ -**1.com.xone.db.soa.SOAConnection**: Utilizada para atacar directamente a los web service desde el frame. \\ -**2.com.xone.db.json.JSONConnection**:Utilizada para conectarse a los web service a traves de proxy JSON. \\ -**3.CGSProxy.CProxy** :Utilizada para conectarse con proxy genérico que devuelve XML, a los web services. | | **Timeout** | Tiempo de espera de una respuesta antes de que de error. (En segundos) | | **Security Level** | Tipo de seguridad (Numérico). Dependiente del proxy utilizado. | | **method** | El método de obtener los datos del Proxy, GET o POST.| \\ ==== Proxy JSONBD ==== \\ Proxy que atacará la Base de Datos del Cliente y devolverá los resultados en forma JSON al framework XOne. (Más rápido que el antiguo método de colecciones ONLINE que devolvía XML).\\ \\ Se puede obtener la última versión del Proxy descargándola de la web xonesupport.\\ \\ {{ :b.-programacion:colecciones_online:coll_online_json_bd.png?nolink }} \\ === Web.Config de JSONBD === \\ Dentro del fichero Web.Config del proxy, nos encontramos con el nodo appSettings:\\ \\ |< 100% 20% 80% >| ^ Parámetros del nodo appSettings ^ Valores ^ | **debug** | **true - false**\\ Se deja log en el visor de sucesos. | | **Connection String** | Cadena de Conexión a la Base de Datos | | **Security Level** | **0 - 1 - 2 - 3**\\ 0.- Sin seguridad. La llamada se procesa tal cual.\\ 1.- Seguridad con http header authentication. Se envía el usuario y la contraseña para comparar en local.\\ 2.- Por mantenimiento de sesión. Se necesita un token de sesión que envía el servidor cuando se autentica.\\ 3.- Por certificado. (En Desarrollo). | | **Database Operations Allowed** | **select - insert - delete - update**\\ Operaciones permitidas a la hora de trabajar contra la Base de Datos. | \\ === Ejemplo de tipo JSONBD === \\ |< 100% 20% 80% >| ^ Parámetro del mappings ^ Observaciones ^ | **sql** | Igual que siempre, como si fuese OFFLINE, la diferencia es que la SQL se ejecuta en una BD remota. | | **filter y sort** | Como siempre, el WHERE y el ORDER BY de la sentencia SQL | | **connection** | Valor del atributo name del nodo connection definido más abajo . | | **userawsql** | Para que el framework no intente parsear la SQL y la ponga en forma de subconsulta, que la deje tal cual está en el atributo SQL. | | **loadall** | Poner a "true". Todas las colecciones ONLINE cargan los datos con LOADALL, no se pueden recorrer los datos con STARTBROWSE. | \\ ==== Proxy JSONWS ==== \\ Proxy que atacará los Web Services del Cliente y devolverá los resultados en forma JSON al framework XOne. (Más rápido que el antiguo método de colecciones ONLINE que devolvía XML).\\ \\ Se puede obtener la última versión del Proxy descargándola de la web xonesupport.\\ \\ {{ :b.-programacion:colecciones_online:coll_online_json_web_services.png?nolink }} \\ === Ejemplo de tipo JSONWS === \\ \\ === Web.Config de JSONWS === \\ Dentro del fichero Web.Config del proxy, nos encontramos con los nodos **appSettings** y **client**:\\ \\ ..... ..... ..... \\ |< 100% 20% 80% >| ^ Parámetros del nodo appSettings ^ Valores ^ | **debug** | **true - false**\\ Se deja log en el visor de sucesos. | | **endpoint** | Direccion del WSDL del Web Service al que nos tenemos que conectar. P.Ej: http://www.cgsoft.net/geoipservice.asmx?WSDL\\ \\ Si se van a llamar a distintos Web Services desde el proxy, tenemos que poner endpoint(Loquesea), siendo el valor entre paréntesis el valor del atributo "**endpoint=Loquesea;**" especificado en la llamada del mappings.xml para llamar a un Web Service u otro.\\ \\ Ejemplo de llamada a web service en mappings.xml: \\ \\ | | **Class** | Es la clase del WSDL. La misma se obtiene al final del WSDL, en el apartado **wsdl:service name="Service"** (Normalmente hay 2 en el WSDL, cogemos el primero de ellos) y se le añade "Client" al final, por ejemplo, para el Class sería "**servicesoapclient**" | | **Security Level** | **0 - 1**\\ 0.- Sin seguridad. La llamada se procesa tal cual.\\ 1.- Seguridad con http header authentication. Se envía el usuario y la contraseña para comparar en local. La Seguridad por cabecera debe de tenerlo implementado el web service que sea. | ^ Parámetros del nodo client ^ Valores ^ | **address** | La dirección del web service. (SIN el **?wsdl** al final de la dirección) | | **contract** | El contrato del wsdl que está al final del mismo, dentro del apartado **wsdl:service name="Service"** | | **name** | Se le indica el mismo que el contract. | \\ ==== XOneOnline ==== \\ Antigua forma de realizar las conexiones ONLINE, que devolvía los datos en formato XML.\\ \\ {{ :b.-programacion:colecciones_online:coll_online_xml_bd.png?nolink }} \\ === Ejemplo de código XOneOnline === \\ \\ * El **SQL** de la colección: "**SELECT t1.* FROM ##PREF##kk t1**" NO SIRVE para nada, y tanto **objname** como **updateobj** están vacíos, puesto que NO vamos a tratar con una base de datos local. * A nivel del nodo COLL, tenemos un parámetro **connection="proyecto_online1"** que es el que especifica que la colección, es una colección **ONLINE**. * Posteriormente, tenemos el nodo ****, que será donde se define realmente la conexión con el webservice contra el que va a funcionar la colección. MUY IMPORTANTE, **el valor de este atributo debe ser unico para todo el mappings**. \\ La respuesta del webservice debe ser algo como esto:\\ \\