Étape 1 sur 4

Préparer l'extension

Nous partons du module installé dans la section 1. Avant d'ajouter du code, suivons le trajet complet entre le clic dans le sélecteur d'applications — l’« app switcher » d’Odoo, en haut à gauche — et la notification finale.

1. Vérifiez le point de départ

Dans Apps, Hello Odoo doit être installé. Dans custom_addons/training_hello/__manifest__.py, depends contient encore base et data est vide.

Si ce n'est pas le cas, terminez d'abord la section 1. Nous voulons enrichir un module qui fonctionne déjà, pas diagnostiquer deux étapes à la fois.

2. Suivez le trajet avant de le construire

  1. Un menu racine ajoute Hello Odoo au sélecteur d'applications.
  2. Ce menu ouvre une client action stockée dans la base.
  3. Le champ tag de l'action désigne une entrée du registry JavaScript.
  4. Le registry retourne notre composant Owl.
  5. Le composant affiche son template XML.
  6. Le clic sur le bouton appelle une méthode qui utilise le service de notification.
Registry JavaScript

C'est une table de correspondance côté client, organisée en catégories. Ici, la catégorie actions associe une clé technique — training_hello.hello_world — au composant Owl à lancer.

Le tag sera défini dans l'enregistrement ir.actions.client que nous créerons à l'étape 3, dans views/hello_world_menus.xml. Sa valeur sera exactement training_hello.hello_world, la clé enregistrée à l'étape 2 dans static/src/hello_world/hello_world.js (Programmer le composant), puis reprise dans l'action à l'étape 3 (Construire l'interface).

Pourquoi autant de pièces ?

Odoo sépare ce qui persiste dans la base, ce qui dessine l'écran et ce qui réagit dans le navigateur. Cette séparation semble longue pour un bouton ; elle devient précieuse dès que l'application grandit.

3. Préparez le dossier de l'écran

Dans custom_addons/training_hello/, créez successivement les dossiers static, src et hello_world. Vous devez obtenir :

Arborescence du module
training_hello/
├── __manifest__.py
├── static/
│   └── src/
│       └── hello_world/
└── views/

Le dossier hello_world/ accueillera le JavaScript et le template du même écran. Le fichier de menu ira dans views/ :

  • la balise menuitem créera un enregistrement racine du modèle ir.ui.menu pour l'entrée Hello Odoo ;
  • la balise record créera un enregistrement du modèle ir.actions.client pour l'action qui ouvre le composant ;
  • l'attribut action="training_hello_action" lie le menu à cette action par son identifiant externe ; Odoo conserve ce binding sur l'enregistrement du menu, tandis que les fichiers JavaScript et XML déclarés dans assets sont chargés comme ressources du navigateur.

4. Ne complétez pas encore le manifeste

À la fin de l'étape 3, nous ajouterons les fichiers au manifeste lorsqu'ils existeront tous. Cela permettra de lire clairement les deux conventions de chemin utilisées par Odoo :

  • dans data, le chemin est relatif au dossier du module ;
  • dans assets, le chemin commence par le nom technique du module.
À ce stade

Le module installé reste utilisable, et son nouveau dossier d'interface est prêt. Vous connaissez déjà le trajet que chaque fichier viendra compléter.