Étape 4 sur 4

Mettre à niveau et dire bonjour à Odoo

Le module est déjà installé. Vous allez charger sa nouvelle client action, puis vérifier chaque binding, c'est-à-dire chaque lien entre les fichiers. Vous testerez ensuite quelques variantes tout en gardant une version fonctionnelle.

1. Choisissez la bonne actualisation

Pour la modification de cette étape : redémarrez le serveur (ou laissez l'auto-redémarrage agir), mettez le module à niveau pour importer le XML et enregistrer les déclarations modifiées, puis rechargez complètement le navigateur.

Chaque modification a son propre cycle

Choisissez l'opération en fonction du fichier que vous venez de modifier :

  • Manifeste : après une modification de __manifest__.py, le processus Odoo doit relire ce fichier. Dans le fonctionnement local de ce cours, redémarrez le serveur. Avec --dev=reload, Odoo redémarre automatiquement le processus, car le manifeste est un fichier Python.
  • XML de données : mettez le module à niveau depuis Applications. Odoo importe alors views/hello_world_menus.xml et crée ou met à jour les enregistrements dans la base. Un simple rechargement du navigateur ne suffit pas.
  • Déclaration d'assets : les assets sont les fichiers utilisés par l'interface, comme JavaScript et les templates XML. La relecture du manifeste fournit leurs chemins dans web.assets_backend. Quand l'ensemble de fichiers est construit, Odoo lit ces chemins. Ici, la mise à niveau est nécessaire parce que depends et data ont changé. Rechargez ensuite la page pour que le navigateur demande l'ensemble actualisé.
  • JavaScript ou XML de l'interface déjà déclaré : avec ?debug=assets et, lorsque cela s'applique aux templates XML, --dev=xml, enregistrez votre modification puis rechargez complètement la page. Vous n'avez alors besoin ni de redémarrer le serveur ni de mettre le module à niveau. En mode normal, les ensembles de fichiers peuvent être conservés dans le cache ; vous devrez parfois vider ce cache ou redémarrer selon votre environnement pour forcer leur régénération.

Odoo ne fonctionne donc pas comme un serveur Angular avec rechargement automatique de l'interface. Une modification de l'interface ne redémarre pas tout le serveur, mais le navigateur doit tout de même être rechargé. Dans Odoo 19, ?debug=assets affiche les assets non minifiés et leurs cartes source, qui relient le code exécuté à vos fichiers, pour faciliter le diagnostic. Avec --dev=xml, lorsque votre méthode de développement concerne des templates XML relus depuis les fichiers, vous pouvez aussi éviter une nouvelle lecture depuis la base. L'option serveur --dev=reload concerne les fichiers Python et le manifeste, pas le rechargement du navigateur.

À observer : vous savez désormais si votre changement demande une relecture du manifeste, une mise à niveau du module, un simple rechargement du navigateur ou aucune action côté serveur.

2. Activez le mode développeur

Dans Odoo, ouvrez Paramètres, faites défiler la page jusqu'aux outils de développement, puis cliquez sur Activer le mode développeur. Si cette option n'est pas visible, ajoutez ?debug=1 à l'adresse après vous être connecté.

3. Mettez le module à niveau

Ouvrez Applications, retirez au besoin le filtre Applications, puis recherchez Hello Odoo. Ouvrez sa fiche et choisissez Mettre à niveau.

Cette opération est différente d'un simple rechargement du navigateur : elle charge views/hello_world_menus.xml dans la base. Odoo relit aussi les chemins d'assets du manifeste pour construire l'ensemble de fichiers. Ici, la mise à niveau est nécessaire parce que depends et data ont changé.

À observer : la mise à niveau se termine sans erreur dans l'interface ni traceback dans les logs de votre environnement.

4. Retrouvez la nouvelle application

Revenez à l'accueil ou ouvrez le sélecteur d'applications. Une nouvelle entrée Hello Odoo doit apparaître. La section 1 a confirmé l'installation ; ce nouveau résultat montre que le menu racine et la client action sont bien chargés.

Ouvrez cette entrée. L'écran affiche le titre Hello Odoo, une courte phrase et le bouton Well, hello Odoo. Ce libellé anglais est celui défini par l'exemple ; gardez-le pour comparer votre écran au résultat attendu.

5. Faites parler le bouton

Cliquez sur Well, hello Odoo. Une notification verte doit apparaître avec le texte Welcome to Odoo. Ce message est une sortie attendue du code fourni ; gardez-le tel quel pendant la vérification.

Le parcours fonctionne

Le module apparaît sur l'accueil, son action ouvre notre composant, le template affiche le bouton et le service de notification produit la réponse attendue.

Si Odoo refuse de coopérer

Le module n'apparaît pas dans Applications

Vérifiez le dossier custom_addons/training_hello, le nom Hello Odoo dans le manifeste et "application": True. Si vous venez de modifier le manifeste ou d'ajouter le module, faites-le relire par Odoo, puis actualisez la liste des applications.

Odoo ne trouve pas l'action côté client

Dans les deux emplacements suivants, la valeur attendue est training_hello.hello_world :

  • Chemin : static/src/hello_world/fichier : hello_world.jsexpression : premier argument de registry.category("actions").add()valeur attendue : training_hello.hello_world.
  • Chemin : views/fichier : hello_world_menus.xmlpropriété : contenu de <field name="tag">valeur attendue : training_hello.hello_world.

L'écran reste vide ou le bouton n'apparaît pas

Dans les deux emplacements suivants, la valeur attendue est training_hello.HelloWorld :

  • Chemin : static/src/hello_world/fichier : hello_world.jspropriété : static templatevaleur attendue : training_hello.HelloWorld.
  • Chemin : static/src/hello_world/fichier : hello_world.xmlpropriété : t-namevaleur attendue : training_hello.HelloWorld.

Vérifiez ensuite le chargement des deux fichiers :

  • Chemin : racine du module — fichier : __manifest__.pypropriété : une entrée de assets → web.assets_backendvaleur attendue : training_hello/static/src/hello_world/hello_world.js.
  • Chemin : racine du module — fichier : __manifest__.pypropriété : une entrée de assets → web.assets_backendvaleur attendue : training_hello/static/src/hello_world/hello_world.xml.

Une fois ces valeurs corrigées, rechargez complètement la page.

Une erreur XML apparaît

Vérifiez les balises fermantes et les guillemets dans les deux fichiers XML. Regardez aussi les logs de votre environnement : la première erreur donne généralement le fichier et la ligne utiles.

Expériences facultatives pour comprendre les bindings

Faites une seule expérience à la fois.

Notez la valeur d'origine avant chaque modification. Observez le résultat, même lorsque vous provoquez volontairement une erreur, puis restaurez la valeur et vérifiez que l'application fonctionne de nouveau. Vous identifierez ainsi précisément l'effet de chaque modification.

  1. Utilisez l'identifiant externe complet de l'action. Dans views/hello_world_menus.xml, remplacez action="training_hello_action" par action="training_hello.training_hello_action", puis mettez le module à niveau. L'application doit encore s'ouvrir : dans un fichier du même module, Odoo accepte la forme courte et ajoute implicitement le préfixe training_hello..
  2. Rompez volontairement le lien entre le menu et l'action. Dans ce même attribut action, écrivez temporairement training_hello.training_hello_action_inconnue, puis tentez une mise à niveau. Odoo doit signaler que l'identifiant externe est introuvable et annuler la modification dans la base. Restaurez ensuite l'identifiant correct.
  3. Distinguez l'identifiant technique du nom visible. Dans le bloc record, changez seulement <field name="name">Hello Odoo</field>, sans toucher à id="training_hello_action". Après la mise à niveau, l'identité technique de l'action reste la même ; seul son libellé destiné aux humains change.
  4. Renommez l'entrée visible de l'application. Dans le bloc menuitem, remplacez temporairement name="Hello Odoo" par un autre libellé, puis mettez le module à niveau. Le nouveau texte doit apparaître dans le menu des applications sans modifier l'action ouverte.
  5. Changez l'ordre de l'application. Dans menuitem, essayez sequence="1", puis sequence="100", en mettant le module à niveau après chaque changement. Observez la position de l'application parmi les autres entrées : plus la valeur est petite, plus l'entrée est prioritaire.
  6. Rompez le lien entre l'action XML et JavaScript. Dans views/hello_world_menus.xml, changez seulement la valeur du champ tag, mettez le module à niveau, puis ouvrez l'application. Odoo trouve bien le menu et l'action, mais le client web ne trouve plus le composant enregistré sous ce nom. Restaurez la valeur avant de continuer.
  7. Renommez correctement l'action côté client. Choisissez un nouveau nom et appliquez-le aux deux emplacements suivants, puis mettez le module à niveau et rechargez complètement la page :
    • Chemin : views/fichier : hello_world_menus.xmlpropriété : contenu de <field name="tag">valeur attendue : votre nouveau nom.
    • Chemin : static/src/hello_world/fichier : hello_world.jsexpression : premier argument de registry.category("actions").add()valeur attendue : le même nouveau nom.
    L'application doit fonctionner de nouveau, car les deux extrémités du lien portent le même nom.
  8. Rompez le binding entre le composant et son template. Dans hello_world.js, changez seulement static template, puis rechargez complètement la page. Le composant est trouvé, mais OWL ne trouve plus le template demandé. Restaurez la valeur et rechargez la page avant de poursuivre.
  9. Renommez correctement le template. Utilisez un nouveau nom identique aux deux emplacements suivants, puis rechargez complètement la page :
    • Chemin : static/src/hello_world/fichier : hello_world.jspropriété : static templatevaleur attendue : votre nouveau nom.
    • Chemin : static/src/hello_world/fichier : hello_world.xmlpropriété : t-namevaleur attendue : le même nouveau nom.
    L'écran doit réapparaître : le nom peut changer, mais le binding doit rester exact.
  10. Comparez rechargement et mise à niveau. Changez d'abord le texte du bouton dans hello_world.xml et celui de la notification dans hello_world.js, puis rechargez la page : ces fichiers d'interface ne créent aucun enregistrement dans la base. Changez ensuite le nom du menuitem dans hello_world_menus.xml : un simple rechargement ne suffit pas, car ce XML alimente la base. Mettez le module à niveau pour voir le nouveau nom.

La suite : les données du module

La section 3 vous fera passer de l'interface aux enregistrements chargés par le module, puis au boilerplate, c'est-à-dire au code de départ généré.

Références officielles, en complément

Après le parcours, vous pouvez comparer vos choix avec les tutoriels développeur officiels d'Odoo 19, le tutoriel « Découvrir le framework web » et le dépôt odoo/tutorials, branche 19.0. Ces ressources sont complémentaires : ne copiez pas leurs extraits sans vérifier leurs dépendances.