{{indexmenu_n>1}} ====== Conector de Integración contra Web Service ====== \\ \\ XOne dispone de un conector para realizar una integración entre una base de datos y un Web Service. \\ \\ Hay que indicar que es complicado tener un conector único para todos los Web Service que existen, ya que cada uno es diferente y no tienen nada genérico, por lo tanto para casi todas la integraciones de Web Service, se deberá modificar el conector en sí para su funcionamiento correcto. \\ \\ Su configuración se realiza de igual forma al conector de Base de Datos, por lo que tendrán un fichero config para decir donde esta el fichero XML que tiene la integración en sí. \\ Este fichero es el primero que lee el ejecutable, y se utiliza para decirle cual es el fichero de configuración de datos principales, asi como el nombre. \\ ===== Intercliente ===== \\ Fichero de configuración donde se va a realizar la integración propiamente dicha entre el sistema origen, el sistema del cliente, y el sistema XOne.\\ \\ \\ ^ Nodos ^^ |<**?xml versión** >=**"1.0" encoding="ISO-8859-1"**?>| Nodo que se pone en la parte superior del fichero. Sirve para que se pueda utilizar la codificación ISO-8859-1, y admita, entre otras cosas, los acentos. **OPTATIVO**.| |<**xml**>| Nodo principal, es el padre de todos los nodos, y todo fichero tiene que tener este nodo, en el que irá todo lo demás. **OBLIGATORIO**.| |<**interface**>| Nodo hijo del nodo xml, dentro de este irán el resto de opciones. **OBLIGATORIO**.| \\ ==== Nodo APP ==== **Nodo en el que se define quienes son las bases de datos origen y destino para poder realizar la Interfase. OBLIGATORIO. Dicho nodo, tiene varios atributos, que son:** ^ Atributos ^ Descripción ^ | NAME | "INTERFASE": nombre de la aplicación | | LOGOPER | "true": para activar el LOG, mostrando todo lo que hace el CGInterclientXone, en el Visor de Sucesos de Windows | \\ \\ **Nodo en el que están las llamadas a las base de datos con las que interactúa la interface. Está formado por nodos hijos, con las llamadas a las base de datos.** \\ ^ Nodos ^ Descripción ^ | client | Nodo que tiene la llamada a la base de datos origen, la base de datos a movilidad, que siempre será la base de datos del cliente | | source | Nodo que tiene la llamada a la base de datos destino, la base de datos de XOne | | optional | Es una conexión con una base de datos opcional (auxiliar) pudiendo ser la misma que la que existe en los nodos client o source, o puede tratarse de una conexión diferente. Se pueden poner todos los nodos optional que hagan falta, no se limita a 1. Se llaman haciendo referencia a su name (se explica posteriormente en DATA-SOURCE, DATA-DEST) | \\ \\ ^ Type ^ Connstring ^ User ^ Pwd ^ | MYSQL | connectionString="Persist Security Info=False;database=salesdemo;server=IPSERVIDORBD;user id=user;Password=pass" | usuario | contraseña | | SQLSERVER | connectionString="Data Source=IPSERVIDORBD;Initial Catalog=beltranprod;Persist Security Info=True;User ID=user;Password=pass" | usuario | contraseña | | ORACLE | connectionString="Data Source=CGS;Persist Security Info=True;User ID=user;Password=pass;Unicode=True" | usuario | contraseña | | ODBC | DSN=nombredsnsistema;uid=usuario;pwd=clave | usuario | contraseña | | OLeDB | provider=ej.[SQLOLEDB.1,MSDAORA...];data source=DATASOURCE;user id=USER;password=PWD.. | usuario | contraseña | | WEB | url="Direccion del webservice" endpoint="Nombre del endpoint" wsdl="" wrapper="DLL que usaremos para conectarnos" class="Nombre de la clase principal de la DLL" | usuario | contraseña | \\ \\ Código de ejemplo del nodo APP. Están especificadas cada una de las conexiones que se pueden identificar. \\ \\ \\ \\ ==== Nodo TRANSFORMS ==== **Nodo que define la dirección de envio de los datos, decidiendo que conexión es el origen y cual el destino, pudiendo variar entre client-to-source o source-to-client** \\ ^ TIPO DE DIRECCIÓN ^ DESCRIPCION ^ | **client-to-source** | Definición de la tabla origen la conexión del nodo **client** y como destino la conexión **source**. Esta conexión es la que se utiliza para replicar la información a los dispositivos, ya que inserta las sentencias SQL en la tabla **master_replica_queue.** | | **source-to-client** | Definición de la tabla origen la conexión del nodo **source** y como destino la conexión **client**. Con esta opción no se escribe nada en ninguna tabla adicional, solo en la que se definen a que tabla van los datos de destino. | \\ \\ \\ \\ Una vez que se ha decidido en que orden se traspasan los datos, se empiezan a definir cada unos de los nodos //transform//, que son los que realizan el traspaso de datos de una tabla a otra. ==== Nodo TRANSFORM ==== Nodo en el que se definen los datos de esa transformación. \\ Los atributos del nodo son: \\ ^ ATRIBUTO ^ DESCRIPCIÓN ^ | name | Nombre de la transformación | | iteration | Atributo que indica si las llamadas al webservice han de hacerse iterando sobre una consulta a base de datos, por defecto false | | iteration-source | Indica la consulta sobre la que debemos iterar si el atributo iteration se encuentra establecido a true. Los datos recuperados por esta consulta podremos usarlos con la macro ##EXTRADATA## seguida del campo (##EXTRADATA##.CAMPO). | Nodo que define el paso de datos a realizar. Cada transform es para una o varias tablas que sean dependientes unas de otras, y solo tiene un atributo, **name**, el cual debe ser único para todo el fichero xml de configuración del interface. Si existe algún error, el log mostrará el nombre de la transforma donde está y donde ha dado el posible error. \\ \\ Es importante resaltar que si existe un fallo al ejecutar el **transform** activo, saltará al siguiente nodo **transform**, de forma que las tablas dependientes unas de otras, tienen que ir en el mismo nodo **transform** de forma consecutiva. Por lo tanto, las tablas no dependientes, o en las que si se produce un error en la anterior se pueda continuar con ella, deben ir en diferentes nodo **transform**. \\ \\ Transformación con solo un nodo coll, de tal forma que la tabla no depende de otras tablas. \\ Transform con dos nodos coll, que se han insertado en el mismo transform, porque son tablas dependientes una de la otra, y si no pasan los datos de la primera, no deben insertarse la segunda. \\ \\ \\ ==== Nodo COLL ==== Nodo en el que se toman las tablas origen y destino de los datos a integrar. \\ Los atributos del nodo son: \\ ^ ATRIBUTO ^ DESCRIPCION ^ | dest-table | Nombre de la tabla destino | | source-table | Selección a partir de una consulta los datos que sen a a integrar desde el origen en el destino | | type-not-allowed | Puede coger valores 1 y 3, de manera que si el valor es 1, no ejecutara inserts y con valor 3 no ejecutara updates. | | extrainfo | Por defecto true. Con valor false no dejaria registro en la tabla master_replica_queue | | data-source | Atributo que admite el nombre(name) de cualquier conexion sobre la que queramos obtener el origen de los datos de la coll, si queremos que sea diferente a la que se configuro por defecto en el nodo client o nodo source en interface/app/connection. | | data-dest | Atributo que admite el nombre(name) de cualquier conexion sobre la que queramos obtener el destino de los datos de la coll, si queremos que sea diferente a la que se configuro por defecto en el nodo client o nodo source en interface/app/connection. | | name | Nombre de la funcion a la que vamos a invocar | | not-replicate | Los cambios realizados no insertan registros en la tabla master_replica_queue, por defecto false | | continue-errors | Indica si se deben seguir pasando registros de la consulta actual aunque uno de ellos de error, por defecto false. | \\ \\ Dentro del nodo coll, se pondran todos y cada uno de los campos que se tienen que traspasar de una tabla a otra. Para ello se van poniendo distintos nodos **prop**, que serán los que tendrán el nombre del campo origen y el nombre del campo destino. Posteriormente se pondrán varios atributos definiendo el tipo o que tipo de acción se tiene que realizar. \\ ==== Nodo PROP ==== Nodo en el que se definen que campo se traspasa y que acción se realiza en la tabla de destino. \\ Los atributos que tiene dicho nodo son: \\ ^ ATRIBUTO ^ DESCRIPCION ^ | source-name | Nombre del campo origen | | dest-name | Nombre del campo de destino. | | type | Atributo para decirle el tipo de datos del campo que se va a pasar. Las opciones son: **T**(campo tipo texto). **Nx**:(campo númerico. La x significa que se le puede poner el número de decimales que tiene. Variara entre no poner nada, N, o poner el número de decimales que van a pasar, N2, N3, N4, etc.) **D:**(Campo de tipo fecha.) **X:**(Para pasar datos que van a ser claves.) | | key | Para decirle que el campo es clave primaria o no en la tabla destino. Por este campo se realizan las búsquedas de si existe el registro en la tabla destino. La clave por supuesto puede ser múltiple, por lo que puede existir más de un campo que sea la clave primaria del registro. **Este campo es obligatorio que como mínimo en uno de los “prop” que tiene la “coll”, tenga este atributo a true**. | | saved-source | Atributo que va a guardar el valor que tiene el campo **source-name** en una macro, para posteriormente realizar operaciones sobre los campos que cumplen la condición que guarda la macro. La macro es **##SOURCEKEYVALUES##**. | | saved-dest | Atributo que guarda los valores que tiene el campo **dest-name** en una macro, para posteriormente operar con los registros que cumplen la condición. La macro **##DESTKEYVALUES##**. | | always-update | Si el atributo esta a **true** le estamos obligando a que en la cola de réplica, “master_replica_queue”, se le inserte un update aunque su valor no cambie. | \\ \\ Una vez definido que campo es origen y el campo destino, con sus características individuales, se tiene que definir la acción a realizar, la cual estará definida dentro de un nodo **oper** dentro del nodo **prop**. \\ \\ ==== Nodo OPER ==== Tipos de operaciones que se pueden realizar con los campos que se quieren pasar de una tabla a otra, en el nodo **prop**. \\ === Acción SETVAL === \\ Operación lo que se hace es poner un valor dado en el campo destino. Por eso el nodo **prop**, solo tiene el tipo del campo, **type**, y el nombre del campo que es el destino, **dest-name**. En el ejemplo se puede ver que en el campo IDPADRE de la tabla destino, que es de tipo numérico, N, se va a guardar el valor 1. En este otro ejemplo ponemos el valor “xone” en el campo destino NOMBRE, que es de tipo texto. === Acción COPY === Operación para copiar el valor de un campo origen a un campo destino. Ejemplo donde se ve como se va a copiar el valor del campo "delegación" al campo "ETIQUETA". Dicho campo es de tipo texto. También se puede ver como es clave primaria, por lo que para buscar si existe dicho registro en el destino, lo realizará buscando por el valor de este campo. También se le está diciendo que guarde el valor del origen en la macro **##SOURCEKEYVALUES##**, y que guarde el valor del destino en la macro **##DESTKEYVALUES##**. Nodo que pasa el valor del campo “PASSWORD_E” al campo PWD. Como vemos tiene el tipo X, por lo que se le está indicando que es un campo contraseña, y su valor lo guarda encriptado. La encriptación es la que soporta la Plataforma XOne, para que posteriormente los usuarios puedan entrar en la aplicación. Nodo que pasa el valor del campo “DESCPTE” al campo “INCIDENCIA”. El mismo es de tipo texto. También vemos que tiene el atributo “always-update”, por lo que le estamos obligando a que en la cola de réplica, “master_replica_queue”, se le inserte un update aunque su valor no cambie. Nodo que pasa el valor del campo "FECCARGA" al campo "FECHA". El campo es de tipo fecha. También se puede ver un nodo nuevo, **format**, nodo que se utiliza dentro de los nodos **prop**, y que sirve para formatear el valor en el destino con las características que se le diga en el atributo value. En el ejemplo, al ponerlo, le estamos diciendo que en el destino la fecha se tiene que insertar de modo día/mes/año. Nodo que pasa los datos del campo “CODAVISO” al campo “TIPOPARTE”, y vemos que es de tipo texto. También se puede ver que está el nodo **format**. Aquí se puede ver que tiene un atributo nuevo, **trim**. Dicho atributo lo que hace es eliminar o no los espacios en blanco que llegan del origen en el destino. El atributo si no se define esta a “true”, es decir, elimina los espacios en blanco. Para que funcione, es necesario poner en el atributo “value”, el valor “NULL”. Nodo que pasa los datos del campo “PRETAR” al campo “PRECIO”. Es de tipo numérico, y en concreto con 5 decimales. Para que la copia se haga bien, se le ha puesto el nodo **format**, poniendo exactamente el número de decimales que se le va a poner. === Acción MAPVAL === Operación para pasar datos de campos relacionados con valores que hay en otras tablas. Lo que sería en el mappings campos de tipo IDEMPRESA o IDUSUARIO. Para ello, lo que se hace es coger el valor del campo origen, y buscarlo en una tabla, cuando encuentra el valor, pone el valor de un campo que le decimos de esa tabla en el campo destino del principio. En el ejemplo que se ve, se coge el valor del campo “delegación”, y se compara con el campo “ETIQUETA”, que se pone en el atributo **mapfld**, que existe en la tabla “Gen_Empresa”, definido en el atributo **source**. Si existe un registro que tenga ese valor, que solo tiene que existir uno, ya que el campo por el que se realiza la búsqueda en la tabla “Gen_Empresa”, tiene que ser la clave primaria del mismo, coge el valor del campo que se define en el atributo **targetfld**, “ID” para este caso, y lo pone en el campo **dest-name**, campo “IDEMPRESA”. En este caso se pueden utilizar varios prop dentro de el mismo oper, que es para aquellos casos en los que la clave primera del registro que estamos buscando esta definido por varios campos, en este caso "COMPANY_ID" y "CAMPO2". Ejemplo: ==== Nodo AFTER-ACTION ==== Nodo que se ejecuta al terminar de realizar el traspaso de datos desde una tabla a otra. === Acción EXECUTE-QUERY === Ejecuta un SQL. Esto es bastante útil para poner una campo de la tabla origen con un valor, para indicar que ya se ha pasado ese valor a la tabla destino. En el ejemplo dado, vemos que tiene dos nodos **param**, en lo que se le dice que SQL se va a ejecutar, en el atributo **value**. También en que base de datos, el atributo **name**, se le pone "dest", que es la base de datos destino, y "source", que es la base de datos origen. También se puede ver que utiliza las macros **##SOURCEKEYVALUES##** y **##DESTKEYVALUES##**, que han sido rellenadas mientras se traspasan los datos de una base de datos hacia otra. ===== Código Ejemplo ===== Es un código de ejemplo como quedaría un archivo intercliente.xml.