Facult Des Sciences Et Techniques - DESS Comptence Complmentaire En Informatique
Parc de Grandmont 37200 TOURS Dveloppement dun composant de gestion de stocks pour lERP libre Ofbiz Au sein de la Socit Code Lutin 2, rue Robert le Ricolais, BP 20446 44304 Nantes cedex3 Reponsable de Stage : Mai - Septembre 2004 Cdric PINEAU PIERRE GAUDIN Maitre de Stage : DESS CCI Tours promotion 2004 Olivier HEINTZ Socit Nride Remerciements Mes remerciements vont tout dabord Cdric Pineau et Benjamin Poussin qui mont permis de raliser ce stage au sein de leur entreprise, et tout au long duquel leur aide technique et leur disponibilit ont t fortement apprciables Je remercie galement Olivier Heintz pour mavoir encadr au cours du stage et plus parti- culirement pour son aide toujours pertinente, ses conseils et sa grande disponibilit. Je tiens remercier Yannick Thebault et Peter Goron qui ont su rpondre mes nombreuses questions. Enn, je noublie pas Catherine Heintz pour son accueil chaleureux et son aide tout au long de ce stage. i Table des matires Remerciements i 1 Prsentation Gnrale 1 1.1 Problmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Les ERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1.1 Dnition dun ERP . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1.2 Les diffrents acteurs du march . . . . . . . . . . . . . . . 2 1.1.1.3 La nouvelle donne des ERP libres . . . . . . . . . . . . . . . 3 1.1.2 Les enjeux de la Gnration de code . . . . . . . . . . . . . . . . . . . 4 1.2 Cadre du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1 La socit Code Lutin . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2 Le rseau Libre Entreprise . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.3 La socit Nride . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Objectifs du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2 Prsentation du logiciel Ofbiz et du projet Neogia 8 2.1 lERP Ofbiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.1 Prsentation Gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.2.1 LEntity Engine . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.2.2 Le Service Engine . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.2.3 Le ControlServlet . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 le projet Neogia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.1 Prsentation Gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2 Objectifs dtaills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ii TABLE DES MATIRES 2.2.3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.4 Processus dintgration des composants Nogia dans Ofbiz . . . . . . 16 3 Dveloppement du composant gestion des Stocks 18 3.1 Droulement du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2 Outils et bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.1 Eclipse 1 : Un EDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.2 Poseidon 2 : Le logiciel de modlisation . . . . . . . . . . . . . . . . . 19 3.2.3 Les logiciels de constructions de projets . . . . . . . . . . . . . . . . . 20 3.2.3.1 Ant 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.3.2 Maven 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.4 CVS 5 : un logiciel dchange de donnes . . . . . . . . . . . . . . . . 21 3.3 Fonctionnement avant mise en place . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.1 Etat des lieux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2 Analyse des besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2.1 Modication de lorganisation des magasins . . . . . . . . . 23 3.3.2.2 Dveloppement dun outil dinventaire . . . . . . . . . . . . 24 3.3.2.3 Amliorations fonctionnelles de la plannication des besoins 25 3.4 Modlisation UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.1 Lentit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.2 Lattribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4.3 Lassociation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5 Gnration de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.1 les gnrateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.5.2 Organisation des chiers gnrs . . . . . . . . . . . . . . . . . . . . . 30 3.5.3 Rle des chiers gnrs . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.5.3.1 Interface graphique . . . . . . . . . . . . . . . . . . . . . . 32 3.5.3.2 Dnition des tables de la base de donnes . . . . . . . . . . 32 3.5.3.3 Classes java . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1 http ://www.eclipse.org/ 2 http ://www.gentleware.com/ 3 http ://ant.apache.org/ 4 http ://maven.apache.org/ 5 Concurent Versions System, https ://www.cvshome.org/ iii TABLE DES MATIRES 3.5.3.4 Contrles et Services . . . . . . . . . . . . . . . . . . . . . 33 3.5.4 Intgration des chiers gnrs au composant . . . . . . . . . . . . . . 33 3.6 Programmation du code mtier . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.1 Linterface Graphique . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.2 Les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.3 Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.4 Les Scripts BeanShell . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6.5 Les requtes sur lEntity Engine . . . . . . . . . . . . . . . . . . . . . 34 3.6.6 Architecture des magasins . . . . . . . . . . . . . . . . . . . . . . . . 35 3.6.7 Inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.6.8 Centralisation des vnements planis . . . . . . . . . . . . . . . . . 35 3.7 Fonctionnement actuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.7.1 Modication de lorganisation des magasins . . . . . . . . . . . . . . . 36 3.7.1.1 Ajout dune ligne de stock . . . . . . . . . . . . . . . . . . . 36 3.7.1.2 Transfert de Stock . . . . . . . . . . . . . . . . . . . . . . . 38 3.7.2 Outil dinventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7.3 Amliorations fonctionnelles de la plannication des besoins . . . . . . 46 3.7.3.1 Plannication dune commande . . . . . . . . . . . . . . . . 46 3.8 Amnagement en cours et Amliorations . . . . . . . . . . . . . . . . . . . . . 48 Conclusion 49 Bilan du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Bilan personnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Annexes 51 A Diagrammes UML 51 B Exemple de code 57 B.1 Dntion de table NFacility pour lentity Engine : entitymodel.xml . . . . . . 57 B.2 Dnition dun contrle : controle.xml . . . . . . . . . . . . . . . . . . . . . . 58 B.3 Dnition dun service : services.xml . . . . . . . . . . . . . . . . . . . . . . 58 B.4 Exemple de getteur et de setteur implment dans les classes de base : NFacili- tyBase.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 iv TABLE DES MATIRES B.5 Exemple de code dvelopp dans une classe : NFacility.java . . . . . . . . . . 59 B.6 Exemple de mthode statique dintrogation de la base de donnes via lEntity Engine : StockEventPlannedQuerry.java . . . . . . . . . . . . . . . . . . . . . 60 B.7 Dnition dune page : EditAssocInventory.xml . . . . . . . . . . . . . . . . . 61 B.8 Dnition dune vue utilisant lafchage conditionnel (use-when) : NInvento- ryItem.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 B.9 Dnition des labes utiliss dans linterface graphique : FacilityUiLabels.properties 64 C Vue standard vs vue modife 65 v Liste des tableaux 1.1 Les principaux ERP Open Source du march 6 . . . . . . . . . . . . . . . . . . 4 2.1 Moteurs de rendu du ControlServlet . . . . . . . . . . . . . . . . . . . . . . . 11 3.1 Tags utiliss pour le paramtrage des entits . . . . . . . . . . . . . . . . . . . 27 3.2 Tags utiliss pour le paramtrage des attributs . . . . . . . . . . . . . . . . . . 28 6 sources :JDN 23/07/2004 vi Table des gures 1.1 Organisation dun ERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Rpartition des parts de march en 2002 . . . . . . . . . . . . . . . . . . . . . 3 2.1 Architecture dOfbiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 Organisation du projet Neogia . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 Organisation dun composant Neogia . . . . . . . . . . . . . . . . . . . . . . . 16 3.1 Exemple dorganisation de la hirarchie des emplacements de stockage . . . . 24 3.2 Diagramme de classe reprsentant larchitecture du facility . . . . . . . . . . . 26 3.3 Organisation du code gnr . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4 Liste de tous les magasins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5 Ajout dune ligne de stock depuis un magasin . . . . . . . . . . . . . . . . . . 37 3.6 Liste de toutes les lignes de stock . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.7 Enregistrement dun transfert de stock . . . . . . . . . . . . . . . . . . . . . . 38 3.8 Liste des transferts de stock plannis . . . . . . . . . . . . . . . . . . . . . . 38 3.9 Liste de toutes les lignes de stock . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.10 Vue de la liste des Inventaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.11 Vue ddition dun inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.12 Ajout dun magasin un inventaire . . . . . . . . . . . . . . . . . . . . . . . . 41 3.13 Vue de la liste des lignes dinventaire suite lajout dun magasin . . . . . . . 41 3.14 Ajout dun produit dans un inventaire . . . . . . . . . . . . . . . . . . . . . . 42 3.15 Vue de la liste des lignes dinventaire suite lajout dun produit un inventaire 42 3.16 Vue ddition dun inventaire : ralisation de linventaire . . . . . . . . . . . . 43 3.17 Ajout dune ligne dinventaire en cours de comptage . . . . . . . . . . . . . . 44 3.18 Vue de la liste des lignes dinventaire aprs ajout dune ligne dinventaire . . . 44 vii TABLE DES FIGURES 3.19 Vue de la liste des lignes dinventaire en cours de saisie . . . . . . . . . . . . . 45 3.20 Vue de la ligne dinventaire aprs validation dune ligne . . . . . . . . . . . . . 45 3.21 Vue ddition dun inventaire aprs clture dun inventaire . . . . . . . . . . . 46 3.22 Vue de la liste des inventaires aprs clture . . . . . . . . . . . . . . . . . . . 46 3.23 Vue dune commande depuis le composant Order dOfbiz . . . . . . . . . . . . 47 3.24 Liste des mouvements plannis de stock . . . . . . . . . . . . . . . . . . . . 47 A.1 Organisation des magasins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 A.2 Organisation de linventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 A.3 Plannication des vnements sur les stocks . . . . . . . . . . . . . . . . . . . 54 A.4 Relation entre les composants Facility et Manufacturing . . . . . . . . . . . . . 55 A.5 Relation entre les composants Facility et Order . . . . . . . . . . . . . . . . . 56 C.1 vue standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 C.2 vue modie en fonction du status des lignes dinventaire . . . . . . . . . . . . 66 viii ix Chapitre 1 Prsentation Gnrale 1.1 Problmatiques 1.1.1 Les ERP 1.1.1.1 Dnition dun ERP LERP 1 est un progiciel prsentant les principales fonctions ncessaires la gestion des ux et des procdures de lentreprise (gestion des commandes, stocks, fabrication, comptabilit, contrle de gestion, logistique, paie et ressources humaines . . .). Il accde des ressources communes stockes sur une base de donnes. 1 Enterprise Resources Planning 1 1.1. PROBLMATIQUES FIG. 1.1 Organisation dun ERP Il doit permettre dassurer le contrle global de lentreprise (contrle de gestion, pilotage de production, suivi des processus). Ainsi il permet dautomatiser et dintgrer les processus, de partager les donnes, de produire et daccder linformation en temps rel. 1.1.1.2 Les diffrents acteurs du march Quelques puissants fournisseurs privs dominent le march des ERP qui reste relativement concentr. Ainsi, les trois plus gros fournisseurs, mentionns ci-aprs se partageaient presque 50% des parts de march en 2002 2 : 2 source IDC 2 1.1. PROBLMATIQUES FIG. 1.2 Rpartition des parts de march en 2002 Sur le march des PME, de nouveaux acteurs apparaissent, commencer par Microsoft. Cet diteur est reconnu pour ses capacits de commercialisation et de popularisation de solutions informatiques. 1.1.1.3 La nouvelle donne des ERP libres Le march des ERP devient progressivement un march de "commodit". En effet, la lutte concurrentielle ne porte plus sur le produit qui est banalis mais sur les services qui rpondent aux besoins mtiers de lentreprise (coute du client, connaissance du mtier du client,...). Il sagit alors dun terrain propice au logiciel type Open Source. LOpen Source prsente quatre avantages essentiels : la mutualisation des cots de dveloppement : la concentration de linvestissement sur la partie mtier du client la prennit du code mme si les concepteurs disparaissent. labsence de dogmatisme en matire de rgles de gestion Une tude rcente 3 a montr que 53% des personnes sont prts tudier lutilisation dun ERP libre en alternative leur ERP existant. Lintrt des ERP libres devient donc rel, alors que jusqu prsent, les logiciels libres navaient pas de place dans ce secteur. Depuis 2000 plusieurs projets sont en cours de dveloppement. Il existe actuellement une dizaine de projets aboutis et utiliss en entreprise. 3 ERP 2004 INFOWORLD 3 1.1. PROBLMATIQUES Nom Origine Licence Environnement Fonctionnalits Aria Nola GPL PHP, MySQL Comptabilit, inventaire, paie. Compiere Jorg Janke Mozilla Public Licence J2EE, JBoss Gestion des ventes, gestion des cata- logues, des tarifs, suivi des commandes, gestion des achats, des stocks, de la logis- tique, gestion comptable et nancire ERP5 Nexedi GPL Python, Zope Gestion de production, gestion nancire, CRM, chane logistique, e-business, groupware Fisterra Igalia GPL GNOME2 development platform, Post- greSQL Gestion dentrepts, des stocks, de trso- rerie, facturation. OFBiz (Open For Bu- siness) David E. Jones + Andy Zeneski MIT XML, J2EE Gestion clients, fournisseurs, employs, gestion des articles, des stocks, des com- mandes, gestion de projet, e-commerce PGI Suite Taka GPL Linux, Apache, MySQL, PHP Gestion nancire, des achats, gestion commerciale, des ventes et des stocks. Value Enter- prise Emryn GPL Delphi/Kylix, Java Comptabilit, gestion de production, CRM . TAB. 1.1 Les principaux ERP Open Source du march 4 1.1.2 Les enjeux de la Gnration de code Lintrt dun ERP libre est rel. Toutefois ces applications sont en gnral trs complexes du fait du grand nombre de fonctionnalits dveloppes et du volume de donnes trs important manipuler de faon scurise. Ceci implique un temps de dveloppement trs long. Or les problmatiques actuelles de conception de logiciels libres sont en totale opposition. En effet, du fait du nombre rduit de dveloppeurs, la conception dun logiciel libre ncessite de : limiter le temps de dveloppement assurer la souplesse de la plateforme notamment lors dun changement de technologie limiter les efforts lis la maintenance du code. Dans ce contexte, la gnration de code qui consiste automatiser la cration du code dit darchitecture, est un enjeu important pour les socits de services dans le logiciel libre. En effet, cela permet la socit de concentrer ses efforts non sur le codage darchitecture qui ne sera pas source de valeur ajoute mais sur la demande spcique des clients qui quant elle, sera gnratrice de valeur ajoute. 4 1.1. PROBLMATIQUES Toutefois, pour que lutilisation de cette gnration de code soit optimale, il est essentiel de respecter quatre principes pouvant snoncer comme suit : La Qualit : un code gnr doit tre de qualit identique celle prsente par un code crit manuellement. Il doit tre correctement structur, facile dbuguer et distinct du code conu manuellement. La Cohrence : le code doit utiliser des noms de classe et de mthode qui soient cohrents entre eux. La Productivit : un gnrateur de code doit tre plus productif quun code rdig la main. Cela se mesure surtout lors dune rgnration an de gnraliser certaines fonc- tionnalits. LAbstraction : elle doit permettre lvolution du code gnr notamment lors du change- ment de technologie de la plateforme. 5 1.2. CADRE DU STAGE 1.2 Cadre du stage 1.2.1 La socit Code Lutin Code lutin est une jeune Socit de Services Nantaise spcialise dans lenvironnement libre (SSLL). Elle a t cre en 2002 par Cdric Pineau et Benjamin Poussin. Son activit est axe sur trois domaines : Le dveloppement de logiciels libres pour le traitement et la publication dinformation en utilisant notamment Java et XML. Le dploiement et la maintenance de systmes clefs en main bass sur des solutions libres : accs lInternet scuris, services de mail, de partage de chiers, dimpression et de sauvegarde. Le conseil et la veille technologique sur le monde des logiciels libres et sur les technolo- gies java et xml. 1.2.2 Le rseau Libre Entreprise La socit Code Lutin fait partie du rseau Libre -entreprise . Il sagit dun regrou- pement de socits de services en informatique spcialiste des logiciels libres et du systme GNU/Linux. Le rseau rassemble 10 socits implantes dans toute la France et ltranger. Lobjectif est de regrouper diffrents acteurs du march an davoir une couverture la plus com- plte possible de lenvironnement libre. Par ailleurs il existe un laboratoire dnomm labs.libre-entreprise.org qui met la dis- position de la communaut du logiciel libre un ensemble de ressources sous licences libres (ou- tils de dveloppement, bibliothques sous licence GPL, logiciels complets sous licences GPL, documentations, supports de cours et articles de fond sous licence FDL). Il hberge actuelle- ment 55 projets. 1.2.3 La socit Nride Nride est une Socit de Service en Logiciel Libre, situe Veretz, prs de Tours. Elle a t cre en mars 2004, avec pour activit principale le dveloppement et lintgration de lERP libre OFBiz. Elle propose galement tous les services de post-implmentation dun ERP. La socit Nride fait galement partie du rseau libre-entreprise. 6 1.3. OBJECTIFS DU STAGE 1.3 Objectifs du stage La socit Code Lutin a dvelopp un gnrateur de code utilisant des diagrammes UML, dnomm LutinGenerators . La socit Nride, quant elle, souhaite utiliser LutinGenerators dans le cadre de son projet Neogia qui a pour but le dveloppement de nouvelles fonctionnalits du logiciel Ofbiz. Dans ce cadre, la socit Code Lutin souhaite participer au projet Neogia en dveloppant un composant qui sera intgr dans ce projet an de valider le gnrateur de code et lamliorer. Le but du stage est donc de participer la mise en place du gnrateur de code et de tester la gnration de code en crant un composant de gestion de stock qui sera intgr au projet Neogia. Il sera galement ncessaire de coder lensemble des rgles mtiers propres au composant. Pour ce faire, le stage sest droul en trois tapes : 1. Modlisation UML du composant de gestion de stock 2. Test du gnrateur de code, dbuggage du code gnr et intgration du code gnr au composant 3. Codage de la partie mtier et intgration dans Ofbiz 7 Chapitre 2 Prsentation du logiciel Ofbiz et du projet Neogia 2.1 lERP Ofbiz 2.1.1 Prsentation Gnrale Ofbiz est un logiciel de gestion de production communment appel ERP. Ce projet a t initi en mai 2001 par deux amricains David E. Jones et Andy Zeneski. Leur souhait tait de crer des outils et une application pour le commerce. Ds le dbut, les outils et larchitecture ont t dvelopps an dune part, de faciliter le dveloppement de fonctionnalit et dautre part, de rduire le temps de maintenance du code existant. Une des caractristiques fortes de cet ERP est son appartenance au monde des logiciels libres. En effet, les deux concepteurs ont appliqu une licence MIT Open Source License qui implique le libre accs aux sources mais galement le droit de les modier, de les utiliser et mme de les vendre. La seule contrainte de cette licence est de respecter le copyright des sources. Aujourdhui, le projet rassemble une quinzaine de dveloppeurs dans le monde. Ofbiz est fortement orient vers le e-commerce mais son architecture modulaire a permis dintgrer des composants ddis lensemble des fonctions que lon retrouve dans diffrents types dentre- prise (service, industrie, commerce...). 2.1.2 Architecture Ofbiz est une application java client-serveur compatible avec la spcication J2EE dnis- sant une architecture logicielle standard. On retrouve ainsi les trois lments caractristiques 8 2.1. LERP OFBIZ dune architecture 3-tiers : les clients : ici des clients lgers, typiquement des machines peu puissantes disposant dun navigateur internet ; un serveur excutant les diffrentes applications Ofbiz ; et une ou plusieurs bases de donnes stockant le systme dinformation de lentreprise. FIG. 2.1 Architecture dOfbiz Ofbiz est en premier lieu un framework dapplication dentreprise dans lequel chaque composant reprsente une brique logicielle pouvant tre rutilise pour construire des applica- tions diverses. Ce framework repose sur trois composants essentiels sans lesquels une applica- tion standard ne pourrait pas fonctionner : lEntity Engine, le Service Engine et le ControlServ- let. 2.1.2.1 LEntity Engine LEntity Engine est un composant Ofbiz qui se charge de grer les transactions avec la base de donnes. Il est constitu dune collection dAPI qui implmente des objets java qui vont accder aux donnes de la table via des mthodes. Ainsi le dveloppeur naccde pas aux 9 2.1. LERP OFBIZ donnes directement mais via une couche abstraite qui se charge daccder aux donnes et de scuriser les transactions. Le code est ainsi indpendant du SGBD et le dveloppeur na pas connatre le langage SQL. Ses principales caractristiques sont : accs aux donnes via une interface unique, le GenericDelegator . supporte laccs transparent plusieurs bases de donnes. les entits sont dnies dans de simples chiers XML. tous les types java de base ont un quivalent en base de donnes. supporte les transactions distribues. suppporte un mcanisme de trigger appel EECA 1 mme si le SGBD sous-jacent nimplmente pas cette fonctionnalit. 2.1.2.2 Le Service Engine Le Service Engine est lquivalent de lEntity Engine pour tous les traitements des com- posants Ofbiz. Les traitements sont appels Services et peuvent tre excuts localement ou distance. Le principal intrt de ce composant est quil permet de lancer des services sans avoir besoin de connatre leur localisation et leur implmentation. Cest le ServiceDispatcher qui se charge alors de trouver limplmentation du service et de son excution. Un autre intrt est la possibilit de rendre disponible tout service Ofbiz vers lextrieur. Ainsi un composant peut appeler un service dun autre composant. Ils sont cods soit en XML Mini-Language qui est un outil dofbiz soit cod directement en java, ils peuvent alors appeler dautres mthodes java. Les services sont dnis par des chiers xml Lutilisation des services permet de garantir une uniformit dans la manipulation des donnes et dengendrer des contrles tel que le login ou la gestion des erreurs. 2.1.2.3 Le ControlServlet Le ControlServlet est llment cl de la communication entre les utilisateurs et les appli- cations web dOfbiz. Implment selon le modle MVC (Modle-Vue-Controleur), il gre la boucle dvnements de linterface graphique et les diffrents moteurs de rendu de lapplica- tion. Les rponses aux interactions de lutilisateur seffectuent par lintermdiaire dvnements qui peuvent tre implments sous la forme de services, de mthodes java, de scripts Beanshell ou Minilang. Un moteur de rendu se charge de renvoyer lutilisateur une vue dun document gnr partir des vnements prcdents et/ou de donnes. Les moteurs de rendu dont dispose Ofbiz : 1 Entity Event-Condition-Action 10 2.1. LERP OFBIZ Moteur Description JSP Les Java Server Pages permettent de gnrer des pages HTML dynamiquement. JPublish + FreeMarker JPublish permet de construire une page HTML partir de plu- sieurs chiers traits par FreeMarker et dappeler pour chacun dentre-eux des scripts BeanShell diffrents moments de la construction. FreeMarker est un moteur de template qui permet de gnrer des documents dynamiquement. FOP + FreeMarker FOP est un processeur XSL qui transforme un document XML trait avec FreeMarker en un document HTML ou PDF. JasperReport JasperReport permet de raliser trs facilement des rapports par- tir de multiples sources de donnes. TAB. 2.1 Moteurs de rendu du ControlServlet Voici lensemble des oprations effectues suite une interaction avec lutilisateur pour lui afcher une page laide de JPusblish et FreeMarker : 1. Lutilisateur clique sur un lien hypertexte ou valide un formulaire. Le navigateur en- voie alors une requte HTTP au serveur Ofbiz qui est intercepte par Tomcat et transmise au ControlServlet de lapplication web correspondante. ex : https://127.0.0.1:8443/ordermgr/control/orderview?order_id=WS10000 2. Le ControlServlet vrie si lURI demande est dnie par lapplication. Le cas chant, il appelle le ou les vnements associs cette URI. Dans le cas contraire, il renvoie une erreur au navigateur web de lutilisateur (Erreur HTTP 404 : page non trouve). 3. Si lvnement gnr doit appeler un service, il vrie que les paramtres de la requte correspondent aux attributs du service. 4. Si lvnement gnr doit appeler un service, il convertit les paramtres de la requte sous forme textuelle en objets Java correspondants. 5. Lvnement appelle un service ou un gestionnaire dvnements (mthode java statique). 6. Le service ou le gestionnaire dvnements peuvent effectuer des actions sur le modle de donnes. 7. LEntityEngine convertit ces actions en requtes SQL pour le serveur de base de donnes. 8. Le service ou le gestionnaire dvnement renvoie le rsultat de leur action. 9. Lvnement transmet ce rsultat au ControlServlet. 10. partir du rsultat de lvnement, le ControlServlet slectionne la vue afcher et appelle le moteur de rendu adquat. 11. partir de la dnition dune vue, le moteur de rendu construit les diffrents sous- lments de cette dernire. 11 2.1. LERP OFBIZ 12. Pour chaque sous-lment, il peut appeler des scripts BeanShell qui rcuprent et mettent en forme les donnes afcher. 13. Pour chaque sous-lment, il appelle le moteur de template qui se charge de gnrer le code HTML correspondant. 14. Le moteur de rendu assemble les diffrents sous-lments pour former une page web complte. 15. Le controlServlet transmet la page gnre au navigateur web de lutilisateur. 12 2.2. LE PROJET NEOGIA 2.2 le projet Neogia 2.2.1 Prsentation Gnrale Le projet Neogia initi par la socit Nride a pour objectif de complter ou de modier les fonctionnalits existantes dOfbiz en adaptant certains composants et en rcrivant dautres. Ce projet a galement pour but de mettre en uvre un mcanisme de gnration de code an daccrotre la productivit de dveloppement et de limiter leffort fournir pour maintenir le code. A contrario dOfbiz, ce projet est sous licence GPL. 2.2.2 Objectifs dtaills Deux types de composant sont modis. Le premier est constitu des composants dits fonctionnels , correspondant la partie mtier de lERP. Ces composants sont soit nouveaux soit ils remplacent un composant dOfbiz. Manufacturing : Il remplace le composant OFBiz existant. Il est remodlis en UML et apporte les fonctions telles que le MRP 2 Facility : Il remplace la partie du composant OFBiz correspondant la gestion des stocks. En effet la gestion des expditions est conserve. Il est re-modlis en UML et apporte de nouvelles fonctionnalits lies la gestion de stocks (inventaire, plannication de mou- vements, hirachisation des emplacements) Accounting : Il remplace le sous-composant OFBiz existant. Il est re-modlis en UML et apporte les fonctions de comptabilit analytique. Servicemgnt : Cest un nouveau composant. Il est modlis en UML et apporte de nou- velles fonctionnalits qui grent les activits de service ou de projet. Le second type de composant intgr au projet correspond aux composants techniques . Ces lments sont ncessaires lintgration dans Ofbiz des composants fonctionnels . En effet, ils ncessitent daccder aux entits de composants Ofbiz. Il faut alors crer la couche objet qui permettra dy accder. order : utilis par Facility pour accder aux objets des entits OrderItem et OrderHeader party : utilis par tous les composants pour accder aux objets des entits du composant Party dOfbiz product : utilis par tous les composants pour accder aux objets des entits du composant Product dOfbiz common : utilis pour les liaisons avec les entits contenant les numrations et les statuts content : utilis pour unier certaines rgles de dveloppement et pour la gestion des champs multi-langues. 2 Manufacturing Resource Planning 13 2.2. LE PROJET NEOGIA La modlisation UML de tous les composants Neogia permet de mettre en uvre la gn- ration de code. Elle est prsente au chapitre 3.5. 2.2.3 Organisation Lorganisation du projet Neogia a volu tout au long de son avancement an de sparer trs distinctement les composants, des outils dintgration dans Ofbiz. Les composants sont regroups dans le dossier component . On y retrouve les diff- rents types de composant noncs au chapitre 2.2.2. Il existe en plus deux dossiers compor- tant la structure dun composant neogia utiliser lors de la cration dun nouveau composant neogia-componet-template et un dossier comportant les chiers utiles au fonctionnement du composant dans Ofbiz ofbiz-common-component-les Le dossier doc contient la documentation du projet. Les chiers utiliss ont lextension .rst . Ils sont utiliss pour la cration du site Internet du projet via Maven et la commande : maven site . Le dossier generators contient lensemble des chiers ncessaires la construction des bibliothques (jar) des gnrateurs et qui seront utilises lors de la gnration des composants. Le dossier ofbiz-patchs contient les patchs appliquer Ofbiz lors de lintgration des composants Neogia. Le dossier neogia contient, sa racine, un ensemble de chiers utiliss par les utilitaires Maven et Ant an de gnrer lensemble des composants ou dintgrer les composants dans Ofbiz (cf section 2.2.4) 14 2.2. LE PROJET NEOGIA FIG. 2.2 Organisation du projet Neogia Tous les composants du projet possdent la mme organisation. Elle permet de sparer le code gnr du code nalis. Le dossier dist contient la version stable du composant. Lors de lintgration du composant dans Ofbiz ce sont ces chiers qui sont utiliss. Dans ce dossier il ny a donc que des chiers qui ont t tests et qui sont fonctionnels. Cest galement ce dossier qui est mis jour sur le serveur CVS. Le dossier src contient le chier .zuml cr par Poseidon et qui correspond la modlistation UML du composant. Ce chier est utilis par les gnrateurs de code (cf section 3.5) Le dossier target est cr lors de la gnration du code. Il est compos dun dossier gen qui contient le code gnr qui sera utilis par le dveloppeur (cf section 3.5) et un dossier src Build qui est le dossier de travail des gnrateurs. 15 2.2. LE PROJET NEOGIA Le dossier contient, sa racine, un ensemble de chiers utiliss par lutilitaire Maven an de gnrer le composant. FIG. 2.3 Organisation dun composant Neogia 2.2.4 Processus dintgration des composants Nogia dans Ofbiz Les composants dvelopps dans le cadre du projet doivent tre intgrs dans Ofbiz. Or Nogia possde son propre enviromnement. Il est donc ncessaire dintgrer les nouveaux com- posants dans larchitecture dOfbiz. Pour ce faire, une procdure a t mise au point an de 16 2.2. LE PROJET NEOGIA faciliter cette tape. Elle utilise lutilitaire Ant via la commande : Ant all. Voici un rsum des diffrentes tapes : 1. Rcupration de la version de rfrence dOfbiz ; 2. Copie de la version de rfrence dOfbiz en ofbizNeogia ; 3. Application de tous les patchs dintgration sur ofbizNeogia ; 4. Copie des composants Nogia dans ofbizNeogia. 17 Chapitre 3 Dveloppement du composant gestion des Stocks 3.1 Droulement du stage Le dveloppement du composant de gestion de stock a constitu quatre tapes dans le d- roulement du stage : 1. Mai : appropriation du fonctionnement dofbiz 2. juin mi-juin : modlisation UML 3. mi-juin mi-Juillet : test du gnrateur de code, dbuggage du code gnr 4. mi-juillet mi-septembre : codage de la partie mtier et intgration du composant dans ofbiz 18 3.2. OUTILS ET BONNES PRATIQUES 3.2 Outils et bonnes pratiques Le travail ralis au cours du stage a ncessit lutilisation de plusiseurs logiciels libres. Le prsent chapitre a pour but de prsenter ces outils et la mthode de travail utilise pour la ralisation du projet Neogia. Ces outils peuvent tre prsents selon quatre catgories : les EDI 1 : Eclipse les logiciels de modlisation : Poseidon Edition Community les logiciels de construction de projets : Maven, Ant les logiciels dchange de donnes : CVS, Subversion 3.2.1 Eclipse 2 : Un EDI Eclipse a t cre par la socit IBM, laquelle a, part la suite, cde le code la commu- naut an quelle poursuive son dveloppement. Son but est de fournir une plate-forme modulaire pour permettre des dveloppements infor- matiques, grce une architecture construite de modules nomms plug-ins . Si les principaux modules fournis en standard avec Eclipse sont orients vers le langage Java, dautres modules pour les langages comme C++, Cobol, mais aussi pour dautres aspects du dveloppement (base de donnes, conception avec UML . . .) sont en cours de dveloppe- ment. Dans le cadre du projet Neogia, Eclipse est utilis comme EDI an de dvelopper lensemble des composants intgrs cet EDI. 3.2.2 Poseidon 3 : Le logiciel de modlisation Poseidon est un logiciel de modlisation UML dvelopp en Java par la socit Gentleware. Ce produit existe en diffrentes versions commerciales ou libre. La version libre appele Edi- tion Community peut gnrer des diagrammes UML respectant les standards UML 1.4. Elle a donc t estime sufsante pour la ralisation du projet Neogia. La cration dun diagramme est simplie par lutilisation de linterface visuelle et dune palette de composants quil suft de dposer sur linterface graphique. Outre la facilit que prsente Posdon pour crer des diagrammes UML, lintrt de ce logiciel est li au type de chiers gnrs. En effet,Posdon cre des chiers au format XMI 4 , format standard de reprsentation de modles UML. Ce format est utilis par les diteurs UML 1 Integrated Development Environment 2 http ://www.eclipse.org/ 3 http ://www.gentleware.com/ 4 XML Metadata Interchange 19 3.2. OUTILS ET BONNES PRATIQUES pour raliser les imports / exports de modles dun outil vers un autre outil. Posdon est utilis dans le projet Neogia an de modliser larchitecture du composant et de gnrer des chiers de type XMI qui seront interprts par les gnrateurs de code. 3.2.3 Les logiciels de constructions de projets La communaut libre a dvelopp plusieurs outils facilitant la construction dapplications java parmi lesquels gurent Ant et Maven. 3.2.3.1 Ant 5 Ant est un projet du groupe Apache-Jakarta crit en java. Son but est dautomatiser les op- rations rptitives (compilation, excution de tches post et pr-compilation ... ) et de permetre la construction dapplications sans dpendance vis- -vis de la plateforme. Il trouve toute son utilit pour des projets dvelopps sur diffrents systmes dexploitation ou devant fonction- ner sur plusieurs systmes dexploitation. Il est galement utilis pour migrer des projets dun systme un autre. Il repose sur un chier de conguration XML dnomm build.xml qui contient un en- semble de cibles (target). Chaque cible contient une ou plusieurs tches. De nombreux plug-ins permettent dintgrer Ant aux EDI tel Eclipse. Lappel dune cible se fait en ligne de commande : ant [option] [cible] Ant est utilis dans le projet Ofbiz an de lancer des tches telles que la compilation du pro- jet : ant , la suppression du contenu des tables de la base de donnes : ant clean-data, le chargement de donnes standard et linitialisation : ant run-install. Il est galement utilis dans le projet Neogia an de copier ou de supprimer dans Ofbiz un des composants ou lensemble des composants : ant. 3.2.3.2 Maven 6 Maven est dvelopp par le groupe Apache-Jakarta. Cet outil permet galement dautoma- tiser la gestion de projets Java. Il offre les fonctionnalits de compilation et de dploiement 5 http ://ant.apache.org/ 6 http ://maven.apache.org/ 20 3.2. OUTILS ET BONNES PRATIQUES des applications Java, de gestion des librairies requises par lapplication, dexcution des tests unitaires et de gnration des documentations du projet (site web, pdf, Latex). Ainsi Maven prsente des similitudes avec Ant. Toutefois, le chier de conguration de Maven est plus simple que le chier de conguration ncessaire Ant. De plus, il offre des fonctionnalits que Ant ne possde pas et reste plus exible car il permet aux utilisateurs la cration de leurs propres plug-ins la diffrence de Ant qui reste relativement statique. Enn, les scripts Ant ne sont pas rutilisables entre projets, alors que le but de Maven est justement de fournir des fonctionnalits rutilisables. An de bien grer les dpendances, Maven sappuie sur des repositories de librairies (jar). Ces repositories peuvent tre contenus dans la machine locale ou accessibles via HTTP. Ainsi, sa premire excution, Maven tlcharge les diffrents plug-ins dont il a besoin et les installe. Ces mmes librairies peuvent tre rutilises entre les diffrents projets. Lappel dune cible se fait en ligne de commande : maven [option] [cible] Maven est utilis dans le projet Neogia an de construire les librairies (jar) ncessaires la gnration de code puis an de gnrer le code. 3.2.4 CVS 7 : un logiciel dchange de donnes CVS est un outil de suivi de version. Il permet de conserver une trace de lhistorique des modications dun chier, ou dun ensemble de chiers, et de revenir simplement nimporte quel tat antrieur. Pour garder cet historique, CVS stocke uniquement les diffrences entre deux versions successives, ralisant ainsi un gain de place. Un autre de ses avantages est de faciliter le travail en groupe. En effet, il permet un stockage centralis du code source sur un serveur et gre les accs concurrents sur les chiers de dvelop- pement. De plus, il offre la possibilit aux dveloppeurs daccder en mme temps un mme chier an de le modier. CVS assure la prise en charge des modications lorsque celles-ci ne gnrent pas de conits. En voici quelques lignes de commande : 7 Concurent Versions System, https ://www.cvshome.org/ 21 3.2. OUTILS ET BONNES PRATIQUES cvs checkout rapatrie lensemble des chiers dun module contenu sur le serveur vers lordinateur local cvs update mise jour des chiers locaux partir de versions situes sur le serveur cvs commit intgre les modications dun chier en local sur le serveur avec vrication pralable des conits et attribution dun numro de version cvs add ajoute un chier en local. Il est ncessaire de mettre jour le serveur en utilisant la commande cvs commit cvs remove supprime le chier sur le serveur. Lhistorique du chier est conserv Le projet Neogia est contenu sur un serveur CVS. Lensemble des dveloppeurs utilise CVS pour intgrer leurs modications effectues en local et pour rcuprer les mises jour des autres dveloppeurs. Le projet Ofbiz tait initialement sous CVS. Au cours de lt, il a migr pour tre contenu sur un serveur Subversion. Dvelopp par la mme quipe, Subversion correspond lopti- misation de CVS. Il apporte notament une gestion en version des rpertoires, la possibilit de renommer un chier dans le rfrentiel ou de le dplacer et la gestion atomique des transactions. 22 3.3. FONCTIONNEMENT AVANT MISE EN PLACE 3.3 Fonctionnement avant mise en place 3.3.1 Etat des lieux Lapplication Ofbiz intgre un module de gestion des stocks dnomms facility . Ce composant permet de dnir lensemble des emplacements physiques dune socit tels que les stocks, les magasins, les docks, les bureaux, les pices dun btiment. Plusieurs lments peuvent tre runis en groupes de batiments qui, eux-mme peuvent faire partie dautres groupes de mme type. Pour chaque lment, il est possible dassocier des personnes ou groupes de personnes an de dnir par exemple le lieu de travail demploys ou dassocier un responsable un atelier. Enn, dans le cas de magasins, de stock ou dautre lieu de stockage, chaque lment peut tre associ un ou plusieurs produits. Ainsi les produits du magasin constituent une ligne de stock (inventoryItem). Pour chaque ligne de stock, un ensemble de paramtres est dni tel que les quantits en stock, les quantits disponibles, lemplacement dans le lieu de stockage, le numro de srie, le numro de lot, la date dexpiration, le prix unitaire. En plus dune gestion statique, le composant propose un ensemble de fonctionnalits per- mettant la gestion dynamique des stocks tel que linventaire, les mouvements de stock. Linventaire du stock est ralis par un simple ajustement des quantits relles pour chaque ligne de stock via une interface graphique. Les mouvements de stock (transfert, commande, rapprovisionnement,... ) sont raliss sans aucune centralisation. Les notions de quantit en stock et de quantit disponible sont prises en compte dans Ofbiz. Toutefois la quantit de produit disponible est calcule uniquement en fonction de prvisions et sans tenir compte de la date de ralisation de lvnement. 3.3.2 Analyse des besoins Ltude de larchitecture du composant montre certaines insufsances et amne envisager une rcriture totale du composant. Seront prsents ci-aprs les principaux axes de rorganisa- tion du composant. 3.3.2.1 Modication de lorganisation des magasins Lorganisation du composant ne permet pas davoir une vue arborescente des magasins. Seule la notion de groupe et de sous-groupe existe. Or il est trs frquent quun lieu de stockage comprenne dautres zones de stockage constituant alors une hirarchie. Il apparat donc nces- saire de mettre en place la notion de sous-magasin, chaque sous-magasin ayant une rfrence au magasin qui le contient. 23 3.3. FONCTIONNEMENT AVANT MISE EN PLACE FIG. 3.1 Exemple dorganisation de la hirarchie des emplacements de stockage Cette organisation permet lapplication en cascade tous les sous niveaux de modications. Par exemple, le blocage dun magasin lors dun inventaire ou lors dun contrle qualit se propagera tous les sous-niveaux an dinterdire tous mouvements de stock sur lensemble de ces sous-niveaux. 3.3.2.2 Dveloppement dun outil dinventaire Loutil dinventaire propos par Ofbiz est trs insufsant au regard des obligations lgales. Cest pourquoi il est ncessaire de dvelopper un module spcique la cration, la ralisation et lenregistrement des inventaires physiques. La cration dun inventaire peut se faire selon les produits ou les localisations inventorier. De mme il existe diffrentes techniques de ralisation dinventaires dont il faut tenir compte. Ces caractristiques servent lors de la cration du listing de linventaire. Cette ralisation se dcompose en trois tapes. La premire consiste diter les feuilles de saisie en indiquant les produits et les emplacements compter. Une fois linventaire en cours de ralisation, chaque ligne de stock inventori doit tre bloque an dviter tout mouvement de produit sur cette ligne. Enn il est ncessaire daffecter chaque comptage un groupe de personne. 24 3.3. FONCTIONNEMENT AVANT MISE EN PLACE Lenregistrement est la dernire partie dun inventaire. Chaque comptage est saisi et com- par automatiquement avec le stock thorique des ns de contrle. En cas dcart important, il est possible deffectuer un nouveau comptage. Une fois les quantits saisies, chaque ligne est valide et lorsquil existe un cart entre le stock thorique et la quantit relle, un mouvement de stock est engendr et archiv. Lorsque linventaire est clos tous les emplacements sont dbloqus. Cet inventaire et len- semble des lignes de comptage sont alors archivs. 3.3.2.3 Amliorations fonctionnelles de la plannication des besoins Ofbiz ne permet pas de centraliser les mouvements de stocks planis, de telle sorte que ltat du stock une date donne ne peut tre dtermin de manire prcise. Lensemble des mouvements (transfert, commande, rapprovisionnemt, production . . .) doit tre centralis an de pouvoir calculer tout moment et pour une date donne les quantits disponibles dun pro- duit. Cela permet damliorer la fois la planication des besoins en produit et la planication de la disponibilit des produits. 25 3.4. MODLISATION UML 3.4 Modlisation UML Aprs lanalyse des besoins, larchitecture du composant de gestion de stock a t modlis laide de diagrammes de classe UML. Lensemble des diagrammes crs est contenu dans lannexe A. Voici un exemple reprsentant larchitecture du nFacility. Ce diagramme illustre notamment lorganisation hirarchique des magasins. FIG. 3.2 Diagramme de classe reprsentant larchitecture du facility 3.4.1 Lentit Dans Ofbiz, la notion dentit correspond aux tables dune base de donnes. Les entits sont reprsentes par des classes dont le strotype est entity . Pour chaque entit, il existe une srie de tags propres au projet Neogia. Ces tags sont interprts lors de la gnrration de code et permettent de modier les chiers et le code gnr. 26 3.4. MODLISATION UML Tag Valeur Signication shortName "texte" attribue un nom dans Ofbiz en respectant la limite de taille qui est de trente caractres. orderBy "nomattribut" permet de faire un tri selon un ou plusieurs champs an dafcher une liste organise. cache true permet de prciser si le cache est utilis lors de laccs aux donnes dune autre table par un getteur. gui ce tag est utilis pour la gnration de linterface utilisateur. Les valeurs prises par ce tag sont dnies par des sous-tags qui prennent la valeur true sils sont prsents. listAll la transaction permettant dafcher lensemble des donnes dune entity est gnre. list la transaction List qui liste le contenu dune table est gn- re. A la diffrence de listAll, list propose une possibilit de recherche selon les attributs ayant le tag indexed. edit gnre la transaction Edit qui permet de modier un enre- gistrement dune entit. show gnre la transaction Show qui permet depuis une transac- tion List dafcher les donnes du champ associ. showList gnre la transaction ShowList qui permet depuis une tran- saction List dafcher les donnes du champ associ. lookup gnre la transaction Lookup qui permet dafcher dans une po-up les enregistrements de lentit an de faciliter la sai- sie de donnes. drop-down indique que lentit apparat dans un drop-down pour les as- sociations. Ceci est utilis notamment pour lafchage des statuts ou des numrations dd-descriptionOnly indique que dans les drop-down, seule la description est af- che defaultValue afche pour les numrations et les statusitemou toute autre association une valeur par dfaut dans le drop-down. Ce tag est utilis lorsque un tag identique nest pas dni sur las- sociation. TAB. 3.1 Tags utiliss pour le paramtrage des entits 3.4.2 Lattribut Les attributs correspondent aux champs de la table, chaque entit en possdant. Le nom des attributs doit respecter la syntaxe java. Leurs types sont ceux utilisables dans java et leur visibilit est protected . Comme pour les entits, il existe une srie de tags propres au projet 27 3.4. MODLISATION UML Neogia qui sont interprts par les gnrateurs an de modier le code gnr. Tag Valeur Signication readonly spcie que la valeur de cet attribut ne sera pas modiable primaryKey true/ false indique que cet attribut sera une cl primaire. ofbizEntityType indique un type dni dans Ofbiz. staticValue dnie la valeur dun attribut comme static et nal . defaultValue spcie pour le type booelan la valeur par dfaut (true ou false) dans un drop-down value paramtre la manire dont sera cre la valeur de lattribut. Ce tag utilise des sous-Tags nextSeqId la valeur de cet attribut est gnre automatiquement par Ofbiz lutilisateur ne poura pas gnrer ou modier cette valeur. userOrSeq la valeur de cet attribut est gnre par lutilisateur. Sil ne le complte pas, ceci est fait automatiquement. i18n insre une valeur en diffrents langages. Ceci gnre une icne an dentrer les diffrentes valeurs selon le langage gui utilis pour la gnration de linterface utilisateur. Ce tag utilise des sous-Tags indexed Indique quun attribut est prsent dans la vue de recherche et que lutilisateur poura donc faire une recherche avec cet attribut calculated booleen to say the attribute must be in display in the edit Form. hidden Prcise que lattribut ne sera visible sur aucune forme. listLookup Indique que lattribut est prsent dans le listLookup. list indique que lattribut est prsent dans le list. idName indique que cet attribut est lID de lentit. Il est utilis lors de lafchage des valeurs dune association. [idName] des- cription description indique que cet attribut est la description de lentit. Il est utilis lors de lafchage des valeurs dune association. [idName] description TAB. 3.2 Tags utiliss pour le paramtrage des attributs 3.4.3 Lassociation Les associations reprsentent les liaisons qui existent entre les diffrentes tables. Tous les types disponibles dans UML sont utilisables. La cardinalit doit tre indique chaque extr- mit. 28 3.4. MODLISATION UML associations relation entre deux entits classe dassociation lorsque la cardinalit est * , * une classe est cre agrgation montre lappartenance, la destruction du tout se propage a ces parties composition indique que lentite est compose de Remarque La modlisation UML prsente deux avantages. Dune part, elle donne une vision globale de larchitecture du composant et dautre part, le chier gnr dans Posdon sera utilis par les gnrateurs de code. 29 3.5. GNRATION DE CODE 3.5 Gnration de code 3.5.1 les gnrateurs Les gnrateurs sont utiliss an de crer toute la couche java de persistance entre les objets issus de la modlisation et les entits gres par Ofbiz, ainsi que linterface graphique standard et les services associs. La technologie utilise par les gnrateurs provient dun logiciel libre appel Topia, ralis par la socit Code-Lutin. La gnration est lance grce lutilitaire Maven. La premire tape consiste transformer les chiers XMI en chiers XML appels objectmodel . Ces chiers reprennent la description des classes contenue dans le modle UML mais avec une DTD propre Topia. Au cours de la gnration, ces chiers sont parss an de crer en mmoire un modle objet qui servira accder aux diffrents lments du diagramme. Par ailleurs, la gnration ncessite un chier java dont la mthode principale sera appele par Topia. Cette mthode comporte le corps du texte gnrer entre des balises /*{ et }*/ . Il comporte galement des variables dont la valeur sera dtermine au moment de la gnration. Ces variables tant contenues entre les balises <% et %> . Voici quelques gnrateurs dvelopps pour Nogia : gnrateur de services ; gnrateur dentits ; gnrateur de la couche dabstraction Objet<->Entit ; gnrateur dinterfaces graphiques standards pour les objets modliss ; gnrateur des formulaires de recherche ; gnrateur des chiers dinternationalisation. Cette gnration en trois phases lavantage dtre extrmement souple puisquelle permet de crer nimporte quel type de chier. 3.5.2 Organisation des chiers gnrs Les chiers gnrs sont rpartis dans deux types de dossiers : les dossiers \generated qui contiennent les chiers qui seront re-gnrs automati- quement et qui ne doivent pas tre modis manuellement. les dossiers \developped qui contiennent les chiers dvelopps par le programmeur. Ils peuvent comporter des chiers gnrs dont le nom se termine alors par la lettre G . Ces chiers sont renomms et utiliss pour complter les mthodes des objets de base. 30 3.5. GNRATION DE CODE FIG. 3.3 Organisation du code gnr 3.5.3 Rle des chiers gnrs An de faciliter la comprhension des diffrents chiers gnrs, il est possible de les re- grouper selon leur fonction : 31 3.5. GNRATION DE CODE 3.5.3.1 Interface graphique La gestion des crans standards est dnie dans les chiers freemarker (ftl) (cf chapitre 2.1.2.3). Il existe 4 types prdnis : edit , list , editassoc et show ; ils sont gnrs en fonction des tags utiliss dans le modle UML. edit<Entity>.ftl cran ddition dun enregistrement dune entit list<Entity>.ftl cran dafchage sous forme de liste du contenu dune en- tit editAssoc<Entiy>.ftl cran de visualisation des entits associes une ligne den- registrement show<Entity>.ftl cran de show Pour chaque entit, lorganisation des champs dans un cran standard est dnie dans un chier XML qui comporte lorganisation des diffrents types de vue. form<Entity>.xml organisation des champs pour les diffrentes vues possibles Les valeurs afches dans les pages sont rcupres par un script beanshell. edit<Entity>.bsh script de rcupration des donnes pour lafchage dune interface graphique de type edit find<Entity>.bsh script de rcupration des donnes pour lafchage dune interface graphique de type liste suite une recherche editAssoc<Entity>.bsh script de rcupration des donnes dentits associes pour lafchage dune interface graphique de type editAssoc 3.5.3.2 Dnition des tables de la base de donnes entitymodel.xml dnition des entits pour lentity engine entitygroup.xml dnition des entits pour lentity engine (exemple de chier cf annexe B.1) 3.5.3.3 Classes java <entity>Base.java implmentation des objets de base et des mthodes de base (setteur et getteur) permettant daccder au champ dune table <entity>G.java classe hritant dun <entity>Baseet implmentant les constructeurs de lobjet. Cest partir de ces chiers quest dveloppe une partie de la couche mtier (exemple de chier cf annexe B.4) 32 3.5. GNRATION DE CODE 3.5.3.4 Contrles et Services controlerG.xml dnition des contrles de base qui sont appels lors du ControlServlet. Les dnitions de ce chier sont recopies dans le chier controler.xml servicedefG.xml dnitions des services de base. Les dnitions de ce chier sont recopies dans le chier service.xml <entity>Service.java implmentation des services de base de contrle de transac- tion depuis une interface visuelle (exemple de chier cf annexe B.2 et B.3) 3.5.4 Intgration des chiers gnrs au composant Une fois les chiers gnrs, ils sont intgrs dans le nouveau composant Ofbiz. Remarques Le code gnr permet au composant dtre quasiment fonctionnel sans besoin pour le d- veloppeur dajouter du code. Le paramtrage de certains chiers xml permet dactiver les fonc- tions de base du composant. Toutefois cette gnration appelle deux remarques : lutilisation des gnrateurs de code est une technique neuve et leur mise au point est une phase trs longue (un mois et demi) pour obtenir la gnration dun code exempt de bug. Le code gnr a galement subi de nombreuses modications dans le but doptimiser larchitecture gnrale du projet Neogia ce qui a entrain de nombreuses refontes totales de lorganisation du composant. bien que le composant soit oprationnel quant aux fonctions de base, on peut considrer quil reste encore 30% du code crer par le dveloppeur. En effet, il faut adapter une partie du code gnr mais aussi coder lensemble des couches mtiers. 33 3.6. PROGRAMMATION DU CODE MTIER 3.6 Programmation du code mtier La programmation du code mtier consiste crer des chiers de toutes pices ou modier certains chiers gnrs. Toutes ces modications sont contenues dans les dossiers \developped (voir galement le graphique 3.3). Quatre lments sont essentiellement modis. 3.6.1 Linterface Graphique ajout ou suppression de champs. masquage ou afchage de champs en fonction de la valeur de variables (cf annexe B.8 et C ). ajout dun bouton an dactiver un service. modication de laction dun bouton en fonction de la valeur de variables. dveloppement complet de vues non standards. 3.6.2 Les services modication de la dnition de services an dintgrer des nouvelles variables un ser- vice standard. ajout de nouveaux services java permettant un traitement non standard des donnes, ap- pels via une interface graphique modie (cf annexe B.3). 3.6.3 Les classes ajout de mthodes qui sont appeles par un service. ajout de mthodes de calcul de donnes ou de traitement particulier (cf annexe B.5). 3.6.4 Les Scripts BeanShell cration ou modication de scripts an de rcuprer des valeurs de variables non fournies par les scripts gnrs automatiquement. 3.6.5 Les requtes sur lEntity Engine cration de mthodes statiques dinterrogation de la base de donnes en utilisant les m- thodes fournies par lentity Engine (cf annexe B.6). Voici prsentes ci-dessous les principales modications effectues pour chaque partie du com- posant de gestion de stock. 34 3.6. PROGRAMMATION DU CODE MTIER 3.6.6 Architecture des magasins La modlisation UML du composant et la gnration de code ont suf obtenir une ges- tion statique des magasins. Toutefois, certaines fonctions lies leur gestion dynamique ont d tre dveloppes. Ainsi de nouvelles mthodes ont t ajoutes an de trouver lensemble des sous-magasins dun magasin et dappliquer cette sous-hirarchie une modication. Les ser- vices permettant les transferts planis de stock ont galement t dvelopps. Enn, certaines interfaces ont t modies an de scuriser ou de faciliter la saisie des donnes. 3.6.7 Inventaire La modlisation UML de linventaire et la gnration de code ont permis de mettre en place les tables de la base de donnes. Par contre, lensemble des interfaces graphiques a d tre modi- . En effet, lafchage et les fonctions disponibles doivent tres modies en fonction de ltat davancement de linventaire. Des nouveaux services ont t dvelopps an de dclencher, de valider ou de clore un inventaire. Ces services font appel des mthodes, qui elles aussi, ont t dveloppes. 3.6.8 Centralisation des vnements planis La mise en place de la centralisation des vnements planis na pas ncessit de modi- cation de linterface graphique. Le principal travail a consist crer de nouveaux services an de faire communiquer le composant de gestion des stocks avec dautres composants. Ainsi, des services ont t dvelopps pour enregistrer une commande dans les vnements planis et pour obtenir les quantits de produits disponibles une date donne. Le mme travail a t ralis avec le composant manufacturing . Remarques Ces modications peuvent paratre modestes. Toutefois, il faut garder lesprit que le code gnr au dbut de lutilisation des gnrateurs tait de qualit trs infrieur celui obtenu actuellement. En effet, de nombreuses modications qui taient apportes manuellement aux chiers ont t intgres aux gnrateurs. Ainsi, le travail fourni au dbut de lutilisation des gnrateurs nest plus visible. Enn Ofbiz est un framework relativement complexe et aucun diagramme UML na t uti- lis an de dcrire le fonctionnement des diffrents composants. Ainsi, lintgration des compo- sants Neogia dans Ofbiz est une tape trs complexe qui ncessite un important travail pralable pour dterminer les services dOfbiz utiliss et accder au nouveau composant. 35 3.7. FONCTIONNEMENT ACTUEL 3.7 Fonctionnement actuel 3.7.1 Modication de lorganisation des magasins Les magasins ont une organisation hirarchique. Ils contiennent une rfrence au magasin parent (cadre rouge) qui peut tre prcise la cration de celui-ci ou lors de son dition. La vue ci-dessous liste lensemble des magasins de lenvironnement de test. FIG. 3.4 Liste de tous les magasins 3.7.1.1 Ajout dune ligne de stock Depuis chaque magasin, une ligne de stock peut tre ajoute. Pour cela, il faut diter le magasin, "cliquer" sur le bouton "Stock" puis sur "Add StockItem". Une fois les champs ren- seigns, lajout de la ligne de stock se fait en cliquant sur "Ajouter". 36 3.7. FONCTIONNEMENT ACTUEL FIG. 3.5 Ajout dune ligne de stock depuis un magasin Une nouvelle ligne apparait alors dans la liste des StockItems. Depuis cette vue, vous pouvez diter, supprimer une ligne de stock ou crer une nouvelle ligne en cliquant sur "Cration". FIG. 3.6 Liste de toutes les lignes de stock 37 3.7. FONCTIONNEMENT ACTUEL 3.7.1.2 Transfert de Stock Le transfert de stock se fait depuis la vue ddition dune ligne de stock. Il faut ensuite cliquer sur "Transfert". La vue suivante est alors automatiquement renseigne. Il ne reste plus qu indiquer la destination, les quantits transfrer ainsi que la date du transfert. Il est ga- lement possible deffectuer un transfert directement en cliquant sur longlet transfert. Dans ce cas, aucun champ nest pralablement renseign. FIG. 3.7 Enregistrement dun transfert de stock Une fois tous les champs complts, le service denregistrement est lanc en cliquant sur "ajouter". Si aucune date na t saisie ou si cette date est antrieure la date actuelle, le transfert est effectu instantanment sinon, il est enregistr comme transfert planni dans la table des mouvements plannis. FIG. 3.8 Liste des transferts de stock plannis Depuis cette vue, le transfert peut tre "dit", "annul" ou "effectu". Lorsquil est effectu, Il est supprim de la table des mouvements plannis et enregistr dans la table des mouvements 38 3.7. FONCTIONNEMENT ACTUEL de stock. Par ailleurs, le stock dorigine est dcrment et une nouvelle ligne de stock est cre dans le magasin de destination. FIG. 3.9 Liste de toutes les lignes de stock 3.7.2 Outil dinventaire Linventaire se droule en trois tapes : cration ralisation(comptage,saisie,validation) clture. La cration se fait depuis la vue de recherche dun inventaire en cliquant sur "Cration". Une fois celui-ci cr, il apparait dans la liste des inventaires. Son statut est alors "Editing". FIG. 3.10 Vue de la liste des Inventaires Pour ajouter des lignes dinventaire, trois choix sont possibles : soit les lignes sont saisies une une depuis la vue ddition des lignes dinventaire, soit se sont les magasins qui sont 39 3.7. FONCTIONNEMENT ACTUEL ajouts linventaire (inventaire par emplacement), ou soit se sont les produits qui sont ajouts (inventaire par produit). FIG. 3.11 Vue ddition dun inventaire 40 3.7. FONCTIONNEMENT ACTUEL Si linventaire est par emplacement, chaque lment est ajout partir de la vue NInvento- ryItemFacility. Tous les emplacements contenus dans celui-ci sont ajouts automatiquement. FIG. 3.12 Ajout dun magasin un inventaire Une ligne dinventaire est cre pour chaque ligne de stock. FIG. 3.13 Vue de la liste des lignes dinventaire suite lajout dun magasin 41 3.7. FONCTIONNEMENT ACTUEL Si linventaire est par produit, chaque produit ncssitant un inventaire est ajout manuelle- ment partir de la vue ci-dessous. FIG. 3.14 Ajout dun produit dans un inventaire Pour chaque produit, une recherche est effectue sur lensemble des magasins an de trouver les lignes de stock correspondant ce produit. Une ligne dinventaire est cre pour chaque ligne de stock. FIG. 3.15 Vue de la liste des lignes dinventaire suite lajout dun produit un inventaire 42 3.7. FONCTIONNEMENT ACTUEL Une fois lensemble des lignes de stock cr, linventaire doit tre ralis. Ceci est fait depuis la vue ddition de linventaire en cliquant sur "raliser". Le statut de linventaire de- vient alors "perform" et le statut de toutes les lignes de stock passe automatiquement "count". An dviter tout mouvement sur les stocks, le statut des lignes de stock inventories devient "Inventory locked". Si linventaire est cr par emplacement, le statut des magasins en cours dinventaire devient galement "Inventory locked". FIG. 3.16 Vue ddition dun inventaire : ralisation de linventaire 43 3.7. FONCTIONNEMENT ACTUEL Au cours du comptage, une nouvelle ligne dinventaire peut tre ajoute. Ceci est utilis lorsquun stock non inventori est trouv. FIG. 3.17 Ajout dune ligne dinventaire en cours de comptage Une ligne dinventaire ainsi quune ligne de stock sont alors cres FIG. 3.18 Vue de la liste des lignes dinventaire aprs ajout dune ligne dinventaire 44 3.7. FONCTIONNEMENT ACTUEL Pour chaque ligne de stock, les quantits trouves sont saisies en cliquant sur "saisir". Plu- sieurs comptages sur une mme ligne peuvent tre saisis. FIG. 3.19 Vue de la liste des lignes dinventaire en cours de saisie Une fois les quantits saisies, chaque ligne de stock est valide. Cette opration compare le stock thorique au stock rel. Si un cart apparait, le stock thorique est ajust et un mouvement de stock est enregistr. FIG. 3.20 Vue de la ligne dinventaire aprs validation dune ligne 45 3.7. FONCTIONNEMENT ACTUEL Lorsque toutes les lignes dinventaire sont valides, linventaire est clos en cliquant sur "clturer" depuis la vue ddition. FIG. 3.21 Vue ddition dun inventaire aprs clture dun inventaire Seule les oprations de consulations sont alors disponibles FIG. 3.22 Vue de la liste des inventaires aprs clture 3.7.3 Amliorations fonctionnelles de la plannication des besoins 3.7.3.1 Plannication dune commande Cet exemple montre lintraction entre le composant Order de Ofbiz et le composant Facility de Neogia. Il illustre galement le regroupement dans une seule table de tous les mouvements plannis de stock. Pour cet exemple, deux produits sont commands. 46 3.7. FONCTIONNEMENT ACTUEL FIG. 3.23 Vue dune commande depuis le composant Order dOfbiz Suite lenregistrement de la commande, une rservation des deux produits est enregistre dans la table des mouvements plannis. FIG. 3.24 Liste des mouvements plannis de stock 47 3.8. AMNAGEMENT EN COURS ET AMLIORATIONS 3.8 Amnagement en cours et Amliorations Le composant de gestion de stock dvelopp au cours de ce stage est devenu fonctionnel. Toutefois, son intgration dans Ofbiz en remplacement de lactuel composant ne peut tre en- visage pour le moment, trois points restant travailler. En premier lieu, il reste naliser les interactions du composant de gestion de stock avec le composant Expdition dOfbiz. Actuel- lement, un diagramme UML et un diagramme fonctionnel ont t labors mais le code doit encore tre gnr et les services et mthodes ncessaires cette communication doivent tre crs. De mme, le fonctionnement gnral du composant doit tre encore travaill. En effet, bien quil apporte des amliorations fonctionnelles et architecturales, certaines fonctionnalits pr- sentes dans Ofbiz ne sont pas implmentes. On peut donc considrer que le composant a un niveau fonctionnel infrieur celui dOfbiz et il apparat ncessaire de naliser un ensemble doutils, concernant notamment la gestion des personnes et le rapprovisionnement. Enn, comme tout logiciel, il doit tre scuris et test. Bien que ces deux notions soient constamment prsentes lors du dveloppement du composant, il est important daccrotre la s- curit du code notamment par lutilisation dEECA ou dinterfaces graphiques dont lafchage est modi en fonction de valeurs. Une fois le composant intgr Ofbiz, diffrentes optimisations peuvent tre envisages, dont les principaux exemples peuvent tre donns comme suit : lajout doutils de reporting notamment pour les inventaires, la gestion des stocks et la planication des vnements ; le dveloppement de nouvelles vues amliorant lrgonomie de lIHM (vue hirarchique des magasins, afchage slectif des vnements planis . . .) ; lintgration de nouvelles rgles mtier pour linventaire et la gestion des stocks ; lintgration des vnements planis dans le worklow; 48 Conclusion Bilan du projet LERP Ofbiz est un logiciel trs complet proposant de nombreux composants mtier mais galement des composants techniques qui sont lis au framwork (entity Engine, Sevice Engine, Control Servlet . . .). Toutefois, cette richesse saccompagne dune complexit architec- turale difcile apprhender dans sa totalit. La cration dun composant constitue alors une tche dautant plus complexe. La gnration de code propose par la socit Code Lutin et utilise dans le projet Neogia, est une alternative trs intressante au dveloppement classique dun composant. Bien quil soit toujours ncessaire de consacrer un temps important pour la comprhension du logiciel, elle permet dautomatiser la gnration dlments de base, lesquels devront simplement tre paramtrs, facilitant ainsi une partie du travail du dveloppeur. Enn, elle oblige raliser un diagramme de classes qui donne une vision globale du composant. Cependant, ces remarques peuvent tre nuances. En effet, le temps de mise au point des gnrateurs assurant un code gnr exempt de bug est une phase trs longue. Pour ce projet, ce travail aura dur plus dun mois. Le temps disponible pour le codage de la partie mtier a ds lors t fortement rduit. Ainsi on peut considrer que pour le projet Neogia, le temps de dveloppement dun composant via les gnrateurs de code a t au moins gal au temps quil aurait t ncessaire de consacrer sans les gnrateurs de code. Cette vision, court terme, doit galement tre nuance. En effet, le temps ncessaire pour maintenir le code jour notamment aprs une volution du framework ou lors de lintgration de nouvelles fonctions de base sera fortement rduit. De mme, si un nouveau composant devait tre cr maintenant, son temps de dveloppement serait beaucoup plus court. Les gnrateurs de code sont donc des outils qui augmentent la productivit moyen et long terme. Ainsi, ils peuvent rpondre la problmatique des entreprises du logiciel libre qui doivent consacrer le moins de temps possible la partie basse du code au prot du code mtier. 49 3.8. AMNAGEMENT EN COURS ET AMLIORATIONS Bilan personnel Le stage ffectu au sein des socits Code Lutin et Nreide ma permis dintgrer deux entreprises travaillant dans le logiciel libre dont les orientations technologiques mont donn la possibilit de travailler sous le systme gnu/linux et plus gnralement dutiliser des logiciels Libres qui pour certains dentre eux mtaient jusqualors peu familiers. Par ailleurs, la ralisation du projet Neogia a t un travail de groupe avec laide de logiciels de partage de donnes (CVS, Subcersion, Jabber, . . .), ce qui a impos une certaine rigueur, acquise au l du projet. Enn, ayant travaill sur un ERP, ce stage aura t loccasion de faire le lien entre certaines connaissances acquises lors de mon exprience professionnelle prcdente dans le secteur de lindustrie agroalimentaire et des connaissances en informatique. 50 Annexe A Diagrammes UML 51 FIG. A.1 Organisation des magasins 52 FIG. A.2 Organisation de linventaire 53 FIG. A.3 Plannication des vnements sur les stocks 54 FIG. A.4 Relation entre les composants Facility et Manufacturing 55 FIG. A.5 Relation entre les composants Facility et Order 56 Annexe B Exemple de code B.1 Dntion de table NFacility pour lentity Engine : enti- tymodel.xml ... <entity entity-name="NFacility" package-name="org.ofbiz.facility.location"> <field name="idName" type="name"></field> <field name="locations" type="name"></field> <field name="parentFacilityIdName" type="name"></field> <field name="statusFacilityStatusId" type="id-ne"></field> <field name="nFacilityTypeEnumId" type="id-ne"></field> <prim-key field="idName"/> <relation type="many" title="childFacilities" rel-entity-name="NFacility"> <key-map field-name="idName" rel-field-name="parentFacilityIdName"/> </relation> <relation type="one-nofk" title="parentFacility" rel-entity-name="NFacility"> <key-map field-name="parentFacilityIdName" rel-field-name="idName"/> </relation> <relation type="one-nofk" rel-entity-name="StatusItem"> <key-map field-name="statusFacilityStatusId" rel-field-name="statusId"/> </relation> <relation type="one-nofk" rel-entity-name="Enumeration"> <key-map field-name="nFacilityTypeEnumId" rel-field-name="enumId"/> </relation> </entity> ... 57 B.2. DFINITION DUN CONTRLE : CONTROLE.XML B.2 Dnition dun contrle : controle.xml ... <request-map uri="EditNFacility"> <security https="true" auth="true"/> <event type="service" invoke="editNFacility"/> <response name="success" type="view" value="EditNFacility"/> <response name="error" type="view" value="EditNFacility"/> </request-map> ... B.3 Dnition dun service : services.xml ... <service name="editNFacility" default-entity-name="NFacility" engine="java" location="org.ofbiz.facility.location.generated.NFacilityServices" invoke="editNFacility" auth="true"> <description>Create or Update a NFacility</description> <auto-attributes include="all" mode="INOUT" optional="true"/> <attribute name="actionForm" type="String" mode="IN" optional="false"/> </service> ... <service name="addPlannedProductOrder" default-entity-name="OrderStockEventPlanned" engine="java" location="org.ofbiz.facility.stockevent.developed.OrderStockEventPlannedServices" invoke="addPlannedProductOrder" auth="true"> <description>Create a OrderStockEventPlanned. You can specifie the Facility or the StockItem</description> <auto-attributes include="all" mode="INOUT" optional="true"/> <attribute name="productStoreId" type="String" mode="IN" optional="true"/> <attribute name="productProductId" type="String" mode="IN" optional="true"/> <attribute name="quantity" type="Double" mode="IN" optional="true"/> <attribute name="releaseDate" type="Timestamp" mode="IN" optional="true"/> <attribute name="stockItemIdName" type="String" mode="IN" optional="true"/> <attribute name="quantityNotReserved" type="Double" mode="OUT" optional="true"/> </service> ... 58 B.4. EXEMPLE DE GETTEUR ET DE SETTEUR IMPLMENT DANS LES CLASSES DE BASE : NFACILITYBASE.JAVA B.4 Exemple de getteur et de setteur implment dans les classes de base : NFacilityBase.java ... public String getLocations(){ if (exist ) return ((String) nFacility.get("locations")); return null; } public void setLocations(String _locations ){ if (exist ) if ( _locations != null ) nFacility.set("locations", _locations); else if ( nFacility.get("locations") != null) nFacility.set("locations", null); return; } ... B.5 Exemple de code dvelopp dans une classe : NFacility.java ... /** * Find all sub-child * @param nFacility: Facility in which you want to find sub-child */ protected void FindChild(NFacility nFacility){ List listNFacilityChild = new ArrayList(); Map map = new HashMap(); NFacility locNFacility = null; listNFacilityChild =NFacilityQuery.findByAnd(nFacility.getIdName()); for (int i= 0; i< listNFacilityChild.size();i++){ this.childList.add(listNFacilityChild.get(i)); map = (Map)listNFacilityChild.get(i); String NFacilityIdName = (String)map.get("idName"); locNFacility= new NFacility(locDelegator,NFacilityIdName); this.FindChild(locNFacility); } } /** * Find all sub-child Facility * @return List of all sub-child NFacility */ public List FindAllChild(){ this.FindChild(this); return this.childList; } ... 59 B.6. EXEMPLE DE MTHODE STATIQUE DINTROGATION DE LA BASE DE DONNES VIA LENTITY ENGINE : STOCKEVENTPLANNEDQUERRY.JAVA B.6 Exemple de mthode statique dintrogation de la base de donnes via lEntity Engine : StockEventPlannedQuerry.java ... public static List findByAnd(String productProductId, String nFacilityIdName){ try{ return new ArrayList(delegator.findByAnd("StockEventPlanned",UtilMisc.toMap("productProductId", productProductId, "nFacilityIdName",nFacilityIdName))); } catch(GenericEntityException e){ Debug.logError("findByAnd in StockEventPlannedQuery :" + e.getMessage(), module); return null; } } public static List findByAnd(String productProductId, EntityComparisonOperator productEntityOperator, Date releaseDate, EntityComparisonOperator releaseDateOperator ){ try{ return new ArrayList(delegator.findByAnd("StockEventPlanned",UtilMisc.toList(new EntityExpr("productProductId", productEntityOperator , productProductId) , new EntityExpr("releaseDate", releaseDateOperator, releaseDate)))); } catch(GenericEntityException e){ Debug.logError("findByAnd in StockEventPlannedQuery :" + e.getMessage(), module); return null; } } ... 60 B.7. DFINITION DUNE PAGE : EDITASSOCINVENTORY.XML B.7 Dnition dune page : EditAssocInventory.xml ... <?xml version="1.0" encoding="UTF-8"?> <page> <template>main</template> <property name="titleProperty">FacilityEditAssocInventory</property> <property name="headerItem">inventory</property> <property name="subMenu">/inventory/developed/TabBarPhysicalInventory.ftl</property> <property name="tabButtonItemProduct">product</property> <property name="tabButtonItemNInventoryItem">nInventoryItem</property> <property name="tabButtonItemRoleType">roleType</property> <property name="tabButtonItemStatusInventory">statusInventory</property> <property name="tabButtonItemNFacility">nFacility</property> <property name="singleFormName">subEditInventoryFacilityInventory</property> <property name="viewSize">20</property> <property name="permission">FACILITY</property> <property name="entityOperation">_UPDATE</property> <property name="permissionType">simple</property> <property name="formDefFileSubEditNInventoryItem">/inventory/developed/FormsNInventoryItem.xml</property> <property name="formDefFileSubListNInventoryItem">/inventory/developed/FormsNInventoryItem.xml</property> <property name="formDefFileSubListInventoryFacility">/inventory/developed/FormsInventoryFacility.xml</property> <property name="formDefFileSubEditInventoryFacility">/inventory/developed/FormsInventoryFacility.xml</property> <property name="formDefFileSubListInventoryProduct">/inventory/developed/FormsInventoryProduct.xml</property> <property name="formDefFileSubEditInventoryProduct">/inventory/developed/FormsInventoryProduct.xml</property> <content-action name="/includes/checkPermission.bsh"/> <content-action name="/inventory/developed/EditAssocInventory.bsh"/> <content-action name="/includes/pagelistprep.bsh"/> <!-- <content-action name="/stockevent/developed/facilityInventory.bsh"/>--> </page> ... 61 B.7. DFINITION DUNE PAGE : EDITASSOCINVENTORY.XML 62 B.8. DFINITION DUNE VUE UTILISANT LAFFICHAGE CONDITIONNEL (USE-WHEN) : NINVENTORYITEM.XML B.8 Dnition dune vue utilisant lafchage conditionnel (use- when) : NInventoryItem.xml ... <form name="subEditNInventoryItemInventory" type="single" target="EditNInventoryItemInventory" title="" default-map-name="formsData" default-title-style="tableheadtext" default-widget-style="tabletext" default-tooltip-style="tabletext" > <alt-target use-when="formsData.get("statusInventoryStatusId").equals("S_INV_PERFORM") && !actionForm.equals("input")" target="AddNInventoryItemWhenPerform"/> <field name="actionForm" use-when="!"${actionForm}".equals("add")"><hidden value="commit${actionForm}"/></field> <field name="actionForm" use-when=""${actionForm}".equals("add") && ("${siiStatusId}".equals("S_INV_ITEM_COUNT") || "${siiStatusId}" .equals("S_INV_ITEM_RECOUNT"))"><hidden value="commitedit"/></field> <field name="actionForm" use-when=""${actionForm}".equals("add") && !"${siiStatusId}".equals("S_INV_ITEM_COUNT") && !"${siiStatusId}" .equals("S_INV_ITEM_RECOUNT")"><hidden value="commitadd"/></field> <field name="association"><hidden value="${association}"/></field> <field name="idName" title="${uiLabelMap.FacilityIdName}" use-when="${isAdd}!=null"><hidden/></field> <field name="idName" title="${uiLabelMap.FacilityIdName}" use-when="${isAdd}==null"><display/></field> <field name="facility" title="${uiLabelMap.FacilityFacility}" use-when="${isAdd}==null || "${actionForm}".equals("input")" ><display/></field> <field name="facility" title="${uiLabelMap.FacilityFacility}" use-when=""${actionForm}& quot;.equals("add") && "${formsData.statusInventoryStatusId}" .equals("S_INV_PERFORM")"><text/></field> <field name="facility" title="${uiLabelMap.FacilityFacility}" use-when=""${actionForm}" .equals("add") && "${formsData.statusInventoryStatusId}" .equals("S_INV_PERFORM")"> <lookup target-form-name="LookupFacility"/> </field> <field name="countNum" title="${uiLabelMap.FacilityCountNum}" use-when="${isAdd}==null || "${actionForm}".equals("input")"> <display/> </field> <field name="facilityStockEventIdName" title="${uiLabelMap.FacilityFacilityStockEventIdName}"> <hidden/> </field> <field name="facilityStockEventDescription" title="${uiLabelMap.FacilityDescription}" use-when="${isAdd}==null"><display/></field> <field name="stockItemIdName" title="${uiLabelMap.FacilityStockItemIdName}" use-when="${isAdd}==null || "${actionForm}".equals("input")"><display/></field> <field name="stockItemIdName" title="${uiLabelMap.FacilityStockItemIdName}" use-when="${isAdd}!=null && !"${actionForm}".equals("input") && !"${formsData.statusInventoryStatusId}".equals("S_INV_PERFORM")"><text/></field> <field name="statusInventoryItemStatusId" title="${uiLabelMap.FacilityStatusInventoryItemStatusId}" use-when="${isAdd}==null"> <display/> </field> <field name="product" title="${uiLabelMap.FacilityProduct}" use-when=""${actionForm}" .equals("input") || (${isAdd}!=null && "${formsData.statusInventoryStatusId} ".equals("S_INV_PERFORM"))"><text description="${product}"/></field> <field name="product" title="${uiLabelMap.FacilityProduct}" use-when=""${actionForm}" .equals("input") || (${isAdd}!=null && "${formsData.statusInventoryStatusId} ".equals("S_INV_PERFORM"))"> <lookup target-form-name="LookupProduct"/> </field> <field name="inputDate" title="${uiLabelMap.FacilityInputDate}" use-when=""${actionForm}" .equals("input") || (${isAdd}!=null && "${formsData.statusInventoryStatusId}" .equals("S_INV_PERFORM"))"><date-time/></field> <field name="submitButton" title="${uiLabelButton}" widget-style="smallSubmit" > <submit button-type="button"/></field> </form> ... 63 B.9. DFINITION DES LABES UTILISS DANS LINTERFACE GRAPHIQUE : FACILITYUILABELS.PROPERTIES B.9 Dnition des labes utiliss dans linterface graphique : FacilityUiLabels.properties ... # Facility Main Title FacilityFacility=Facility FacilityStock=Stock FacilityShipment=Shipment FacilityTransfert=Transfert FacilityReceipt= Receipt FacilityReturn=Return FacilityPhysicalInventory=Physical Inventory FacilityCalendar=Calendar FacilityAllMovement=All Movement ... 64 Annexe C Vue standard vs vue modife 65 FIG. C.1 vue standard FIG. C.2 vue modie en fonction du status des lignes dinventaire 66