====== La couche ORM ====== La couche **ORM** (Object-Relational Mapping) d'OpenERP évite d'écrire des requêtes SQL. Les objets métiers qui accèdent à la base de données héritent de la **classe osv** qui intègre les mécanismes de persistance des objets. ===== Déclaration d'un modèle de données ===== Les informations à fournir sont : * **_name** : le nom du modèle * les champs de données, attributs du modèle * les champs **simples** : Boolean, Date, Char ; * les champs gérant les **relations** entre enregistrements **Exemples : ** * déclaration du champ **name** de type **suite de caractères** : 'name' : fields.char() La méthode **char()** pourra accepter des paramètres qui précisent les caractéristiques du champ (voir ci-après) * déclaration du champ **dateachat** de type **Date** : 'dateachat' : fields.date() On peut préciser les caractéristiques des champs : * **string** : par défaut c'est le nom du champ et c'est ce qui est affiché comme label dans les pages * **required** : booléen et par défaut est False ; Si True le champ doit être renseigné par l'utilisateur ou par défaut lors de la création d'un enregistrement * **help** : Unicode et par default '' ; fournit une aide à la saisie * **index** : booléen par défault False ; un index sera créé sur le champ par Odoo **Exemple : ** * déclaration du champ **name** de type **suite de caractères** avec un label précis et une saisie obligatoire: 'name' : fields.char(string="Titre", required=True) ===== Les champs réservés ===== OpenERP crée des champs réservés qui ne peuvent être modifiés par l'utilisateur. Ils peuvent être lus si nécessaire pour des traitements. * **id** (Id) : identifiant unique ; * **create_date** (Datetime) : date de création de l'enregistrement ; * **create_uid** (Many2one) : identifiant de l'utilisateur qui a créé l'enregistrement * **write_date** (Datetime) : date de la dernière modification * **write_uid** (Many2one) : identifiant du dernier utilisateur qui a modifié l'enregistrement. ==== Les champs spéciaux ===== Odoo **exige** l'existence d'un champ **name** pour tous les modèles à des fins d'affichage et de recherches. A faire : * Définissez le modèle suivant pour un cours avec un titre (obligatoire) et une description. * Editez le fichier **openacademy.py** et ajouter la classe **Cours**. # -*- coding: utf-8 -*- from osv import osv, fields class cours(osv.Model): _name = 'openacademy.cours' _columns = { 'name': fields.char(string='Titre', required=True), 'description': fields.text(string='Description'), } ===== Les fichiers de données ===== Si un module de données a été défini, il est automatiquement chargé. Un module de données est déclaré dans un fichier au format **XML** avec des éléments ****. Chaque élément **** crée ou met à jour un enregistrement de la base de données. {a value} * **model** : est le nom du modèle Odoo dans l'enregistrement ; * **id** : est un identifiant externe pour faire référence à l'enregistrement ; * les éléments **** ont le même nom que celui du champ dasn le modèle. Ils contiennent les valeurs affectées aux champs. Les fichiers de données Data doivent être déclarés dans le fichier manifest **%%__openerp__.py%%** : * soit dans la section **data** s'ils doivent être systématiquement chargés ; * soit dans la section **demo** s'ils ne doivent être chargés que si la base est créée en mode **démonstration**. **Exercices : définir des donnés de démonstration pour quelques cours :** * Modifiez le fichier **demo.xml** avec les informations suivantes .. ou d'autres. Français Activités sur la rédaction des mémoires Activités sur les grands classiques de la science-fiction (Stars Wars, etc.) et bien d'autres choses encore ... Plusieurs lignes peuvent ête utilisées Mathématiques Anglais Préparation TOEIC **Mettez à jour** le module. En cas d'**erreur**, il peut être nécessaire de **relancer** le service openerp : # service openerp restart ===== Retour au sommaire de création d'un module ===== [[dev:openerp:creermodule:accueil|Développer un module dans OpenERP 7]]