Académique Documents
Professionnel Documents
Culture Documents
Faculté des Sciences
Département d'informatique
1, Rue de Chartres
45067 Orléans cedex 2.
Rapport de Stage :
Développement sur l'ERP libre
OFBizNéogia
Responsable de Stage : Étudiant :
Peter GORON Mickaël HARDOUIN
Master 2 IRAD
3 bis, les Isles 37270 Véretz Année 2006
Remerciements
Mes remerciements vont à toute l'équipe de Néreide, en commençant par Olivier Heintz pour
sa disponibilité, ses explications, en particulier sur le plan fonctionnel, et sa patience à me les
transmettre.
Nicolas Malin, pour la générosité de son accueil à son domicile lors de ma semaine de
formation; Peter Goron pour m'avoir encadré tout au long de mon stage et pour tous ses conseils
techniques avisés; Sophie Benaroch pour la relecture de mes documentations fonctionnelles dans le
but de les rendre plus claires .
Je souhaite également remercier Jean Luc Malet et Pierre Gaudin, pour m'avoir également
transmis des explications sur le plan fonctionnel ainsi que la bonne humeur qu'ils apportent à
l'ambiance déjà très chaleureuse de l'équipe .
Je n'oublie pas ma collègue stagiaire; Cécile Bourreau pour l'aide qu'elle m'a apportée
notamment sur le module « Order » .
Pour mettre un trait d'honneur à ces remerciements, je voudrais remercier toute la famille
Heintz, pour sa gentillesse et l'accueil qu'ils ont pu m'accorder au sein de leur domicile tout au long
de ce stage; notamment durant les pauses déjeuners.
Table des matières
Remerciements.....................................................................................................................................3
Introduction..........................................................................................................................................6
Présentation de l'entreprise...................................................................................................................7
1. La société Néreide........................................................................................................................7
2. Le réseau LibreEntreprise...........................................................................................................8
Présentation de l'ERP OfbizNéogia......................................................................................................9
1. Généralités sur les ERP................................................................................................................9
1.1 Définition...............................................................................................................................9
1.2 Avantages...............................................................................................................................9
1.3 Inconvénients.......................................................................................................................10
1.4 Les ERP libres.....................................................................................................................10
2. Le projet Ofbiz...........................................................................................................................11
2.1 Architecture d'Ofbiz............................................................................................................12
2.2 Le framework......................................................................................................................13
2.2.1 L'EntityEngine.............................................................................................................13
2.2.2 Le Service Engine........................................................................................................14
2.2.3 Le Control Servlet........................................................................................................14
2.3 Les différents modules........................................................................................................16
2.3.1 Content.........................................................................................................................16
2.3.2 Accounting...................................................................................................................16
2.3.3 Party.............................................................................................................................16
2.3.4 Product.........................................................................................................................16
2.3.5 Facility.........................................................................................................................17
3. Le projet Néogia.........................................................................................................................18
Contexte de travail..............................................................................................................................19
1. Outils utilisés..............................................................................................................................19
2. Méthode de travail.....................................................................................................................20
Développement Réalisés.....................................................................................................................21
1. Gestion des erreurs.....................................................................................................................21
1.1 Présentation et Objectifs.....................................................................................................21
1.2 Analyse...............................................................................................................................22
1.3 Résultat...............................................................................................................................24
2. Liste de transferts.......................................................................................................................26
1.1 Présentation et Objectifs..........................................................................................................26
1.2 Analyse...............................................................................................................................27
1.3 Résultat...............................................................................................................................29
Conclusion..........................................................................................................................................32
Résumé...............................................................................................................................................33
Abstract...............................................................................................................................................33
Bibliographie......................................................................................................................................34
Index des illustrations
Illustration 1: Logo entreprise Néreide.................................................................................................7
Illustration 2: Logo du réseau LibreEntreprise...................................................................................8
Illustration 3: Logo ERP Ofbiz...........................................................................................................11
Illustration 4: Architecture ERP Ofbiz...............................................................................................12
Illustration 5: Boucle d'évènement.....................................................................................................15
Illustration 6: Logo Projet Néogia......................................................................................................18
Illustration 7: Exemple de déclenchement d'erreur.............................................................................21
Illustration 8: Résultat du diagramme UML après modification........................................................23
Illustration 9: Écran listant les erreurs enregistrer en base.................................................................24
Illustration 10: Écran d'édition des permission ( lecture / écriture ) sur les erreurs...........................25
Illustration 11: Écran d'ajout de transfert à une liste de transfert........................................................26
Illustration 12: Relation de l'entité TransfertList avant la création de l'entité TransfertListModel....27
Illustration 13: Relation après la création de TransfertListModel......................................................28
Illustration 14: Création du modèle de la liste de transfert.................................................................29
Illustration 15: Écran d'ajout de transfert à un modèle de liste de transfert .......................................29
Illustration 16: Création de la liste de transfert...................................................................................30
Illustration 17: Liste des transfert planifiés ne faisant pas partie d'une liste.......................................30
Introduction
On ne présente plus les logiciels libres, aujourd'hui reconnus pour leurs qualités et leur
ouverture. Ils ont démontré leur efficacité dans plusieurs domaines, notamment Internet, avec par
exemple, le serveur web Apache et le système d'exploitation Linux. Aussi, de nombreuses
entreprises et gouvernements ont commencé la migration de leurs systèmes d'information vers des
solutions libres. Par conséquence, on commence à trouver ces logiciels dans des secteurs
traditionnellement réservés aux logiciels propriétaires, en particulier, les PGI ou Progiciels de
Gestion Intégrés. Cependant, ce type d'application joue un rôle stratégique au sein des entreprises
qui les utilisent. Il requiert un très haut niveau de technicité et de compétences que ces dernières ne
sont pas prêtes à laisser aux mains de développeurs éparpillés aux quatre coins du monde. C'est
pourquoi, comme pour les logiciels propriétaires, est apparue la nécessité d'avoir des entreprises
prestataires de services spécialisées en logiciels libres.
Néréide est une de ces nouvelles SSLL (Société de Services en Logiciels Libres). Elle propose à ses
clients un PGI basé sur le logiciel libre Open For Business (Ofbiz) pour lequel elle peut développer
des besoins spécifiques pour chacun d'entre eux.
Voulant élargir mes connaissances dans le domaine fonctionnel et par la même occasion découvrir
le monde du travail dans les SSLL , mon choix s'est naturellement orienté vers cette jeune entreprise
qui m'a accueilli du début du mois d'avril jusqu'à fin septembre sous la responsabilité de Peter
Goron.
La première partie de mon travail a consisté en l'étude du fonctionnement de l'ERP OfbizNéogia.
Pour m'aider dans cette tâche, j'ai effectué une semaine de formation avec 3 autres stagiaires. Cette
formation m'a permis de connaître les bases du fonctionnement de l'application, notamment les
interconnexions entre les différents modules que compose l'ERP. Contrairement à certains de mes
collègues qui se sont spécialisés sur un module, mes développements ont été divers et variés. J'ai
commencé par travailler sur un module technique puis continuer sur des modules fonctionnels.
Présentation de l'entreprise
1. La société Néreide
Illustration 1: Logo entreprise
Néreide
Néréide est une jeune société de services en logiciels libres (SSLL) spécialisée dans
l'intégration de l'ERP Open Source OfbizNéogia. Créée en mars 2004 sous la forme d'une SARL à
capital variable, elle est située à 10 km à l'Est de Tours. Outre l'intégration d' OfbizNéogia, elle
propose à ses clients toute une gamme de services centrés autour de l'ERP : développements
spécifiques, administration système, infogérance, maintenance et support applicatif. Étant membre
du réseau LibreEntreprise, cette offre peut être étendue selon les services que proposent les
membres de ce réseau (cf. section suivante).
L'équipe de Néreide se compose de :
• Olivier Heintz, Directeur de projet;
• JeanLuc Malet, Directeur de projet;
• Yannick Thebault, Architecte.
• Pierre Gaudin, Développeur;
• Sophie Benaroch, Chargée d'affaires;
• Catherine Heintz, Responsable communication – administration
• Peter Goron, Développeur; ( mon maître de stage )
Également présent en tant que stagiaire durant ma période de stage :
• Cécile Bourreau, Master de l'université de Poitiers DESSTAUP
• Cédric Vallée, 2ème année à Polytech’ Tours, département informatique;
• Simon Baudry, 2ème année à Polytech’ Tours, département informatique;
2. Le réseau LibreEntreprise
Illustration 2: Logo du réseau
LibreEntreprise
Le réseau LibreEntreprise regroupe des entreprises ayant des spécialités proches ou
complémentaires, en particulier dans le domaine du logiciel libre.
L'organisation en réseau permet à tous les membres de bénéficier d'une offre commerciale étendue
homogène et de disposer d'un ensemble de ressources spécialisées dans chaque domaine
d'intervention grâce aux partages des connaissances. En outre, un ensemble d'outils de travail
collaboratif est mis à la disposition des membres du réseau pour simplifier la communication au
sein du réseau et pour les aider dans leurs démarches :
• documentations partagées :
• documents sur la création d'entreprise,
• documents techniques,
• modèles de documents;
• calendrier partagé;
• listes de diffusion partagées;
• serveur de messagerie instantanée (Jabber);
• le laboratoire LibreEntreprise : une plateforme d'hébergement de projets informatiques tel
que le célèbre SourceForge. Elle offre les mêmes services, à savoir, site web, espace ftp,
accès cvs, mailinglists, etc.
• Planet LibreEntreprise : c'est un agrégateur de contenu qui permet de suivre l'activité des
membres du réseau.
Pour faire partie du réseau, les sociétés doivent envoyer un compterendu mensuel d'activité
sur la liste de diffusion "réseau" afin que tous les membres puissent connaître l'évolution de chaque
entreprise. La forme exacte de ce rapport n'est pas définie mais certaines informations sont
nécessaires, comme une rapide présentation de l'entreprise, l'effectif, les finances, les affaires en
cours et les affaires probables.
Présentation de l'ERP OfbizNéogia
1. Généralités sur les ERP
1.1 Définition
Un PGI progiciel de gestion intégré (en anglais Enterprise Resource Planning ou ERP) est
un: « logiciel qui permet de gérer l'ensemble des processus d'une entreprise en intégrant l'ensemble
des fonctions de cette dernière comme la gestion des ressources humaines, la gestion comptable et
financière, l'aide à la décision, mais aussi la vente, la distribution, l'approvisionnement, le
commerce électronique »(Définition du grand dictionnaire terminologique de l'Office québécois de
la langue française (OLF))
Le principe fondateur d'un ERP est de construire une application (paie, comptabilité, gestion
de stocks…) de manière modulaire tout en partageant une base de données unifiée. Ainsi, les
Achats, la Comptabilité, la Gestion des Stocks, les Ressources Humaines, la Gestion Commerciale,
etc sont maintenant totalement interconnectés. Avec l'arrivée de l'ERP, les données sont désormais
standardisées et partagées entre les différents modules, ce qui élimine les saisies multiples et évite
l'ambiguïté des données multiples de même nature.
Ceci permet un accroissement considérable de la fiabilité des informations puisque la source des
données est unique, d'où une réduction des délais et des coûts de traitements.
L'autre principe qui caractérise un ERP est l'usage systématique de ce qu'on appelle un moteur de
workflow, et qui permet, lorsqu'une donnée est entrée dans le système d'information, de la propager
dans tous les modules du système qui en ont besoin, selon une programmation prédéfinie.
Ainsi, on peut parler d'ERP lorsqu'on est en présence d'un système d'information composé de
plusieurs applications partageant une seule et même base de données, par le biais d'un système
automatisé prédéfini éventuellement paramétrable (un moteur de workflow).
1.2 Avantages
Comparés à des applications sur mesure, les ERP / PGI présentent plusieurs avantages :
optimisation des processus de gestion (flux économiques et financiers)
cohérence et homogénéité des informations
intégrité et unicité du système d'information
partage du même système d’information facilitant la communication interne et externe
minimisation des coûts: pas d’interface entre les modules, synchronisation des traitements,
maintenance corrective simplifiée car assurée directement par l'éditeur et non plus par le
service informatique de l'entreprise
globalisation de la formation (même logique, même ergonomie)
maîtrise des coûts et des délais de mise en œuvre et de déploiement
Il est important de remarquer que la mise en place d'un ERP dans une entreprise est souvent
le déclencheur d'une réorganisation et rationalisation de l'ensemble des tâches et processus de
l'entreprise.
1.3 Inconvénients
Les ERP / PGI ne sont cependant pas exempts d'inconvénients :
coût élevé
périmètre fonctionnel souvent plus large que les besoins de l'organisation ou de l'entreprise
lourdeur et rigidité de mise en œuvre
difficultés d'appropriation par le personnel de l'entreprise
nécessité d'une bonne connaissance des processus de l'entreprise
nécessité d'adapter parfois certains processus de l'organisation ou de l'entreprise au
progiciel ;
nécessité d'une maintenance continue.
1.4 Les ERP libres
Le secteur des ERP a subi depuis quelques années un petit bouleversement : l'arrivée de
logiciels libres (OFBiz Tiny ERP, ERP5, Compiere, ...) sur des terres où règnent en maîtres les
logiciels propriétaires : SAP, BAAN, Oracle, ...
Le premier avantage des ERP Libre sur leurs alterego propriétaires est bien sûr l'absence de coût de
licence ; coût qui peut souvent apparaître comme prohibitif pour les PME. Un autre atout important
est la possibilité d'adapter et de faire évoluer soimême le progiciel sans dépendre du bon vouloir de
la société éditrice. En outre, le logiciel libre mobilise souvent des communautés, qui le font évoluer
au gré des nouveaux besoins, et qui peuvent répondre rapidement à des demandes précises. De plus
comme tout logiciel libre, les ERP libre donne la garantie de travailler sur des standards ouverts et
donc interopérables, avantages stratégiques pour beaucoup d'entreprises. En parallèle avec
l'augmentation de l'utilisation des ERP en France :48 % des PME françaises sont équipées, et en
janvier 2005, 9 % des PME françaises envisageaient d'acquérir et de mettre en place un nouvel ERP
dans l'année (Atelier groupe BNP Paribas), l'intérêt porté par les entreprises sur le logiciel libre
progresse. Ainsi, 58 % des entreprises envisageraient de passer de leur ERP propriétaire actuel à un
ERP libre en 2004 (ERP2004 INFOWORLD). La présence du logiciel libre sur le marché des ERP
n'est donc plus marginal et les ERP Open Source prennent leurs places dans ce secteur.
2. Le projet Ofbiz
Illustration 3: Logo ERP Ofbiz
Open For Business, ou Ofbiz, est un projet de progiciel de gestion intégré (PGI) libre initié
par deux développeurs américains, Andy Zeneski et David E. Jones, en mai 2001. L'objectif de ce
projet est de fournir un ensemble de composants homogènes permettant de développer aisément et
rapidement des logiciels libres de gestion.
À terme, il est prévu d'obtenir tous les composants nécessaires à un PGI intégrant les modules de
gestion suivants :
SCM (Supply Chain Management), ou en français GCL, (Gestion de la Chaîne
Logistique)
CRM (Customer Relationship Management), ou GRC (Gestion de la Relation Client)
MRP (Manufacturing Resource Planning), ou GPP (Gestion et Planification de la
Production)
CMS (Content Management System), ou SGC (Système de Gestion de Contenu)
CMMS (Computerized Maintenance Management System), ou GMAO (Gestion de la
Maintenance Assistée par Prdinateur )
Ofbiz se base sur de nombreux logiciels libres tels que Ant, Tomcat , JPublish, FreeMarker,
etc. Ces logiciels sont reconnus pour leur qualité et ils assurent l'indépendance du projet. De même,
pour garantir un maximum de compatibilité avec les systèmes existants et futurs, Ofbiz respecte de
nombreux standards, notamment J2EE et XML. Ce dernier possède une part très importante dans le
projet Ofbiz notamment pour décrire les données et les traitements. Un des avantages d'Ofbiz réside
dans sa parfaite compatibilité avec tous les serveurs d'applications J2EE et toutes les bases de
données du marché. Par ailleurs, le code source du projet est publié sous la licence MIT qui est libre
et permissive, c'estàdire qu'elle ne fixe aucune obligation et/ou interdiction quant à l'utilisation, la
modification, l'extension et la commercialisation du logiciel. Grâce à l'ouverture du code, une
véritable communauté d'utilisateurs et de développeurs s'est formée. Cette dernière assure ainsi la
réactivité et la qualité du projet mais également la pérennité du projet. Cependant, de par sa taille et
sa complexité, ce type de logiciel nécessite de gros investissements humains, matériels et financiers
pour son développement mais aussi pour être reconnu. Les auteurs initiaux ont donc créé une
société, Undersun Consulting, qui offre des services autour d'Ofbiz tout en les rémunérant pour leur
travail de développement. Plusieurs sociétés du même type se sont créées un peu partout dans le
monde, dont Néréide pour la France. Elles participent ainsi au projet en tant que sponsors.
2.1 Architecture d'Ofbiz
Ofbiz est une application java clientserveur compatible avec la spécification J2EE qui
définit une architecture logicielle standard. On retrouve ainsi les trois éléments caractéristiques
d'une architecture 3tiers :
• les clients légers : machines disposant d'un navigateur internet;
• un serveur exécutant les différentes applications Ofbiz;
• et une ou plusieurs bases de données stockant le système d'information de l'entreprise.
Cependant Ofbiz à la possibilité de faire appel à des applications externes via des services locaux ou
distants ( WebServices ). On peut donc considérer Ofbiz comme une architecture ntiers.
Illustration 4: Architecture ERP Ofbiz
Le fonctionnement du framework d'Ofbiz repose sur 3 composants majeurs : l'EntityEngine,
le ServiceEngine, le ControlServlet.
2.2.1 L'EntityEngine
L'Entity Engine est un composant Ofbiz qui se charge de la gestion des données de tous les
autres composants Ofbiz. L'Entity Engine possède de nombreux points forts :
• gestion automatique de la persistance de données;
• accès aux données via une interface unique, le « GenericDelegator »;
• supporte l'accès transparent à plusieurs base de données;
• les entités sont définies dans de simples fichiers XML;
• tous les types java de base ont un équivalent en base de données;
Voici un exemple de définition d'une entité :
<entity entityname="RoleType"
packagename="org.ofbiz.party.party"
defaultresourcename="PartyEntityLabels"
title="Role Type Entity">
<field name="roleTypeId" type="idne"></field>
<field name="parentTypeId" type="id"></field>
<field name="hasTable" type="indicator"></field>
<field name="description" type="description"></field>
<primkey field="roleTypeId"/>
<relation type="one" fkname="ROLE_TYPE_PAR" title="Parent" relentityname="RoleType">
<keymap fieldname="parentTypeId" relfieldname="roleTypeId"/>
</relation>
<! Begin neogia specific : value factory >
<valuefactory classname="org.ofbiz.party.party.developed.RoleTypeServices" />
<! End neogia specific : value factory >
</entity>
Le Service Engine se charge des traitements des composants Ofbiz. Ces traitements sont
appelés Services et peuvent être exécutés localement ou à distance. L'avantage du Service Engine se
situe dans la non nécessité de connaître l'emplacement ou l'implémentation des services pour
pouvoir les lancer. C'est le ServiceDispatcher qui se charge alors de trouver l'implémentation du
service et de son exécution. Un autre intérêt est la possibilité de rendre disponible tout service Ofbiz
vers l'extérieur.
Chaque service doit comporter les éléments suivants :
– un nom
– une implémentation ( ici java )
– sa localisation
– la méthode à invoquer
– la nécessité ou non d'être authentifié pour pouvoir l'appeler
– les paramètres d'entrée ( attribut en mode IN )
– les paramètres de sortie si existant ( mode OUT )
Lors de l'appel à un service, une vérification automatique des paramètres d'entrée est effectuée pour
contrôler que tous les paramètres obligatoires sont bien renseignés, et qu'ils sont du type attendu.
2.2.3 Le Control Servlet
Le ControlServlet est l'élément clé de la communication entre les utilisateurs et les
applications web d'Ofbiz. Implémenté selon le modèle MVC (ModèleVueControleur), il gère la
boucle d'événements de l'interface graphique et les différents moteurs de rendu de l'application. Les
réponses aux interactions de l'utilisateur s'effectuent par l'intermédiaire d'événements qui peuvent
être implémentés sous la forme de services, de méthodes java, de scripts Beanshell ou Minilang.
Illustration 5: Boucle d'évènement
Voici l'ensemble des opérations effectuées suite à une interaction avec l'utilisateur pour lui afficher
une page à l'aide de JPusblish et FreeMarker :
1. L'utilisateur clique sur un lien hypertexte ou valide un formulaire. Le navigateur envoie alors une
requête HTTP au serveur Ofbiz qui est interceptée par Tomcat et transmise au ControlServlet de
l'application web correspondante.
2. Le ControlServlet vérifie si l'URI demandée est définie par l'application. Le cas échéant, il
appelle le ou les événements associés à cette URI. Dans le cas contraire, il renvoie une erreur au
navigateur web de l'utilisateur (Erreur HTTP 404 : page non trouvée).
3. Si l'événement généré doit appeler un service, il vérifie que les paramètres de la requête
correspondent aux attributs du service.
4. Si l'événement généré doit appeler un service, il convertit les paramètres de la requête sous forme
textuelle en objets Java correspondant.
5. L'événement appelle un service ou un gestionnaire d'événements (méthode java statique).
6. Le service ou le gestionnaire d'événements peuvent effectuer des actions sur le modèle de
données.
7. L'EntityEngine convertit ces actions en requêtes SQL pour le serveur de base de données.
8. Le service ou le gestionnaire d'événement renvoie le résultat de leur action.
9. L'événement transmet ce résultat au ControlServlet.
10. À partir du résultat de l'événement, le ControlServlet sélectionne la vue à afficher et appelle le
moteur de rendu adéquat.
11. À partir de la définition d'une vue, le moteur de rendu construit les différents souséléments de
cette dernière.
12. Pour chaque sousélément, il peut appeler des scripts BeanShell qui récupèrent et mettent en
forme les données à afficher.
13. Pour chaque sousélément, il appelle le moteur de template qui se charge de générer le code
HTML correspondant.
14. Le moteur de rendu assemble les différents souséléments pour former une page web complète.
15. Le ControlServlet transmet la page générée au navigateur web de l'utilisateur.
2.3 Les différents modules
2.3.1 Content
Le module Content assure la gestion de contenu (CMS). Ses entités sont utilisées pour enregistrer et
manipuler les contenus généraux et les bases de connaissance. Ces entités incluent de nombreux
concepts tels que : la séparation de l’information et de l’organisation des données qui peuvent être
utilisés dans beaucoup de structures de données comme des arbres, listes ou des Maps d’objets. Une
fois ces structures créées, des outils évolués de recherche d’information sont utilisés pour
automatiser la création de nouvelles structures et permettre à l’entreprise de gérer les documents.
2.3.2 Accounting
Les entités de Comptabilité sont organisées sur des principes généralement admis comme la
comptabilité à double entrée, un registre général avec des comptes hiérarchisés... Elles sont
structurées pour que l'on puisse gérer la comptabilité de plusieurs organisations.
2.3.3 Party
Le module Party permet d'assurer la gestion de la relation client (CRM). Un Party peut représenter
soit une personne physique soit un groupe (un groupe pouvant être une entreprise, un fournisseur ou
un ensemble de personnes). La notion de groupe permet de modéliser des hiérarchies, des groupes
de sécurité. Cette application est généralement utilisée pour gérer les informations sur le personnel
de l’entreprise, sur les relations avec ses clients et ses fournisseurs, etc. À chaque contact, on peut
associer de nombreuses informations telles que des adresses, des numéros de téléphones, des rôles,
et par un mécanisme d'extensions, des données supplémentaires.
2.3.4 Product
Les entités de Product contiennent les informations générales sur les produits vendables, achetables
d'une entreprise. Les produits peuvent être des articles (matières premières, produits finis ...), des
services, ... Les produits peuvent être organisés en catégories et en catalogue (notion de
promotions, canaux de ventes...). Ils peuvent être associés à une multitude de prix selon la devise, le
fournisseur, les dates, la quantité achetée, etc.
2.3.5 Facility
Un « Facility » est un bâtiment ou un emplacement physique tel que les stocks, les magasins, les
docks, les bureaux,... En général un « Facility » aura un contact associé : une adresse, un numéro de
téléphone, ... Les bâtiments peuvent être regroupés en groupe de bâtiments, euxmêmes pouvant
faire partie de groupes de bâtiments. Ces groupes sont, par exemple, des chaînes de magasins,
régions, départements. Des personnes ou groupes de personnes peuvent aussi être associés à des
bâtiments pour définir où une personne travaille, qui gère le bâtiment, etc. Ce module permet de
gérer les stocks d'une entreprise, il connaît ainsi pour un produit ses lieux de stockages, les quantités
stockées et les indices de gestion de stock : seuils
d'alerte, quantité économique...
3. Le projet Néogia
Illustration 6: Logo Projet Néogia
L'objectif du projet Néogia est d'être une surcouche objet de l'ERP Ofbiz pour appliquer un
développement objet et s'affranchir de la structure de la base de données , de disposer de
composants fonctionnels basés sur une modélisation UML et à partir de ces modèles UML de
générer automatiquement le plus de code possible. Les outils de génération de code utilisés par le
projet Néogia se basent sur une technologie mise au point par CodeLutin, une société de services
en logiciels libres nantaise, membre du réseau LibreEntreprise et spécialisée dans le
développement applicatif en Java. Cette technologie, appelée LutinGenerators, permet à partir d'une
modélisation UML stockée dans un fichier XMI de générer n'importe quel type de fichier dès
l'instant qu'un générateur correspondant existe. L'utilisation de cette technologie est le fruit d'une
collaboration entre Néréide et CodeLutin dans le cadre d'un transfert de compétences au sein du
réseau LibreEntreprise. Cette génération de code est extrêmement utile car il permet de gagner un
temps précieux en développement; en effet on estime à environ 70 % de fichier généré.
Les fichiers générés sont les :
fichiers de définition des services ;
fichiers de définition des entités ;
fichiers Java permettant l'abstraction Objet<>Entité ;
fichiers d’interfaces graphiques par défaut pour les objets modélisés ;
fichiers de formulaires de recherche ;
fichiers d'internationalisation.
Contexte de travail
1. Outils utilisés
OfbizNéogia étant un vaste projet en logiciel libre utilisant plusieurs technologies, les outils
utilisés sont nombreux et variés et ceuxci se veulent libres également .
On retrouve les programmes suivants :
– Eclipse WTP
– Ant
– Apache
– iReport ( générateur de fichier Pdf )
– OpenJms ( implémentation open source de Sun Microsystems's Java Message Service )
– BeanShell ( éditeur de fichier bsh )
– FreeMarker ( éditeur de fichier ftl )
– Firefox ( avec le plugins Seleniumide , Xpath checker et Web developer )
– Poséidon
Eclipse n'est plus à présenter, il s'agit d'un formidable outil de développement qui intègre
notamment CVS. En revanche, on connaît moins Eclipse WTP ( Work Tool Project ) qui est une
extension d'Eclipse contenant des éditeurs intégrés pour HTML, Javascript, CSS, JSP, SQL, XML,
DTD, XSD et WSDL. Eclipse a été utilisé conjointement avec Ant ( utilitaire de compilation pour
Java ). Étant donné qu'un utilisateur de OfbizNéogia n'a besoin que d'un navigateur internet pour
tester le logiciel, Firefox a été d'une grande utilité pour pouvoir effectuer des tests. Il permet de
disposer de plusieurs plugins indispensable pour des développeurs web: Web developper afin
d'afficher toutes les caractéristiques d'un formulaire ( son nom , la(les) requêtes à effectuer lors des
actions sur le(s) boutons, les champs avec leur valeurs et leur clef y compris les champs cachés).
Tout ceci a permis d'accélérer les phases de debuggage; Xpath checker quant à lui, il nous donne les
identifiants des places des composants des différents formulaires; utilisé conjointement avec
Séléniumide pour enregistrer des scénarios de déroulement. Par exemple des scénarios de
commande d'achat , ou des ordres de fabrication. Seul Poséidon n'est pas un logiciel libre et fait pâle
figure dans cette liste. Il n'a malheureusement pas pu, pour le moment, être remplacé. Il est utilisé
pour la modélisation UML de toutes les entités de l'ERP. Combiné à LutinGenerators il permet de
générer 70% du code du projet.
2. Méthode de travail
Afin que la communauté participant au développement du projet OfbizNéogia puisse suivre
l'évolution de chacun, que les mainteneurs puissent intégrer le travail des différentes contributeurs;
plusieurs outils sont indispensables : CVS, SourceForge qui héberge OfbizNéogia pour sa gestion
des trackers, ainsi que les mailinglist qui permettent de suivre toutes les modifications par mail
(mail présentant les différences entre deux versions d'un même fichier). Afin de préserver la
stabilité du projet, on utilise la notion de « Branche ». Le projet OfbizNéogia se trouve sur la
branche principale appelée Head. C'est sur celleci que se grefferons les développements. Lors du
début d'un nouveau développement, chaque développeur crée une nouvelle branche, créée à partir
d'un identifiant de tracker obtenu sur le site SourceForge; cette identifiant va permettre de retrouver
le but du développement, la personne affectée à ce développement, son statut et d'autres
informations. Cette nouvelle branche va alors être indépendante du projet principale et ne perturbera
pas ce dernier . Une fois toutes les modifications apportées à cette branche, et les test Selenium
validés, le développeur change alors le statut du tracker en TBT, cela signifie que ces nouvelles
modifications devront être testées par un des mainteneurs du projet pour être validées et intégrées au
projet global. Une fois validées, une documentation fonctionnelle et / ou technique est écrite sur le
Wiki du projet améliorant la compréhension des utilisateurs finaux ou obtenir des informations
techniques pour de futures modifications ou utilisations et ainsi assurer un meilleur suivi.
Afin de participer au développement du projet OfbizNéogia on peut distinguer 3 types de
développements : les évolutifs ( ajout de nouvelles fonctionnalités), les correctifs ( résolution de
bugs ), les spécifiques ( réponse au besoins des clients ). J’ai eu à réaliser de nombreuses tâches sur
l’ERP, il n’est pas possible de toutes les présenter dans la limite des pages qui m'est imparti. J’ai
donc choisi d’expliquer les deux principales. Un développement évolutif : La gestion des erreurs, un
spécifique : les modèles de liste de transferts ( qui passa dans le projet principal étant donné l'atout
majeur qu'apporta ce développement ) .
Développement Réalisés
1. Gestion des erreurs
1.1 Présentation et Objectifs
Dans tout logiciel qui se respecte, il existe une gestion des erreurs. Dans OfbizNéogia cette
gestion d'erreur est existante. Chaque erreur possède un statut qui est plus ou moins à tenir en
compte; certaines ne sont qu'à titre d'information et d'autre sont incontournables. Ces dernières
déclenchent alors des rollback ( annulation de modification ) dans les bases. On peut distinguer
deux types d'erreurs : les erreurs fonctionnelles ( le plus souvent déclenchées par des erreurs
humaines, par exemple une valeur manquante dans un formulaire) et les erreurs techniques ( Null
pointer exception , GenericEntitityException ). Ces dernières sont dues à des erreurs de
programmations ou à un manque de sécurité. Si une telle erreur se produit c'est qu'une correction
d'un code est à revoir, ce ne seront donc pas normalement des erreurs récurrentes. En revanche les
erreurs fonctionnelles sont bien plus nombreuses, « l'erreur est humaine » et c'est ce type d'erreur
qui devra être visible directement par l'utilisateur. Cellesci sont visibles par l'utilisateur grâce des
messages d'alerte qui s'affichent en rouge.
Illustration 7: Exemple de déclenchement d'erreur
Malgré la visibilité de ces erreurs, il peut arriver que l'utilisateur n'en tienne rigueur ou qu'il ne s'en
rende compte. Pour cette raison, l'idée d'enregistrer ces alertes et erreurs en bases est apparue. De
cette manière, l'administrateur peut accéder à l'ensemble des erreurs qui a été engendrées. Ce
mécanisme était présent lors du commencement de mon travail, néanmoins il n'était pas utilisé car il
n'existait aucun écran fonctionnel permettant d'y accéder. Mon travail fut donc d'en créer un
générique dans un premier temps, de façon à ce qu'il puisse être utilisé à n'importe quel endroit de
l'application. Dans un second temps, il m'a été demandé d'améliorer la sécurité de cet écran afin de
limiter l'accès seulement à des utilisateurs ayant certaines permissions .
1.2 Analyse
Cette tache fut la première que j'ai eu à développer pour le compte de l'ERP OfbizNéogia, ce
fut donc une réelle confrontation avec le fonctionnement complet. En effet, dès ma première
approche j'ai dû analyser deux composants bien distincts : Party et Common . Cependant, malgré de
grosse différences, un grand nombre d'éléments du composant party dépend du composant
Common. Par exemple la notion des décorateurs de Party hérite des décorateurs de Common. J'ai
mis un bon moment avant de pouvoir appréhender ces processus, car les allerretours entre les deux
composants sont très nombreux et difficile à suivre pour une première approche. Néanmoins grâce à
cette difficulté j'ai réussi à mieux percevoir la boucle des évènements de l'utilisation de l'ERP par la
suite, car pour cette tâche j'ai du réaliser la plupart de ces évènements. Lors du commencement de
cette tâche j'ai dû analyser l'existant.
Il s'avéra alors que certaines entités était déjà présentes :
ApplicationLog
ApplicationLogCode
ApplicationLogLevel
ApplicationLogStatus
Ainsi ApplicationLog correspond à l'erreur. Chaque erreur contient un identifiant, un code d'erreur (
relié à ApplicationLogCode), un niveau d'erreur ( relié à ApplicationLogLevel ), un statut de
lecture ( relié à ApplicationLogStatus ) . Une fois avoir étudié les fichiers java correspondants à ces
différentes entités, j'ai donc commencé par créer l'écran générique permettant de visualiser ces
erreurs; ce qui constituait la première partie de cette tâche. Dans un second temps, j'ai eu à créer un
procédé permettant de limiter l'affichage de ces erreurs. Auparavant, tout utilisateur avait la
possibilité de visionner toutes les erreurs générées. Il est désormais obligatoire de posséder certains
droits, il a donc fallu modifier le diagramme UML de façon à avoir une relation entre les acteurs
( en l'occurence la personne connectée ) et les erreurs générées.
De cette nouvelle contrainte est apparues de nouvelles entités nécessaires à l'application de cette
modification:
ApplicationLogPerm ( Type de droit : lecture et modification )
PartyAppLogPerm ( Class d'association entre Party ( les acteurs ) , ApplicationLogCode ,
ApplicationLogPerm )
Grâce à cette modification, pour pouvoir voir les erreurs ayant pour code X , il faut avoir une entrée
dans la table PartyAppLogPerm correspondant à l'identifiant de l'utilisateur , le code X et le droit le
lecture ; sans une telle entrée, aucune erreur ayant pour code X ne sera visible .
Ce procédé représenta une réelle avancé pour la gestion des erreurs. Pourtant, il ne fût pas suffisant.
Il est vrai qu'un très grand nombre d'erreurs peut être généré ce qui aurait pour conséquence
d'agrandir au fur et à mesure la taille de l'écran à afficher. Pour cette raison, la modification suivante
fût de n'afficher que les erreurs non lues. A ce stade, la gestion des erreurs au niveau technique était
complète, mais au niveau fonctionnel il manquait encore un détail. Les erreurs ne sont que la
conséquence de procédés ayant mal fonctionnés, or c'est justement ce que l'on souhaite éviter à
l'avenir. Malheureusement à ce moment rien ne permettait de savoir quel était le procédé qui était en
cause. Il a donc fallu revoir la modélisation pour pouvoir corriger ce problème. C'est ainsi qu'un
attribut (runId, un identifiant généré lors de lancement d'un processus ) et plusieurs relations
supplémentaires furent introduits pour pouvoir tracer à la source le problème; donnant lieu au
nouveau diagramme UML ci dessous :
Illustration 8: Résultat du diagramme UML après modification
1.3 Résultat
L'écran de visualisation des erreurs étant générique, il n'existe pas de visualisation de celui
ci. En revanche un écran implémentant une partie de ces possibilités est accessible et pleinement
opérationnel depuis le menu des acteurs, comme on peut le voir sur l'illustration 9. Lors de l'appel à
l'écran générique on peut lui passer deux paramètres optionnels ( runId et partyId) qui vont
permettre de faire du tri respectivement sur le processus à afficher, et sur les permissions du partyId
( l'acteur ) ; on peut bien sûr combiner les deux.
Illustration 9: Écran listant les erreurs enregistrer en base
Malgré les documentations créées pour l'utilisation de cette fonctionnalité, elle n'est utilisée qu'à
deux endroits différents d'après ce que j'ai pu constater .
Illustration 10: Écran d'édition des permissions ( lecture / écriture ) sur les erreurs
2. Liste de transferts
1.1 Présentation et Objectifs
Dans une grande société ou dans un groupe possédant des stocks importants de produits et
différents lieux de stockage, il est régulier de devoir faire des transferts de produits d'une zone à une
autre; et afin de procéder aux transfert et d'améliorer la traçabilité des produits et ainsi éviter qu'il ne
se perde dans la nature ; des feuilles de suivis comportant des listes de transferts sont imprimées .
Le mécanisme de création de liste de transferts était déjà existant , cependant la création d'une telle
liste de transfert pouvait être longue et fastidieuse. En effet pour chaque transfert d'objet, l'utilisateur
était obligé de le rajouter manuellement à la liste via cet écran :
Illustration 11: Écran d'ajout de transfert à une liste de transfert
Sur cet écran on peut remarquer que pour chaque objet que l'on veut transférer on doit remplir au
moins 4 informations: la zone de provenance, la zone de destination, le produit, ainsi que la quantité
désirée. Pour de courtes listes de transferts, le temps à créer ces listes est relativement rapide, mais
dès que cette liste dépasse une centaine d'objets, ce processus devient très rébarbatif. Or il est
régulier que des listes de transfert soient très similaires dans le temps. A partir de cette constatation
et afin d'améliorer le temps de création de ces listes; on m'a chargé de créer des modèles de liste de
transferts, grâce à ces modèles la création de longue liste de transfert ne se ferait plus qu'en quelques
instants (sous condition d'avoir créer le modèle au préalable).
1.2 Analyse
Comme pour le procédé de gestion des erreurs, j'ai dû reprendre les modélisations et
développement déjà préexistant afin de les analyser. Mais contrairement à la gestion des erreurs qui
n'était pas utilisé, la création de liste de transfert était déjà utilisé par plusieurs clients de l'ERP. Je
ne pouvais donc pas me permettre de modifier les processus déjà livrés, qui auraient entraîné une
perte de temps et donc d'argent pour ses sociétés.
Illustration 12: Relation de l'entité TransfertList avant la création de l'entité TransfertListModel
Dans le modèle UML on distingue clairement l'emplacement de TransfertList, il s'agit d'une liste
contenant des StockItem (les produits à transférer ). J'ai eu à reproduire un mécanisme similaire lors
de la création de mes modèles de listes de transfert ( TransfertListModel ). Ces derniers contenants
des TransfertUnitModel (identifiant de produit correspondant aux StockItem + quantité ). J'ai
également introduit des mécanismes afin de choisir des emplacements sources et destination par
défaut au cas ou l'utilisateur aurait oublier de les renseigner.
Illustration 13: Relation après la création de TransfertListModel
Le processus d'amélioration à la création de liste de transfert est pleinement opérationnel et à
été déployé chez le client demandeur. Pour l'utilisateur le procédé est très simple il lui suffit de
renseigner les trois champs ( illustration 14). Le champ description correspond à une phrase qui lui
permettra de reconnaître plus facilement le modèle par la suite ( voir illustration 16 )
Illustration 14: Création du modèle de la liste de transfert
Une fois le modèle de transfert crée il ne reste plus qu'à l'éditer ( Illustration 15 ) de façon à rajouter
tous les transferts que l'on aura besoin. Sur la partie gauche de l'écran on dispose des données que
l'on à renseigner lors de l'illustration 14.
Illustration 15: Écran d'ajout de transfert à un modèle de liste de transfert
Sur la partie droite, un écran nous invite à renseigner les données nécessaires à la création d'un
nouveau transfert. Enfin la partie inférieure liste les transferts déjà présents. Une fois que l'on
dispose d'un modèle on peut passer à la création de la liste de transfert (Illustration 16).
Illustration 16: Création de la liste de transfert
Sur cet écran on dispose de deux possibilités : laisser l'identifiant du modèle de liste de transfert
vide, dans ce cas on utilise le processus standard; ou sélectionner un modèle. Ce choix rend les
autres champs obligatoires ou non. Nous allons nous concentrer sur la deuxième possibilité. A partir
de cet instant seule la date de réalisation est nécessaire; les magasins de destinations et d'origine s'il
ne sont pas remplis le seront par ceux par défaut du modèle de liste de transferts. A partir du
moment où l'utilisateur cliquera sur « Ajouter » le processus créera la liste de transfert avec tout les
transferts contenu dans le modèle.
Illustration 17: Liste des transfert planifiés ne faisant pas partie d'une liste
Une fois validée cette liste créera automatiquement des transferts planifiés ayant un identifiant de
liste indiquée dans la case « Préparation » de l'illustration 17.
Pour créer une liste de transferts avec la deuxième nouvelle façon ( à partir des transferts planifiés ) ,
il suffit de sélectionner ceux désirés comme sur l'illustration 17 et de cliquer sur le bouton « Créer ».
Une nouvelle liste de transferts sera alors produite et nous redirigera alors sur son écran d'édition.
Bien que les manipulations utilisateurs se soient considérablement amoindris, il reste encore des
lacunes pour la création de liste de transferts. Il n'est pas possible de créer des listes de transferts à
partir de transferts planifiés appartenant déjà à des listes; or la plupart du temps les transferts de
marchandise ne se font pas à l'unité, le coût de transports étant beaucoup trop grand. Par conséquent
on risque de se retrouver dans le cas où aucun transferts planifiés ne sera sélectionnable, on ne
pourra donc utiliser que la première solution.
Un des autres points à améliorer est la vitesse de création de liste à partir d'un modèle, en effet lors
de mes tests, je ne me suis basé que sur des courtes listes par manque de temps, or il s'avère que de
longue liste pose quelque soucis de lenteur.
Conclusion
Durant le long de mon cursus universitaire, nous avons étudié de nombreux domaines, mais
pour la plupart, seulement sur la partie théorique. Ce stage m'a permis de les voir sous une autre
approche, la pratique. En effet j'ai dû utiliser mes connaissances en UML , en J2EE , en base de
données, en réseau et même en Théorie des langages, chose à laquelle je ne m'attendais pas du tout !
Il est indéniable que sur le plan technique j'ai énormément gagné, je suis désormais plus confiant;
mais outre la technique, j'ai surtout appris sur le plan fonctionnel et le relationnel. Un ERP
permettant d'améliorer la gestion de toute une entreprise, il va de soit que j'ai eu à comprendre de
nombreux domaines tel que la gestion des ressources humaines, la gestion des stocks et de
nombreux autres. Malgré ces six mois; je sais qu'il me reste une masse phénoménale d'informations
à encore apprendre mais c'est la diversité de ce stage qui l'a rendu aussi attrayant . OfbizNéogia
étant un logiciel libre, j'ai également pris conscience de l'importance des documentations. En effet il
est primordial d'avoir une documentation aussi exhaustive que possible afin de permettre
l'amélioration ou la correction future. J'ai également eu la possibilité d'avoir des contacts directs
avec des clients du projet Néogia ce qui m'a également permis d'entrevoir le plan relationnel et me
rendre compte de l'importance de la communication entre tous les différents acteurs d'un tel projet.
Résumé
Mon stage de 2ème année de Master s’est déroulé au sein de l’entreprise Néréide, depuis début
février 2006 jusqu'à fin septembre 2006, sous la responsabilité de Monsieur Peter Goron. Cette
entreprise est une Société de Services en Logiciels Libres spécialisée dans l’intégration de l’ERP
libre Ofbiz. Au cours de ces 6 mois de stage, j’ai effectué de nombreuses tâches autour du
développement de cet ERP. J’ai notamment apporté des nouvelles fonctionnalités au module de
gestion des stock ou la gestion des ressources humaines. Ce projet m’a permis d’enrichir mes
connaissances en programmation Java, mais surtout mes connaissances fonctionnels quasiment
inexistante auparavant.
Mots clés : PGI, Logiciels Libres, JAVA, UML, Développement
Abstract
My internship took place within the company Néréide, since the beginning of April to the end of
September, under the responsibility of Mister Peter Goron. This company only used Open Source
software and is specialized in Ofbiz ERP integration. During those 6 months, I carried out a lot of
different work around the development of this ERP. In particular I carried out some new
fonctionnality in the component in charge of inventory control and human ressources . This project
enabled me to enrich my knowledge in Java development, but especially my functional knowledge
which was almost inexistant before.
Key Words : ERP, OpenSource, JAVA, UML, Development
Bibliographie
The Neogia Project. http://wiki.neogia.org/
Démonstration du projet Néogia http://demo.neogia.org/
The Open For Business Project. David E. Jones et Andy Zeneski. http://www.ofbiz.org/
Le réseau LibreEntreprise. http://www.libreentreprise.com/