Integración Visual Fox con la base de datos de Odoo

25 de febrero de 2023 por
Andres Dawidowicz
| Sin comentarios aún
 

Por varios motivos nos vemos en la necesidad de hacer pasajes de información entre sistemas.

Por ejemplo, cuando Odoo se encarga de una parte del sistema y no va a reemplazar todo el sistema de la empresa, cuando se usa Odoo como complemento del sistema para generar listados o para generar un portal web con Odoo en base a los datos del sistema ya instalado.

En mi caso particular con un manejador de base de datos, que puede ser el pgAdmin4 o el que dispongan, creamos tablas de intercambio que iban a servir para leer y escribir tanto desde el Fox como desde Odoo. Aunque se podría escribir desde el Fox directamente en las tablas nativas de Odoo, por un tema del ORM y de consistencia de Odoo, no lo recomendaría. Por ese motivo preferimos generar las tablas de intercambio accesibles tanto por ODBC como desde Odoo.

Mediante ODBC accedemos en forma sencilla a la base de datos del PostgreSql, Para eso hay que instalar en la PC la versión de ODBC que corresponde al PostgreSql instalado. En la página de Postgres están los conectores. https://www.postgresql.org/ftp/odbc/versions/msi/

Al instalar el conector, podemos crear la conexión con ODBC y testearla

Incluiré un código sencillo de muestra para tener de ejemplo para usar desde el Visual Fox la conexión, que se conecta con Postgres mediante el nombre del ODBC, Borra una tabla del Postgres, recorre una tabla de Fox y crea registros en la tabla del Postgres

Cuando se ejecutan los comandos, si en la variable que devuelve es -1 es que no se ejecutó correctamente. Cualquier otro número es que se hizo bien.

CN = SQLCONNECT("FoxNube","odoo15","password")  *Crea conexión con el nombre ODBC 
lcComando = [DELETE FROM ARPADRON;] ​*Se define el comando
x = SQLEXEC(CN,lcComando) *Se ejecuta el comnado​
SELECT ARPADRON
GO TOP
DO WHILE !EOF()
​WAIT WINDOW STR(RECNO(),10)+"/"+STR(RECCOUNT(),10) NOWAIT
​lcComando = ""
​lcComando = lcComando + [(] + ;
​Alltrim(arpadron.cuit) + [,] + ;
​Alltrim(Str(ARPADRON.PERCEP,16,5)) + [)]
​lcComando = [INSERT INTO ARPADRON (CUIT, PERCEP) VALUES ] + lcComando
​GRABO = SQLEXEC(CN,lcComando)
​SELECT ARPADRON
​SKIP
ENDDO
SQLDISCONNECT(CN)
RETURN

Vale la pena aclarar que por cada registro que se crea tarda lo mismo que si se le mandan 1000 juntos en un solo insert, por eso si se quieren crear 100 mil registros. Mandando de a 1000 tarda 1000 veces menos que enviando de a uno y ese ahorro de tiempo lo van a agradecer





Andres Dawidowicz 25 de febrero de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario