1. Pourquoi êtes-vous ici ?
À l'étape 4, vous avez vu les tags, c'est-à-dire des étiquettes, Formation · Étudiant et Formation · Formateur dans Contacts → Configuration → Contact Tags, puis leurs external IDs, c'est-à-dire leurs identifiants externes. Cela confirme que le fichier data/partner_category_data.xml les a bien créés dans la base.
Vous allez maintenant créer une view, c'est-à-dire une définition d'écran, pour choisir comment ces données existantes apparaissent dans l'interface interne d'Odoo. Une view ne crée ni ne modifie les tags. Elle ne décide pas non plus qui peut les voir : elle décrit seulement l'écran. Les droits d'accès et les record rules, c'est-à-dire les règles qui filtrent les enregistrements, restent des sujets distincts.
Trois situations réelles où une view est utile
- Équipe commerciale : le développeur prépare une
list view, ou vue liste, avec le nom, le téléphone, le commercial responsable et l'étape. Le commercial obtient une file de travail lisible, plutôt qu'une liste technique de tous lesfields, c'est-à-dire de tous les champs. - Validation d'absences : le développeur affiche la personne, les dates et le
status, ou statut, de chaque demande, avec des filtres adaptés. Le responsable voit immédiatement ce qui attend sa décision. - Préparation des livraisons : le développeur met la référence, le client, la date prévue et le
statusde la livraison en évidence. Le magasinier sait quelles opérations traiter en priorité.
Ce sera une list « statique » au sens pédagogique : vous partez de quelques lignes connues, chargées par le fichier XML de l'exercice. Ce n'est pas une page HTML statique : Odoo lit toujours les records, ou enregistrements, dans la base et les affiche dans son client web. Si quelqu'un modifie un tag, la list affichera sa nouvelle valeur.
2. Adaptez le premier bloc à votre cas
Le fichier généré views/views.xml propose un exemple de vue liste, mais son modèle training_hello.training_hello n'existe pas encore. Ne décommentez pas ce bloc. Créez plutôt un fichier adapté à un modèle qui existe déjà :
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="partner_category_training_list_view"
model="ir.ui.view">
<field name="name">training_hello.partner.category.list</field>
<field name="model">res.partner.category</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="color" optional="hide"/>
</list>
</field>
</record>
</odoo>model="ir.ui.view"crée une définition d'écran dans Odoo.res.partner.categoryest lemodel, ou modèle de données, destagsContacts déjà utilisé à l'étape 2.<list>demande une ligne partag; chaque<field>choisit une colonne.optional="hide"rend la couleur disponible sans encombrer le premier affichage : l'utilisateur peut l'afficher depuis les options de colonnes.
</odoo>.Elle ferme le fichier XML entier, pas seulement le premier record. Pour les étapes suivantes, placez les nouveaux record et le menuitem avant cette ligne de fermeture. Un élément ajouté après </odoo> provoque l'erreur XML « Extra content at the end of the document ». Ce message signifie qu'il reste du contenu après la fin du document.
3. Ajoutez l'action qui ouvre la view
Le premier record que vous avez écrit était une view : il décrit l'apparence de la list. Le record suivant vient du paragraphe commenté <!-- actions opening views on models --> du views.xml généré. Il répond à la question « que doit ouvrir Odoo quand l'utilisateur choisit cet écran ? » : c'est une ir.actions.act_window. Remplacez la ligne finale </odoo> de votre fichier par ce bloc :
<record id="action_training_partner_categories"
model="ir.actions.act_window">
<field name="name">Training tags</field>
<field name="res_model">res.partner.category</field>
<field name="view_mode">list,form</field>
<field name="view_id" ref="partner_category_training_list_view"/>
</record>
</odoo>Décomposez l'action
<record id="action_training_partner_categories" model="ir.actions.act_window">crée une action de fenêtre, ouwindow action. Sonidest sonexternal ID, c'est-à-dire son identifiant externe, dans ce module.nameest le libellé humain de l'action;res_modelindique quelmodelelle doit ouvrir.view_modeautorise d'abord lalist, puis leformlorsqu'un utilisateur ouvre une ligne.view_id ref="partner_category_training_list_view"relie l'actionà lalist viewcréée juste avant. Sans ce lien, Odoo choisirait uneviewpar défaut pour cemodel.
La view dit donc comment présenter les tags ; l'action dit quoi ouvrir et avec quelle view. L'action reste volontairement générale : elle ouvre les tags autorisés par les droits de l'utilisateur. Dans une base de formation neuve, vous verrez les deux tags créés dans l'exercice. Dans une base déjà utilisée, d'autres tags Contacts peuvent aussi apparaître. C'est normal.
4. Ajoutez le menu qui lance l'action
Vous avez maintenant une view et une action, mais aucun endroit où l'utilisateur peut cliquer. Remplacez à nouveau la dernière ligne </odoo> par le bloc suivant. Il ajoute le menuitem et referme correctement le fichier :
<menuitem id="menu_training_partner_categories"
name="Training tags"
parent="training_hello_menu_root"
action="action_training_partner_categories"
sequence="20"/>
</odoo>parent="training_hello_menu_root" place cette entrée sous l'application Hello Odoo. L'attribut action référence le record que vous venez d'écrire : le menu n'affiche rien par lui-même, il lance cette action.
menu ?Ouvrez d'abord l'application Hello Odoo. L'entrée Training tags apparaît alors dans la barre violette en haut, à droite de Hello Odoo. Le sélecteur d'applications à neuf points ne liste que les applications racines : votre menuitem est un sous-menu, pas une nouvelle application.
<odoo>
<record id="partner_category_training_list_view" ...>
...
</record>
<record id="action_training_partner_categories" ...>
...
</record>
<menuitem id="menu_training_partner_categories" ... />
</odoo>5. Chargez la view, puis observez le résultat
Dans custom_addons/training_hello/__manifest__.py, ajoutez le nouveau fichier après les données qu'il référence :
"data": [
"views/hello_world_menus.xml",
"data/partner_category_data.xml",
"views/partner_category_list.xml",
],- Enregistrez les fichiers et mettez le module Hello Odoo à niveau.
- Ouvrez l'application Hello Odoo.
- Choisissez Training tags. Repérez les deux lignes créées à l'étape 2 ; une base déjà utilisée peut aussi contenir d'autres
tags.
Lors de la mise à niveau, Odoo transforme le fichier de données, la view, l'action et le menu en records dans la base de données. Quand vous cliquez sur le menu, l'action ouvre la view. Odoo lit alors les tags autorisés et construit la list. C'est ainsi que le contenu du premier bloc de views.xml est réellement utilisé.
Données de départ → list view → action → menu. Au jour 2, vous remplacerez le model Contacts par votre propre model et vous enrichirez cet exemple. Mais le trajet restera le même.