¿Qué es Odoo?
Odoo es una suite de aplicaciones empresariales (ERP) de código abierto que ofrece una amplia gama de soluciones para la gestión de empresas, tales como CRM, contabilidad, ventas, inventario, y más. Su arquitectura modular permite integrar diferentes módulos según las necesidades específicas de la empresa. En este proyecto, usaré Odoo como la plataforma principal para gestionar los socios de una empresa, lo cual implica realizar operaciones básicas sobre los registros de socios a través de una aplicación externa.
Para hacer las pruebas he creado un servidor (VPS) en clouding.io, con un Odoo 17 (Ubuntu 22.04 64Bit) cargado de datos de ejemplo, he usado un dominio gratuito, pruebas.publicvm.com.
¿Qué es CRUD?
El término CRUD representa las cuatro operaciones básicas que pueden realizarse sobre los datos en un sistema de gestión: Crear, Leer, Actualizar y Eliminar (por sus siglas en inglés: Create, Read, Update, Delete). Estas son las operaciones fundamentales en cualquier sistema que gestione datos, y son esenciales para mantener y manipular la información en cualquier base de datos o sistema de almacenamiento.
En este proyecto, implementamos un sistema CRUD para la gestión de socios en Odoo mediante una aplicación en VB.NET, donde se pueden realizar las siguientes operaciones:
- Crear nuevos socios.
- Leer (cargar) la lista de socios existentes.
- Actualizar la información de un socio seleccionado.
- Eliminar un socio existente de la base de datos.
Tecnologías empleadas
Este proyecto combina varias tecnologías y técnicas que permiten la interacción entre la aplicación de escritorio VB.NET y el sistema Odoo:
- VB.NET: Lenguaje de programación utilizado para desarrollar la aplicación de escritorio que gestionará los socios, el proyecto esta en Winforms.
- XML-RPC: Protocolo que permite la comunicación remota entre sistemas. A través de XML-RPC, la aplicación VB.NET se comunica con Odoo para realizar operaciones CRUD en tiempo real. XML-RPC envía solicitudes y recibe respuestas en formato XML.
- Odoo: El sistema ERP donde se almacenan y gestionan los datos de los socios.
- EPPlus: Biblioteca de .NET utilizada para exportar los datos a archivos Excel (.xlsx).
- Windows Forms: Plataforma gráfica para crear interfaces de usuario en aplicaciones de escritorio de Windows.
¿Cómo se envían los datos a Odoo mediante XML-RPC?
XML-RPC (Remote Procedure Call) es un protocolo ligero que permite la comunicación entre aplicaciones a través de llamadas remotas utilizando XML para el formato de los datos. En este proyecto, se utilizó XmlRpc.NET para facilitar la interacción entre la aplicación VB.NET y el servidor Odoo.
Las operaciones se envían mediante solicitudes XML que contienen los datos que queremos enviar o recibir de Odoo. Aquí hay un resumen de las operaciones que realizamos usando XML-RPC:
- Autenticación: Para cualquier operación en Odoo, primero debemos autenticarnos enviando las credenciales (usuario, base de datos y contraseña) al servidor mediante XML-RPC. Esto nos devuelve un identificador de usuario (UID) que se usa en las operaciones posteriores.
- Crear (Create): Para crear un nuevo socio en Odoo, enviamos un diccionario (representado por XmlRpcStruct en XmlRpc.NET) con los datos del nuevo socio, como el nombre y el correo electrónico.
- Leer (Read/Search_Read): Para obtener la lista de socios, hacemos una solicitud search_read que devuelve los registros almacenados en Odoo con la información solicitada.
- Actualizar (Update/Write): Para actualizar un socio existente, enviamos el identificador del socio junto con los nuevos valores que queremos modificar.
- Eliminar (Delete/Unlink): Para eliminar un socio, enviamos el identificador de ese socio mediante el método unlink.
Técnicas utilizadas en el proyecto
- Validación de datos: Antes de realizar cualquier operación (como actualizar, crear o eliminar), validamos que los campos necesarios no estén vacíos y que los identificadores no sean nulos.
- Manejo de excepciones con Try-Catch: Implementamos bloques de código Try-Catch para capturar cualquier excepción que ocurra durante las operaciones con Odoo o al escribir archivos Excel. Esto asegura que la aplicación no se bloquee inesperadamente y muestra mensajes de error amigables al usuario.
- Exportación a Excel: Usamos la biblioteca EPPlus no comercial, aunque puede cambiarse si adquieres licencia, para exportar los datos de los socios a un archivo .xlsx. Esta exportación incluye la selección del lugar donde se desea guardar el archivo mediante un SaveFileDialog y, después de exportar, se abre automáticamente el archivo generado.
- Control de errores al exportar: Se verifica si el archivo de Excel ya está abierto antes de intentar escribir en él, lo que evita errores de acceso y proporciona mensajes claros al usuario en caso de que el archivo esté bloqueado.
La técnica de objetos para XML-RPC que utilizamos en este proyecto se basa en la creación de proxies que representan las llamadas remotas a los métodos de Odoo. Esta técnica permite interactuar con el servidor de Odoo de manera muy similar a cómo interactuamos con los objetos locales en la programación orientada a objetos.
En el contexto de XmlRpc.NET, creamos interfaces que representan los métodos que vamos a llamar en el servidor Odoo. Por ejemplo, para la autenticación y para las operaciones CRUD, definimos interfaces como IOdooRpcCommon y IOdooRpcObject. Estas interfaces definen los métodos de Odoo que queremos invocar, como login, create, write, unlink y search_read. Luego, utilizamos el método XmlRpcProxyGen.Create para generar dinámicamente objetos proxy que implementan esas interfaces y que internamente manejan las solicitudes XML-RPC. De esta manera, en lugar de escribir manualmente las solicitudes XML y manejar las respuestas, simplemente llamamos a los métodos del proxy como si estuviéramos trabajando con objetos normales de VB.NET.
Por ejemplo, al llamar al método create en el proxy de IOdooRpcObject, simplemente pasamos los parámetros necesarios (como los campos del socio que queremos crear), y XmlRpc.NET se encarga de traducir esa llamada a una solicitud XML válida, enviarla al servidor Odoo y recibir la respuesta, devolviéndonos el resultado como si fuera una operación local. Este enfoque simplifica enormemente la interacción con Odoo, ya que podemos trabajar con objetos y métodos en lugar de manejar manualmente el protocolo XML-RPC en su forma más cruda.
Flujo del Proyecto
- Autenticación en Odoo: Al iniciar la aplicación, se realiza una autenticación con el servidor de Odoo utilizando XML-RPC. Si la autenticación es exitosa, el sistema nos devuelve un UID que permite hacer las siguientes operaciones.
- CRUD en la lista de socios: El usuario puede:
- Crear un nuevo socio: Introduce los datos (nombre y correo electrónico) y guarda el registro en Odoo.
- Leer la lista de socios: La lista de socios se carga y se muestra en un DataGridView.
- Actualizar un socio: Selecciona un socio en la lista, modifica los datos y los guarda.
- Eliminar un socio: Selecciona un socio en la lista y lo elimina del sistema.
- Exportación a Excel: Se ofrece la opción de exportar la lista de socios a un archivo Excel. El usuario puede seleccionar la ubicación donde guardar el archivo y la aplicación lo abrirá automáticamente al finalizar la exportación.
Conclusión
Este proyecto es un excelente ejemplo de cómo conectar una aplicación de escritorio VB.NET con un servidor Odoo utilizando XML-RPC. A través de esta implementación, logramos realizar operaciones CRUD sobre los datos de los socios y gestionar los errores de manera adecuada para mejorar la experiencia del usuario. Además, la funcionalidad de exportación a Excel permite al usuario mantener una copia de los datos de manera sencilla.
Recuerda que he usado controles estándar de Windows. Mediante controles como Syncfusion o Devexpress entre otros puedes hacer maravillas con los datos obtenidos, desde reports, hasta Grid altamente avanzados, así como pasarelas para comunicación y automatización de aplicaciones con otros ERPs.
El código completo del proyecto está disponible en GitHub, donde podrás descargarlo, mejorarlo y adaptarlo a tus necesidades específicas. ¡No dudes en explorarlo!
Nota: El coste de la prueba que realizado sobre clouding.io son 4 euros mes. 😉