Colas Mérand
30/04/2025
Odoo
React
Cloud Run
5 minutes
Dans un monde digital en constante évolution, les entreprises recherchent des solutions toujours plus personnalisées et intégrées pour répondre à leurs besoins spécifiques. L'une des combinaisons technologiques particulièrement puissantes consiste à connecter des applications React modernes avec des systèmes ERP robustes comme Odoo. Cette approche permet de bénéficier à la fois de la flexibilité des interfaces utilisateur React et de la solidité des processus métier d'Odoo.
L'intégration d'applications React avec Odoo représente un défi technique intéressant, particulièrement lorsqu'il s'agit de créer des ponts de communication efficaces entre ces deux environnements. Prenons un cas concret : imaginez un configurateur 3D développé en React qui permet aux clients de personnaliser des produits, et qui doit être intégré dans le processus de vente Odoo.
Les défis typiques incluent :
L'utilisation d'iFrames constitue une méthode éprouvée pour intégrer des applications React dans des pages Odoo. Cette approche permet d'incorporer l'application React directement dans une page produit Odoo, tout en maintenant une séparation claire entre les deux environnements.
# Exemple de code Odoo pour intégrer un iFrame dans une vue produit
<template id="product_configurator_template" inherit_id="website_sale.product_template">
<xpath expr="//div[@id='product_details']" position="after">
<div class="configurator-container">
<iframe src="https://votre-app-react.cloud-run.app/configurator?product_id=${product.id}"
id="product-configurator"
width="100%"
height="500px"
frameborder="0">
</iframe>
</div>
</xpath>
</template>
Pour permettre à l'application React de communiquer avec Odoo, l'API window.postMessage offre une solution élégante et sécurisée :
// Dans l'application React
const sendConfigurationToOdoo = (configData) => {
// Génération de l'URL de l'image de rendu
const renderImageUrl = generateRenderImage(configData);
// Envoi des données à la page parent (Odoo)
window.parent.postMessage({
type: 'PRODUCT_CONFIGURED',
payload: {
renderImageUrl,
configuration: configData
}
}, 'https://votre-instance-odoo.com');
};
Côté Odoo, un script JavaScript capte ces messages :
// Script JavaScript dans Odoo
odoo.define('product_configurator.receiver', function (require) {
'use strict';
$(document).ready(function() {
window.addEventListener('message', function(event) {
// Vérification de l'origine pour la sécurité
if (event.origin !== 'https://votre-app-react.cloud-run.app')
return;
if (event.data.type === 'PRODUCT_CONFIGURED') {
// Stockage temporaire des données
sessionStorage.setItem('product_render_url', event.data.payload.renderImageUrl);
// Mise à jour du formulaire d'ajout au panier
updateCartForm(event.data.payload);
}
});
});
});
Pour une intégration plus profonde, le développement d'un module Odoo dédié permet de gérer l'ensemble du processus :
# Extrait d'un modèle Odoo pour stocker les rendus personnalisés
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
custom_render_url = fields.Char(string="URL du rendu personnalisé")
custom_render_preview = fields.Binary(string="Aperçu du rendu", attachment=True)
@api.model
def create(self, vals):
# Récupération de l'URL du rendu depuis le contexte
render_url = self.env.context.get('custom_render_url')
if render_url:
vals['custom_render_url'] = render_url
# Téléchargement et stockage de l'image
vals['custom_render_preview'] = self._fetch_and_store_image(render_url)
return super(SaleOrderLine, self).create(vals)
def _fetch_and_store_image(self, url):
# Logique pour récupérer l'image depuis l'URL et la stocker
# ...
L'utilisation de Google Cloud Run pour déployer l'application React présente plusieurs avantages :
Chez Platane, nous avons récemment mis en œuvre cette architecture pour un client du secteur de la décoration d'intérieur, permettant aux utilisateurs de visualiser en 3D leurs choix de produits avant achat. Le déploiement sur Cloud Run a permis d'obtenir des temps de réponse inférieurs à 200ms, même lors des pics de trafic.
Un cas d'usage particulièrement intéressant consiste à intégrer un configurateur 3D React dans le processus de vente Odoo, puis à utiliser les rendus générés dans les documents de facturation.
Le processus complet se déroule ainsi :
Cette approche offre plusieurs avantages :
Chez Platane, nous avons mis en œuvre des concepts similaires lors du développement d'Epictory, une plateforme de génération de posters personnalisés basés sur des parcours Strava. Ce projet impliquait également l'intégration de rendus visuels personnalisés dans un processus de commande.
La stack technique utilisée (NextJS, TypeScript, PostgreSQL, AWS, Docker) nous a permis de créer une architecture robuste capable de gérer des rendus complexes et de les intégrer parfaitement dans le processus de commande et de facturation.
Les défis rencontrés, notamment en termes de performances et de gestion des états, nous ont permis d'affiner notre approche pour les projets d'intégration React-Odoo, en mettant l'accent sur :
Pour garantir le succès de votre projet d'intégration React-Odoo, voici quelques bonnes pratiques essentielles :
L'intégration d'applications React modernes avec Odoo ouvre de nouvelles possibilités pour créer des expériences utilisateur riches tout en bénéficiant de la puissance d'un ERP complet. Que ce soit pour des configurateurs 3D, des visualisations de données complexes ou des interfaces utilisateur personnalisées, cette approche permet de combiner le meilleur des deux mondes.
Chez Platane, notre expertise dans le développement de solutions sur mesure nous permet d'accompagner nos clients dans la conception et l'implémentation de ces ponts technologiques. Notre approche combine technologies de pointe et créativité pour répondre précisément aux objectifs métier.
Vous avez un projet d'intégration React-Odoo ou une autre idée innovante ? N'hésitez pas à nous contacter via notre formulaire en ligne pour échanger sur votre projet. Notre équipe d'experts se fera un plaisir d'étudier vos besoins et de vous proposer des solutions adaptées, en s'appuyant sur notre expérience et notre maîtrise des technologies modernes.