Vous êtes sur la page 1sur 22

Technical Training - Exercises

Release 6.0.2
OpenERP
2011-10-14
Contents
1 Conguration 3
1.1 Open Source RAD avec OpenObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Installer OpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Architecture dOpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Installation par les paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Installation partir des sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Procdure typique de rcupration des sources (sur Linux bas sur Debian) . . . . . . . . . . . . 4
1.5 Cration de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Crer un module OpenERP 5
2.1 Composition dun module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Structure dun module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Objet de service - ORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Attributs osv.osv prdnis pour les objets mtiers . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Types de champs de lORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Attributs communs supports par tous les champs (optionnels sauf indication) . . . . . . . . . . . 6
Champs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.5 Noms de champs rservs/spciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.6 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.7 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Dclaration dune action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Crer des vues : bases 8
3.1 Dclaration gnrique dune vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Les vues Formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
lments des vues formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4 Relations entre objets 10
4.1 Champs relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Hritage 11
5.1 Mcanismes dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Attributs pr-dnis pour les objets mtiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 Hritage des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2
6 Mthodes de lORM 12
6.1 Champs fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6.2 Attributs osv.osv pr-dnis pour les objets mtier . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7 Vues avances 14
7.1 Liste & Arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.2 Calendriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.3 Vues de Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.4 Diagrammes de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.5 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8 Workows 16
9 Scurit 17
9.1 Mcanismes de contrle daccs bass sur les groupes . . . . . . . . . . . . . . . . . . . . . . . . 17
ir.model.access.csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10 Assistants 18
10.1 Objets wizard (osv_memory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10.2 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10.3 Excution dun assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
11 Internationalisation 19
12 Rapports 19
12.1 Rapports imprims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Expressions utilises dans OpenERP dans les modles de rapport . . . . . . . . . . . . . . . . . . 20
12.2 Tableaux de bord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
13 WebServices 21
13.1 Exemple Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3
Based on a real case, this chapter covers: building an OpenERP module and its interface, Views,
Reports, Workows, Security aspects, Wizards, WebServices, Internationalization, Rapid Ap-
plication Development (RAD) and Performance Optimization.
1 Conguration
1.1 Open Source RAD avec OpenObject
OpenERP est un Outil de Gestion dEntreprise moderne, publi sous license AGPL, et fournissant les fonctionnal-
its CRM, Ressources Humaines, Ventes, Comptabilit, Production, Inventaires, Gestion de Projet, ... Il est bas
sur OpenObject, un framework modulaire, volutif et intuitif de RAD (Rapid Application Development) crit en
Python.
OpenObject fournit une bote outils complte et modulaire pour rapidement crer des fonctionnalits
: support de lORM (mapping objet-relationnel), interfaces bases sur des templates MVC (Modle-Vue-
Contrleur), un systme de gnration de rapport, internationnalisation automatise et bien plus.
Python est un langage de programmation de haut-niveau, idal pour du RAD, combinant puissance et
syntaxe claire et un noyau de taille rduite par sa conception.
Tip: Liens utiles
Site principal avec les tlchargements dOpenERP : www.openerp.com
Documentation fonctionnelle et technique : doc.openerp.com
Ressources de la communaut : www.launchpad.net/open-object
Serveur dintgration : test,openobject.com
Apprendre Python: doc.python.org
Plateforme dE-Learning OpenERP : edu.openerp.com
1.2 Installer OpenERP
OpenERP est distribu sous la forme de paquets/dinstalleurs pour la plupart des plateformes, mais peut bien
entendu tre install depuis le code source sur nimporte quelle plateforme.
Architecture dOpenERP
OpenERP utilise le paradigme bien connu client-serveur, avec diffrentes pices logicielles agissant en tant que
client et serveur dpendant de la conguration dsire.
OpenERP fournit un client lourd (GTK+) pour toutes les plateformes et une interface web accessible en utilisant
nimporte quel navigateur Web rcent.
Tip: Procdure dinstallation
La procdure dinstallation dOpenERP est susceptible dvoluer (dpendances et autres), assurez-vous alors de
toujours vrier la documentation spcique (package et sur le site Web) pour les dernires procdures. Voir
http://doc.openerp.com/install.
4
1.3 Installation par les paquets
Windows Installeur tout-en-un et installeurs spars pour le serveur, le client, le serveur web sont sur le
site web
Linux Les paquets openerp-server et openerp-client sont disponibles via le gestionnaire de paquets
(e.g. Synaptic sur Ubuntu) OU en utilisant BaZaar bzr branch lp:openerp (ou openerp/trunk
pour la version trunk) une fois identi sur Launchpad, ensuite, cd openerp (cd trunk dans la
version trunk) et ./bzr_set.py
Mac Regardez en ligne pour un paquet dinstallation pour le client GTK, ainsi que des tutoriels pour
installer le serveur (e.g. devteam.taktik.be)
1.4 Installation partir des sources
Il y a deux alternatives :
1. utiliser une archive fournie sur le site web,
2. ou obtenir directement les sources en utilisant Bazaar (gestionnaire de contrle de source distribu).
Vous aurez galement besoin dinstaller les dpendances requises (PostgreSQL et quelques librairies Python - voir
la documentation sur doc.openerp.com).
Note: OpenERP tant bas sur Python, aucune compilation nest ncessaire.
Procdure typique de rcupration des sources (sur Linux bas sur Debian)
$ sudo apt-get install bzr # installation de bazaar
$ bzr branch lp:openerp # rcupration des sources
$ cd openerp && python ./bzr_set.py # chercher le code et lancer linstallation
1.5 Cration de la base de donnes
Aprs linstallation, lancer le serveur et le client. Depuis le client GTK, utilisez le menu Fichier > Base de donnes
> Nouvelle base de donnes pour crer une nouvelle base de donnes (le mot de passe super-admin par dfaut est
admin). Chaque base de donnes a ses propres modules et sa propre conguration.
Note: Des donnes de dmonstration peuvent aussi tre installes.
5
2 Crer un module OpenERP
2.1 Composition dun module
Un module peut contenir les lments suivants :
Objet Mtier : dclars en tant que classes Python hritants de la classe OpenObject osv.osv, la persistance
de ces ressources est compltement gre par OpenObject,
Donnes : chiers XML/CSV contenant des mta-donnes (dclaration de vues et de workow), des don-
nes de conguration (paramtrage des modules) et des donnes de dmonstration (optionnelles mais rec-
ommendes pour tester),
Assistants : formulaire interactif tats utiliss pour aider les utilisateurs, souvent disponibles comme
action contextuelle sur les ressources du systme,
Rapports : RML (format XML). Modles de rapports MAKO ou OpenOfce, dans lesquels sont intgres
les donnes du systme de nimporte quel objet mtier et gnre des rapports aux formats HTML, ODT ou
PDF.
2.2 Structure dun module
Chaque module est contenu dans son propre rpertoire dans le rpertoire server/bin/addons ou dans un
autre rpertoire daddons, congur lors de linstallation du serveur.
Note: Congurer les emplacements des addons
Par dfaut, le seul rpertoire daddons connu par le serveur est server/bin/addons. Il est possibe dajouter
de nouveaux addons en 1) les copiant dans server/bin/addons, ou en crant des liens symboliques vers
chacun deux dans ce rpertoire, ou 2) spcier un autre rpertoire contenant des addons au serveur. Cette
dernire mthode peut tre effectue soit en lanant le serveur avec loption addons-path= option, ou en con-
gurant cette option dans le chier openerp_serverrc, gnr automatiquement sour Linux dans votre rpertoire
personnel lorsque le serveur est lanc avec loption save. Vous pouvez fournir plusieurs rpertoires loption
addons_path en les sparant par des virgules.
Le chier __init__.py est la dclaration en Python du module, car OpenERP est aussi un module Python. Il
contient toutes les instructions dimportation de tous les chiers Python, sans lextension .py. Par exemple, si le
module contient un unique chier Python nomm mymodule.py :
import mymodule
Le chier __openerp__.py est rellement le chier qui dclare le module OpenERP. Il est obligatoire dans chaque
module. Il contient uniquement un dictionnaire Python avec de nombreuses informations importantes, comme le
nom du module, sa description, la liste des autres modules OpenERP dont linstallation est requise pour que le
module courant fonctionne correctement Il contient aussi, entre autres, une rfrence tous les chiers de donnes
6
(xml, csv, yml, ...) du module. Sa structure gnrale est la suivante (voir la documentation ofcielle pour une
description complte du chier) :
{
"name": "MyModule",
"version": "1.0",
"depends": ["base"],
"author": "Author Name",
"category": "Category",
"description": """
Description text
""",
data: [
mymodule_view.xml,
#tous les autres fichiers de donnes, lexception des donnes de dmonstration et de tests
],
demo: [
#fichiers contenant les donnes de dmonstration
],
test: [
#fichiers contenant les donnes de test
],
installable: True,
active: False,
# certificate: certificate,
}
Exercice 1 - Cration dun module
Crez le module vide Open Academy, avec un chier __openerp__.py. Installez-le dans OpenERP.
2.3 Objet de service - ORM
Composant cl de OpenObject, lobjet de service (OSV) implmente une couche complte de mapping objet-
relationnel, librant ainsi les dveloppeurs davoir crire du SQL basique. Les objets mtier sont dclars dans
des classes Python hritants de la classe osv.osv, leur permettant de faire partie du modle OpenObject, et comme
par magie persistant grce la couche ORM.
Attributs osv.osv prdnis pour les objets mtiers
2.4 Types de champs de lORM
Les objets peuvent contenir 3 types de champs : simple, relationnel et fonctionnel. Les types simples sont integer,
oat, boolean, string, etc. Les champs relationnels reprsentent les relations entre objets (one2many, many2one,
many2many). Les champs fonctionnels ne sont pas stocks dans la base de donnes mais sont calculs la vole
avec des fonctions Python.
Attributs communs supports par tous les champs (optionnels sauf indication)
string : Libell du champ (requis)
required : True si obligatoire
readonly : True si non ditable
help : Bulle daide
7
select : 1 pour inclure le champ dans la vue de recherche et optimiser le ltre des listes (avec un index en
base de donnes)
context : Dictionnaire contenant des paramtres contextuels (pour les champs relationnels)
Champs simples
boolean(...) integer(...) date(...) datetime(...) time(...)
start_date: elds.date(Start Date)
active: elds.boolean(Active)
priority: elds.integer(Priority)
char(string,size,translate=False,..) text(string, translate=False,...) [Champs bass sur du texte]
translate: True si la valeur du champ peut tre traduite par les utilisateurs
size: taille maximale pour les champs char (41,45)
oat(string, digits=None, ...) [valeur ottante avec prcision arbitraire et ratio]
digits: tuple (precision, scale) (58) . Si digits nest pas spci, cest un oat, pas un type
decimal.
2.5 Noms de champs rservs/spciaux
Quelques noms de champs sont rservs un comportement prdnis dans OpenObject. Certains dentre eux
sont crs automatiquement par le systme, et dans ce cas, nimporte quel champ qui portera ce nom sera ignor.
id identiant unique dans le systme pour lobjet (cr par lORM, ne pas lajouter)
name dnit la valeur utilise par dfaut pour afcher les enregistrements dans les listes,
etc. si manquant, utilisez _rec_name pour spcier un autre champ utiliser dans ce
but
... ...
Exercice 2 - Dnir une classe
Dnir une nouvelle classe Course dans le module openacademy.
2.6 Menus
Llment menuitem est un raccourci pour dclarer un enregistrement ir.ui.menu et le connecter avec laction
correspondante via un enregistrement ir.model.data.
<menuitem id="menu_id" parent="parent_menu_id" name="label" icon="icon-code"
action="action_id" groups="groupname1,groupname2" sequence="10"/>
2.7 Actions
Les actions sont dclares comme des enregistrements normaux et peuvent tre dclenches de 3 faons :
1. en cliquant sur les lments de menu lis une action spcique
2. en cliquant sur des boutons dans des vues, si ces boutons sont connects des actions
3. en tant quactions contextuelles sur un objet
8
Dclaration dune action
<record model="ir.actions.act_window" id="action_id">
<field name="name">action.name</field>
<field name="view_id" ref="view_id"/>
<field name="domain">[list of 3-tuples (max 250 characters)]</field>
<field name="context">{context dictionary (max 250 characters)}</field>
<field name="res_model">object.model.name</field>
<field name="view_type">form|tree</field>
<field name="view_mode">form,tree,calendar,graph</field>
<field name="target">new</field>
<field name="search_view_id" ref="search_view_id"/>
</record>
Exercice 3 - Dnir de nouvelles entres de menu
Dnissez de nouvelles entres de menu pour accder aux cours et aux sessions sous lentre de menu
OpenAcademy; on devrait tre en mesure de 1) afcher la liste de tous les cours et 2) crer/modier des
cours.
3 Crer des vues : bases
Exercice 1 - Personnaliser une vue depuis lditeur de vues de linterface web
Crez une vue liste pour lobjet Course , afchant le nom du cours ainsi que sa description.
Les vues forment une hirarchie. Plusieurs vues du mme type peuvent tre dclares sur le mme objet, et
seront afches selon leurs priorits. En dclarant une vue hrite, il est possible dajouter ou de supprimer des
fonctionnalits dans une vue.
3.1 Dclaration gnrique dune vue
<record model="ir.ui.view" id="view_id">
<field name="name">view.name</field>
<field name="model">object_name</field>
<field name="type">form</field> # tree,form,calendar,search,graph,gantt
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<!-- view content: <form>, <tree>, <graph>, ... -->
</field>
</record>
3.2 Les vues Formulaires
Les vues Formulaires permettent la cration et la modication des ressources, et correspondent aux lments
<form>.
lments des vues formulaires
Attributs communs tous les lments :
string: libell de llment
nolabel: 1 pour cacher le libell du champ
9
colspan: nombre de colonnes sur lesquelles le champ doit staler
rowspan: nombre de lignes sur lesquelles le champ doit staler
col: nombre de colonnes que cet lment doit allouer ses lments ls
invisible: 1 pour cacher compltement cet lment
eval: evalue ce code Python en tant que contenu de llment (le contenu est une chane de caractres par
dfaut)
attrs: dictionnaire Python dnissant des conditions dynamiques sur ces attributs : readonly, invisible,
required bass sur des tuples de recherche sur les valeurs dautres champs
Field Widgets automatiques dpendants du type de champ correspondant. Attributs :
string: libell du champ, aussi pour la recherche (surcharge le nom du champ)
select: 1 pour afcher le champ en recherche normale, 2 pour la recherche
avance seulement
nolabel: 1 pour cacher le libell du champ
required: surcharge lattribut required du champ
readonly: surcharge lattribut readonly du champ
password: 1 pour cacher les caractres saisis dans ce champ
context: code Python dclarant un dictionnaire de contexte
domain: code Python dclarant une liste de tuples pour restreindre les valeurs
on_change: appel dune mthode Python dclencher quand une valeur est
change
completion: 1 pour activer lauto-completion des valeurs lorsque cela est pos-
sible
groups: liste des groupes (spars par des virgules) autoriss voir ce champ
widget: selectionne un widget alternatif (one2many_list, many2many, url,
email, image, oat_time, reference, text_wiki, text_html, progressbar)
properties widget dynamique afchant toutes les proprits disponibles (pas dattributs)
button
widget cliquable associ des actions. Attributs spciques :
type: type de button : workow (dfaut), object ou action
name: signal du workow, nom de la fonction (sans les parenthses) ou
action appeler (selon le type)
conrm: message texte de conrmation lorsque le bouton est cliqu
states: liste des tats (spars par des virgules) pour lesquels le bouton est
visible
icon: icone optionnelle (toutes les icnes GTK STOCK e.g. gtk-ok)
separator ligne horizontale de sparation pour structurer les vues, avec un libell optionnel
newline paramtre virtuel pour complter la ligne courante de la vue
label libell ou lgende libre dans le formulaire
group utilis pour organiser les champs en groupes avec un libell optionnel (ajoute un
cadre)
notebook, page
les lments notebook sont des gestionnaires donglets pour les lments page. Attributs :
name: libell de longlet
position: position de longlet dans son container (inside, top, bottom, left,
right)
Exercice 2 - Personnaliser les vues liste et formulaire via XML
Crez vos propres vues liste et formulaire pour lobjet Course. Les donnes afches doivent tre :
Dans la vue liste, le nom du cours;
Dans la vue formulaire, le nom et la description du cours.
10
Exercice 3 - Onglets
Dans la vue formulaire des cours, afchez la description dans un onglet, de cette manire, il sera facile
dajouter dautres onglets par la suite, contenant des informations additionnelles.
4 Relations entre objets
Exercice 1 - Crer des classes
Crez les classes Session et Attendee et ajoutez un menu et une action pour afcher les sessions. Une session
a un nom, une date de dbut, une dure (en jours) et un nombre de siges. Un stagiaire a un nom, qui nest
pas requis.
4.1 Champs relationnels
Attributs commun supports par les champs relationnels
domain: restriction optionnelle sous la forme darguments pour la mthode search (voir search())
many2one(obj, ondelete=set null,...) (50) : Relation vers un objet parent (en utilisant une cl trangre)
obj: _name de lobjet de destination (requis)
ondelete: gestion de la suppression, e.g. set null, cascade, restrict voir la documentation
de PostgreSQL
one2many(obj, eld_id, ...) (55) : Relation virtuelle vers de multiples objets (inverse du many2one)
obj: _name de lobjet de destination (requis)
eld_id: nom du champ du many2one inverse, i.e. la cl trangre correspondante (requis)
many2many(obj, rel, eld1, eld2, ...) (56) : Relation multiple bi-directionnelle entre des objets
obj: _name de lobjet de destination (requis)
rel: table de relation utiliser (requis)
eld1: nom du champ dans la table de relation enregistrant lid de lobjet courant (requis)
eld2: nom du champ dans la table de relation enregistrant lid de lobjet cible (requis)
11
Exercice 2 - Relations many2one, one2many
En utilisant les types de champs de lORM (one2many, many2one), modiez les classes Course, Session et
Attendee an de reter leurs relations avec dautres objets, dnies comme suit :
Exercice 3 - Modiez les vues
Modiez les vues liste et formulaire de lobjet Course et crez les vues pour lobjet Session. Les donnes
afches pour lobjet Course :
Dans la vue liste, le nom du cours et le responsable de ce cours;
Dans la vue formulaire, le nom et le responsable en haut, ainsi que la description du cours dans un
onglet et les sessions lies dans un deuxime onglet.
Pour lobjet Session :
Dans la vue liste, le nom de la session et les cours lis;
Dans la vue formulaire, tous les champs de lobjet Session.
Le nombre de donnes afcher tant important, essayez dorganiser les vues formulaires de telle sorte que
linformation quelles contiennent parasse claire.
5 Hritage
5.1 Mcanismes dhritage
Attributs pr-dnis pour les objets mtiers
_inherit _name de lobjet mtier parent (pour lhritage simple)
_inherits pour lhritage multiple / : dictionnaire faisant correspondre le _name de lobjet
mtier parent au nom des champs correspondant aux cls trangres utiliser
12
5.2 Hritage des vues
Les vues existantes doivent tre modies travers des vues hrites, jamais directement. Une vue hrite
rfrence sa vue parente en utilisant le champ inherit_id, et doit ajouter ou modier des lments existants dans
cette vue en les rfrenant par des expressions XPath, en spciant la position approprie.
position
inside: plac dans la partie corre-
spondante (dfaut)
before: plac avant la partie cor-
respondante
replace: remplace la partie corre-
spondante
after: plac aprs la partie corre-
spondante
Tip: La rfrence XPath peut tre trouve www.w3.org/TR/xpath
<!-- improved idea categories list -->
<record id="idea_category_list2" model="ir.ui.view">
<field name="name">id.category.list2</field>
<field name="model">ir.ui.view</field>
<field name="inherit_id" ref="id_category_list"/>
<field name="arch" type="xml">
<xpath expr="/tree/field[@name=description]" position="after">
<field name="idea_ids" string="Number of ideas"/>
</xpath>
</field>
</record>
Exercice 1 - Ajouter un mcanisme dhritage
En utilisant lhritage de classe, crez une classe Partner qui modie la classe Partner existante, ajoutant
un champ boolen is_instructor, et la liste des sessions o ce partenaire sera prsent. En utilisant lhritage
des vues, modiez la vue formulaire existante an dafcher les nouveaux champs.
Exercice 2 - domain
Ajoutez un mcanisme la vue formulaire des Session an de permettre lutilisateur de choisir linstructeur
seulement parmi les partenaires dont le champ Instructeur est Vrai.
Exercice 3 - domain
Nous dcidons maintenant de crer de nouvelles catgories de partenaires : Professeur/Professeur Niveau 1
and Professeur/Professeur Niveau 2. Modiez le domaine dni prcdemment pour autoriser lutilisateur
choisir linstructeur parmi les partenaires dont le champ Instructeur est Vrai ou ceux qui appartiennent
lune des catgories que nous avons dnies.
6 Mthodes de lORM
6.1 Champs fonctionnels
function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type=oat, fnct_search=None, obj=None,
method=False, store=False, multi=False, ...) : Functional eld simulating a real eld, computed rather than
stored
fnct [fonction pour calculer la valeur du champ (requis)]
13
def fnct(self, cr, uid, ids, eld_name, arg, context) retourne un dictionnaire { idsvaleurs } avec
des valeurs du type type
fnct_inv [fonction utilise pour crire une valeur dans ce champ]
def fnct_inv(obj, cr, uid, id, name, value, fnct_inv_arg, context)
type : type du champ simul (nimporte quel type part function)
fnct_search [fonction utilise pour effectuer une recherche sur ce champ]
def fnct_search(obj, cr, uid, obj, name, args) retourne une liste de tuples pour le search(), e.g.
[(id,in,[1,3,5])]
obj : _name model du champ simul si cest un champ relation
store, multi : mcanismes doptimisation (voir usage dans la section Performances)
related(f1, f2, ..., type=oat, ...) [Champ raccourci quivalent parcourir des relations chaines]
f1,f2,... : champs lis pour atteindre la cible (f1 requis) (51)
type : type du champ cible
property(obj, type=oat, view_load=None, group_name=None, ...) [Attribut dynamique avec des droits
daccs spciques]
obj : objet (requis)
type : type du champ quivalent
Exercice 1 - Champs fonctionnels
Ajoutez un champ fonctionnel la class Session, qui contient le pourcentage de places restantes dans une
session. Afchez ce pourcentage dans les vues liste et formulaire des sessions. Une fois ceci fait, essayez de
lafcher sous la forme dune barre de progression.
Exercice 2 - Mthodes Onchange
Modiez la vue formulaire ainsi que la classe reprsentant les sessions de telle sorte que le pourcentage de
places restantes se rafrachisse lorsque le nombre de places ou le nombre de stagiaires change, sans avoir
enregistrer les modications.
Exercice 3 - warning
Modiez cette mthode onchange pour lever un avertissement lorsque le nombre de places est infrieur 0.
6.2 Attributs osv.osv pr-dnis pour les objets mtier
_constraints liste de tuples dnissant les contraintes Python, de la forme (fonc_name, message,
champs).
_sql_constraints liste de tuples dnissant les contraintes SQL, de la forme (nom, sql_def, message).
Exercice 4 - Ajouter des contraintes
Ajoutez une containte qui contrle que la description et lintitul dun cours ne sont pas les mmes.
14
Exercice 5 - Ajouter une contrainte SQL
Ajoutez une contrainte SQL pour contrler quun cours a un nom unique.
Exercice 6 - Ajouter une option de duplication
Depuis que nous avons ajout une contrainte an que le nom dun cours soit unique, il nest plus possible
dutiliser la fonction dupliquer (Formulaire > Dupliquer). R-implmenter votre propre mthode copy
qui permet de dupliquer un objet Cours, en changeant le nom original en Copie de [nom original].
Exercice 7 - Objets actifs Valeurs par dfaut
Dnissez la valeur par dfaut du champ start_date la date du jour. Ajoutez un champ active dans la classe
Session et xez la session comme tant active par dfaut.
7 Vues avances
7.1 Liste & Arbre
Les vues Liste contiennent des lments eld, sont cres avec le type tree et ont un lment <tree> parent.
<tree string="Idea Categories" toolbar="1" colors="blue:state==draft">
<field name="name"/>
<field name="state"/>
</tree>
Exercice 1 - Coloration de liste
Modiez la vue liste des Sessions de telle manire que les sessions qui ont dur moins de 5 jours soient en
bleu et celles qui ont dur plus de 15 jours soient en rouge.
Note: duration champ Attention ! Si le champ duration nest pas dclar dans la vue, le client naura pas
conscience de son existence. Cela produira une erreur.
7.2 Calendriers
Vues utilises pour afcher des champs date en tant quvnements dans un calendrier (lment parent <calen-
dar>).
Attributs
color: nom du champ pour la segmentation par couleurs
date_start: nom du champ contenant la date de dbut de lvnement
day_length: longueur en heures dune journe du calendrier (dfaut: 8)
date_stop: nom du champ contenant la date de n de lvnement OU
date_delay: nom du champ contenant la dure de lvnement
lments autoriss eld (pour dnir le libell de chaque vnement du calendrier)
<calendar string="Ideas" date_start="invent_date" color="inventor_id">
<field name="name"/>
</calendar>
15
Exercice 2 - Vue Calendrier
Ajoutez une vue Calendrier lobjet Session autorisant lutilisateur voir les vnements associs
lOpen Academy.
7.3 Vues de Recherche
Les vues de Recherche sont utilises pour personnaliser le bandeau de recherche situ en haut des vues Listes,
sont dclares avec le type search et ont un lment parent <search>. Aprs avoir dni la vue de recherche avec
un id unique, ajoutez-la laction ouvrant la vue liste en utilisant le champ search_view_id de laction.
lments autoriss eld, group, separator, label, search, lter, newline, properties
lter : permet de dnir des boutons pour ltrer dans le domaine
ajouter un attribut contextuel aux champs cre des widgets qui modient le
contexte de recherche (utile pour des champs sensibles au contexte, e.g. prix
dpendants de listes de prix)
Exercice 3 - Vues de recherche
Ajoutez une vue de recherche contenant : 1) un champ pour rechercher des cours bas sur leur nom et
2) un bouton pour lter les cours pour lesquels lutilisateur courant est le respondable. Mettre ce dernier
slectionn par dfaut.
7.4 Diagrammes de Gantt
Graphique en barres typiquement utilis pour afcher le planning dun projet (lment parent <gantt>).
Attributs same as <calendar>
lments autoriss
eld, level
level : utilis pour dnir les niveaux dans le diagramme de Gantt avec le
champ utilis comme libell pour le sous-niveau
<gantt string="Ideas" date_start="invent_date" color="inventor_id">
<level object="idea.idea" link="id" domain="[]">
<field name="inventor_id"/>
</level>
</gantt>
Exercice 4 - Diagramme de Gantt
Ajouter un diagramme de Gantt permettant lutilisateur de voir les sessions planies lies au module Open
Academy. Les sessions devront tre groupes par formateur.
7.5 Graphiques
Vues utilises pour afcher des graphiques statistiques (lment parent <graph>).
16
Attributs
type: type de graphique : bar, pie (par dfaut)
orientation: horizontal, vertical
lments autoriss
eld, avec un comportement spcique :
le premier champ de la vue sera laxe X, le deuxime laxe Y, le troisime
laxe Z
2 champs sont requis, le troisime est optionnel
lattribut group dnit le champ GROUP BY (affect 1)
lattribut operator permet de dnir quel oprateur daggrgation utiliser
sur les autres champs lorsquun champ est group (+,*,**,min,max)
<graph string="Total idea score by Inventor" type="bar">
<field name="inventor_id" />
<field name="score" operator="+"/>
</graph>
Exercice 5 - Vue graphique
Ajoutez un graphique qui afche, pour chaque cours, le nombre de participants sous la forme dun graphique
barres. Vous pouvez le crer soit pour lobjet Course, soit pour lobjet Session.
8 Workows
Les workows sont des modles associs aux objets mtiers dcrivant la dynamique de la socit. Les workows
sont aussi utiliss pour suivre des processus qui voluent avec le temps.
Exercice 1 - Workow statique
Crez un attribut state qui sera utilis pour dnir un workow pour lobjet Session. Une session peut
avoir trois tats : Draft (dfaut), Conrmed et Done. Ajoutez un champ (en lecture seule) an de visualiser
ltat et des boutons pour changer dtat dans la vue formulaire des Sessions. Les transitions valides sont :
Draft -> Conrmed
Conrmed -> Draft
Conrmed -> Done
Done -> Draft
Une commande gnrant une facture et un bon dexpdition est un exemple de workow utilis dans OpenERP.
Les workows peuvent tre associs nimporte quel objet dans OpenERP et sont entirement paramtrables. Les
workows sont utiliss pour structurer et grer les cycles de vies des objets mtiers ou des documents, et dnir
17
des transitions, des dclencheurs, etc. avec des outils graphiques. Les workows, les activits (noeuds ou actions)
et les transitions (conditions) sont dclars, comme dhabitude, dans des enregistrements XML. Les jetons qui
naviguent dans les workows sont nomms workitems.
Exercice 2 - diteur dynamique de workow
En utilisant lditeur de workow, crez le mme workow que celui dni prcdemment pour lobjet
Session. Transformez la vue formulaire des Sessions de telle sorte que les boutons changent ltat dans le
workow.
Note: Workow on create Un workow associ une session est cr pendant la cration de cette session.
Par consquent, il ny a pas dinstances du workow associes aux instances des sessions cres avant que lon
dnisse le workow.
Exercice 3 - Server actions
Crez des server actions et modiez le prcdent workow pour re-crer le mme comportement que
prcdemment, mais sans utiliser les mthodes Python de la classe Session.
Exercice 4 - Workows en XML
Installez le module base_module_record. Utilisez-le pour exporter le workow cr dans lditeur de work-
ow dans un chier XML que vous pouvez incorporer dans votre module.
9 Scurit
Les mcanismes de contrle daccs doivent tre combins pour atteindre une politique de scurit cohrente.
9.1 Mcanismes de contrle daccs bass sur les groupes
Les groupes sont crs comme des enregistrements normaux sur le modle res.groups et laccs aux menus via la
dnition de ces derniers. Cependant mme sans menu, les objets peuvent rester accessible indirectement, cest
pourquoi des vritables permissions par objet (create,read,write,unlink) doivent tre dnies pour les groupes.
Elles sont gnralement insres via des chiers CSV prsents dans les modules. Il est galement possible de
restreindre les accs certains champs ou objets en utilisant lattribut groups sur les champs.
ir.model.access.csv
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create",
"perm_unlink"
"access_idea_idea","idea.idea","model_idea_idea","base.group_user",1,1,1,0
"access_idea_vote","idea.vote","model_idea_vote","base.group_user",1,1,1,0
Exercice 1 - Ajouter des contrles daccs depuis linterface de OpenERP
Crez un nouvel utilisateur John Smith. Crez ensuite un groupe OpenAcademy / SessionRead avec les
accs en lecture sur les objets Session et Attendee.
18
Exercice 2 - Ajouter des contrles daccs depuis des chiers de donnes dans votre module
En utilisant un chier de donnes XML, crez un groupe OpenAcademy / Manager, sans y dnir de droits
daccs pour le moment (crez simplement un groupe vide).
Exercice 3 - Ajouter des contrles daccs depuis des chiers de donnes dans votre module
Utilisez un chier CSV pour ajouter les droits de lecture, criture, cration et suppression sur les objets
Course, Session et Attendees au groupe OpenAcademy / Manager. Vous pouvez aussi crer des droits
associs aucun groupe, comme un accs en lecture seule sur les objets Course et Session.
10 Assistants
10.1 Objets wizard (osv_memory)
Les assistants dcrivent des sessions interactives tats avec lutilisateur par le biais de formulaires dynamiques.
Les assistants utilisent la persistance en mmoire osv_memory pour permettre de construires des assistants depuis
des objets mtiers et des vues normales, sans les enregistrer dans la base de donnes. Les objets en mmoire sont
crs en hritant de la classe osv.osv_memory.
Exercice 1 - Dnir la classe de lassistant
Nous voulons crer un assistant qui permettra lutilisateur de crer des stagiaires pour une session partic-
ulire, ou pour une liste de sessions en une seule fois. Tout dabord, cet assistant fonctionnera uniquement
pour une session la fois. Pour faire cela, nous crons un objet assistant (hritant de osv.osv_memory)
avec une relation many2one sur lobjet Session et une relation one2many avec un nouvel objet Attendee
(en mmoire) avec un champ name et une relation many2one vers lobjet Partner. Dnissez la classe cre-
ate_attendee_wizard et implmentez sa structure.
10.2 Vues
Les assistants utilisent des vues normales et leurs boutons peuvent utiliser un attribut special=cancel an de
fermer la fentre de lassistant lorsquil est cliqu.
10.3 Excution dun assistant
De tels assistants sont lancs par le biais denregistrements action normaux, avec une cible spciale utilise pour
ouvrir lassistant dans une nouvelle fentre.
Exercice 2 - Rendre lassistant disponible depuis un lment du menu
Crez un lment de menu et laction ncessaire pour utiliser lassistant.
Exercice 3 - Personnaliser la vue formulaire
Personnalisez la vue formulaire pour afcher tous les champs de la classe.
19
Exercice 4 - Crer les mthodes
Crez la mthode action_add_attendee dans la classe create_attendee_wizard et ajouter un bouton dans la
vue formulaire pour lappeler. Ajoutez galement un bouton Annuler qui ferme la fentre de lassistant.
Exercice 6 - Lier lassistant la barre contextuelle
Liez lassistant la barre contextuelle du modle des sessions.
Exercice Supplmentaire - Assistant sur de multiples enregistrements
Rendez lassistant capable dajouter des stagiaires dans plusieurs sessions la fois.
11 Internationalisation
Chaque module peut fournir ses propres traductions dans le dossier i18n, en ayant des chiers nomms
LANGUE.po o LANGUE est le code de ce langage, ou une combinaison de la langue et le pays dans le
cas o ils diffrent (e.g. pt.po or pt_BR.po). Les traductions seront automatiquement charges par OpenERP
pour toutes les langues actives. Les dveloppeurs utiliseront toujours lAnglais en crant un module, puis ex-
porteront les termes du modules en utilisant la fonctionnalit dexport de POT gettext de OpenERP (Administra-
tion>Traductions>Exporter une traduction sans spcier de langue ) pour crer le chier template POT du module,
et ensuite en driver les chiers PO traduits. La plupart des environnements intgrs de dveloppement ont des
modes ou des plugins pour diter et merger les chiers PO/POT.
Tip: Le format GNU gettext (Portable Object) utilis par OpenERP est intgr LaunchPad, devenant ainsi une
plateforme collaborative de traduction.
|- idea/ # La racine du module
|- i18n/ # Fichiers de traduction
| - idea.pot # Fichier Template (export depuis OpenERP)
| - fr.po # Traduction Franaise
| - pt_BR.po # Traduction Portuguaise du Brsil
| (...)
Tip: Par dfaut, lexport POT dOpenERP extrait seulement les libells dans les chiers XML ou dans la dni-
tion des champs dans le code Python, mais nimporte quelle chane Python peut tre traduite de cette manire en
lencadrant par la mthode tools.translate._ method (e.g. _(Label) )
Exercice 1 - Traduire un module
Slectionnez une seconde langue pour votre installation dOpenERP. Traduisez votre module en utilisant les
fonctionnalits fournies par OpenERP.
12 Rapports
12.1 Rapports imprims
Les rapports dans OpenERP peuvent tre rendus de diffrentes manires :
20
Rapports personnaliss: ces rapports peuvent tre directement crs depuis linterface client, pas de pro-
grammation requise. Ces rapports sont reprsents par des objets mtiers (ir.report.custom)
Rapport personnaliss de haute qualit utilisant openreport: pas de programmation requise mais il faut
crire 2 petits chiers XML :
un template qui indique les donnes sur lesquelles portera le rapport
un chier XSL : feuille de style RML
Rapports cods en dur
Modles OpenOfce Writer
Il existe plusieurs moteurs de rendu de rapports dans OpenERP pour produire des rapports depuis diffrentes
sources et dans plusieurs formats.
Expressions utilises dans OpenERP dans les modles de rapport
Predened expressions :
objects contient la liste des enregistrements imprimer
data vient de lassistant lanant le rapport
user contient lutilisateur courant (comme un browse())
time donne accs au module Python time
repeatIn(list,var,tag) repte llment parent nomm tag pour chaque objet dans la liste, rendant lobjet
disponible en tant que variable dans chaque boucle
setTag(tag1,tag2) remplace la balise RML tag1 par tag2
removeParentNode(tag) supprime llment RML parent tag
formatLang(value, digits=2, date=False, date_time=False, grouping=True, monetary=False) peut tre util-
is pour formater une date, un temps ou un montant selon la locale
setLang(lang_code) xe la langue et la locale courante pour les traductions
Exercice 1 - Installer le plugin OpenOfce
Installez le module report designer et ajouter le plugin OpenERP dans OpenOfce.
Exercice 2 - Crer un nouveau rapport
Crez un rapport pour lobjet Session, afchant pour chaque session, son nom, sa date de dbut, sa dure, le
pourcentage de remplissage, le responsable ainsi que la liste des stagiaires.
21
Exercice 3 - RML
Exportez le rapport OpenOfce en un chier RML, ajoutez-le votre module et ajoutez une action lobjet
Session an dimprimer le rapport.
Exercice 4 - RML
Amliorez votre rapport. Empchez la ligne start date dapparatre dans le rapport si aucune valeur ne lui
est associe, et afcher le pourcentage de siges restants en rouge si celui-ci est infrieur 10.
12.2 Tableaux de bord
Exercice 5 - Dnir un tableau de bord
Dnissez un tableau de bord contenant la vue graphique que vous avez cre, le calendrier des sessions et
la liste des cours (commutable en vue formulaire). Ce tableau de bord doit tre disponible depuis un menu,
et automatiquement afch dans le client web quand le menu principal OpenAcademy est slectionn.
13 WebServices
Le module de web-service offre une interface commune pour tous les web-services :
SOAP
XML-RPC
NET-RPC
Les objets mtiers peuvent aussi tre accds depuis le mcanisme dobjets distribus. Il peuvent tous tre modis
par les interfaces clients avec les vues contextuelles.
OpenERP est accessible depuis des interfaces XML-RPC, pour lesquelles des librairies existent dans de nombreux
langages.
13.1 Exemple Python
import xmlrpclib
# ... define HOST, PORT, DB, USER, PASS
url = http://%s:%d/xmlrpc/common % (HOST,PORT)
sock = xmlrpclib.ServerProxy(url)
uid = sock.login(DB,USER,PASS)
print "Logged in as %s (uid:%d)" % (USER,uid)
# Create a new idea
url = http://%s:%d/xmlrpc/object % (HOST,PORT)
sock = xmlrpclib.ServerProxy(url)
args = {
name : Another idea,
description : This is another idea of mine,
inventor_id: uid,
}
idea_id = sock.execute(DB,uid,PASS,idea.idea,create,args)
22
Exercice 1 - Ajouter un nouveau service au client
crivez un programme Python capable denvoyer des requtes XML-RPC un PC ayant lanc OpenERP (le
votre ou celui de votre formateur). Ce programme doit permettre dafcher toutes les sessions existantes, le
nombre de siges correspondants et de crer une nouvelle session pour un des cours. Dans ce cas, demandez
au serveur de crer les objet Session.

Vous aimerez peut-être aussi