Étape 2 sur 7

Décrire les enregistrements

Un fichier de données XML demande à Odoo de créer ou retrouver des enregistrements grâce à des identifiants stables.

1. Créez le dossier et le fichier

Dans l'explorateur de votre éditeur, ajoutez le dossier data sous custom_addons/training_hello, puis créez-y partner_category_data.xml.

2. Ajoutez deux étiquettes

custom_addons/training_hello/data/partner_category_data.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="1">
    <record id="partner_category_student"
            model="res.partner.category">
        <field name="name">Formation · Étudiant</field>
        <field name="color">4</field>
    </record>

    <record id="partner_category_teacher"
            model="res.partner.category">
        <field name="name">Formation · Formateur</field>
        <field name="color">2</field>
    </record>
</odoo>
Ce ne sont pas deux contacts

Ce XML crée deux étiquettes de contact, pas deux fiches dans la liste Contacts. Elles n'ajoutent donc ni nom, ni e-mail, ni ligne à cette liste. Après les étapes 3 et 4 — déclaration dans le manifeste, puis mise à niveau du module — ouvrez Contacts → Configuration → Étiquettes de contact pour les voir. Vous pourrez ensuite les attribuer à une fiche contact dans son champ Étiquettes.

3. Lisez un enregistrement

Les lignes suivantes donnent un sens concret au XML, qui peut paraître abstrait au premier regard.

  • model="res.partner.category" sélectionne le modèle ORM, c'est-à-dire la famille d'enregistrements des étiquettes de contacts. C'est plus proche d'une table ou d'un objet de domaine que d'un libellé choisi librement ; un modèle ORM ne correspond pas forcément à une seule table SQL.
  • id est l'identifiant externe stable utilisé par le module.
  • Chaque balise field donne une valeur à un champ du modèle.
  • noupdate="1" signifie, en simplifiant : « créez une première fois, puis n'écrasez pas lors des mises à niveau normales ». Ce n'est pas l'équivalent littéral d'un INSERT OR IGNORE SQL : Odoo s'appuie sur l'identifiant externe. La première création a bien lieu ; un nouvel enregistrement avec un nouvel id sera aussi créé, mais une modification ultérieure des valeurs XML ne remplacera pas un enregistrement existant marqué noupdate.