You are on page 1of 76

Universit Franois RABELAIS Facult Des Sciences Et Techniques - DESS Comptence Complmentaire En Informatique Parc de Grandmont 37200 T OURS

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 : Cdric P INEAU Maitre de Stage : Olivier H EINTZ Socit Nride

Mai - Septembre 2004 P IERRE G AUDIN DESS CCI Tours promotion 2004

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 particulirement 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.

Table des matires


Remerciements 1 Prsentation Gnrale 1.1 Problmatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Les ERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1.1 1.1.1.2 1.1.1.3 1.1.2 1.2 1.2.1 1.2.2 1.2.3 1.3 2 Cadre du stage Dnition dun ERP . . . . . . . . . . . . . . . . . . . . . . Les diffrents acteurs du march . . . . . . . . . . . . . . . La nouvelle donne des ERP libres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i 1 1 1 1 2 3 4 6 6 6 6 7 8 8 8 8 9 10 10 13 13 13

Les enjeux de la Gnration de code . . . . . . . . . . . . . . . . . . . La socit Code Lutin . . . . . . . . . . . . . . . . . . . . . . . . . . Le rseau Libre Entreprise . . . . . . . . . . . . . . . . . . . . . . . La socit Nride . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Objectifs du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Prsentation du logiciel Ofbiz et du projet Neogia 2.1 lERP Ofbiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 2.1.2 Prsentation Gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2.1 2.1.2.2 2.1.2.3 2.2 2.2.1 2.2.2 LEntity Engine . . . . . . . . . . . . . . . . . . . . . . . . Le Service Engine . . . . . . . . . . . . . . . . . . . . . . . Le ControlServlet . . . . . . . . . . . . . . . . . . . . . . .

le projet Neogia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prsentation Gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . Objectifs dtaills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii

TABLE DES MATIRES 2.2.3 2.2.4 3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Processus dintgration des composants Nogia dans Ofbiz . . . . . . 14 16 18 18 19 19 19 20 20 20 21 23 23 23 23 24 25 26 26 27 28 30 30 30 31 32 32 32

Dveloppement du composant gestion des Stocks 3.1 3.2 Droulement du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outils et bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 3.2.3 Eclipse1 : Un EDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . Poseidon2 : Le logiciel de modlisation . . . . . . . . . . . . . . . . . Les logiciels de constructions de projets . . . . . . . . . . . . . . . . . 3.2.3.1 3.2.3.2 3.2.4 3.3 3.3.1 3.3.2 Ant3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Maven4

CVS5 : un logiciel dchange de donnes . . . . . . . . . . . . . . . . Etat des lieux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analyse des besoins . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2.1 3.3.2.2 3.3.2.3 Modication de lorganisation des magasins . . . . . . . . . Dveloppement dun outil dinventaire . . . . . . . . . . . . Amliorations fonctionnelles de la plannication des besoins

Fonctionnement avant mise en place . . . . . . . . . . . . . . . . . . . . . . .

3.4

Modlisation UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 3.4.2 3.4.3 Lentit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lattribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lassociation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . les gnrateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Organisation des chiers gnrs . . . . . . . . . . . . . . . . . . . . . Rle des chiers gnrs . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.3.1 3.5.3.2 3.5.3.3 Interface graphique . . . . . . . . . . . . . . . . . . . . . . Dnition des tables de la base de donnes . . . . . . . . . . Classes java . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5

Gnration de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 3.5.2 3.5.3

1 http 2 http

://www.eclipse.org/ ://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 3.5.4 3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7 3.7.1

Contrles et Services . . . . . . . . . . . . . . . . . . . . .

33 33 34 34 34 34 34 34 35 35 35 36 36 36 38 39 46 46 48 49

Intgration des chiers gnrs au composant . . . . . . . . . . . . . . Linterface Graphique . . . . . . . . . . . . . . . . . . . . . . . . . . Les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les Scripts BeanShell . . . . . . . . . . . . . . . . . . . . . . . . . . Les requtes sur lEntity Engine . . . . . . . . . . . . . . . . . . . . . Architecture des magasins . . . . . . . . . . . . . . . . . . . . . . . . Inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Centralisation des vnements planis . . . . . . . . . . . . . . . . . Modication de lorganisation des magasins . . . . . . . . . . . . . . . 3.7.1.1 3.7.1.2 Ajout dune ligne de stock . . . . . . . . . . . . . . . . . . . Transfert de Stock . . . . . . . . . . . . . . . . . . . . . . .

Programmation du code mtier . . . . . . . . . . . . . . . . . . . . . . . . . .

Fonctionnement actuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.7.2 3.7.3 3.8

Outil dinventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Amliorations fonctionnelles de la plannication des besoins . . . . . . 3.7.3.1 Plannication dune commande . . . . . . . . . . . . . . . .

Amnagement en cours et Amliorations . . . . . . . . . . . . . . . . . . . . .

Conclusion Bilan du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bilan personnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Annexes A Diagrammes UML B Exemple de code B.1 Dntion de table NFacility pour lentity Engine : entitymodel.xml . . . . . . B.2 Dnition dun contrle : controle.xml . . . . . . . . . . . . . . . . . . . . . . B.3 Dnition dun service : services.xml . . . . . . . . . . . . . . . . . . . . . . B.4 Exemple de getteur et de setteur implment dans les classes de base : NFacilityBase.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv

49 50 51 51 57 57 58 58 59

TABLE DES MATIRES

B.5 Exemple de code dvelopp dans une classe : NFacility.java . . . . . . . . . . B.6 Exemple de mthode statique dintrogation de la base de donnes via lEntity Engine : StockEventPlannedQuerry.java . . . . . . . . . . . . . . . . . . . . . B.7 Dnition dune page : EditAssocInventory.xml . . . . . . . . . . . . . . . . . B.8 Dnition dune vue utilisant lafchage conditionnel (use-when) : NInventoryItem.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59 60 61 63

B.9 Dnition des labes utiliss dans linterface graphique : FacilityUiLabels.properties 64 C Vue standard vs vue modife 65

Liste des tableaux


1.1 2.1 3.1 3.2 Les principaux ERP Open Source du march 6 . . . . . . . . . . . . . . . . . . Moteurs de rendu du ControlServlet . . . . . . . . . . . . . . . . . . . . . . . Tags utiliss pour le paramtrage des entits . . . . . . . . . . . . . . . . . . . Tags utiliss pour le paramtrage des attributs . . . . . . . . . . . . . . . . . . 4 11 27 28

6 sources

:JDN 23/07/2004

vi

Table des gures


1.1 1.2 2.1 2.2 2.3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Organisation dun ERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rpartition des parts de march en 2002 . . . . . . . . . . . . . . . . . . . . . Architecture dOfbiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Organisation du projet Neogia . . . . . . . . . . . . . . . . . . . . . . . . . . Organisation dun composant Neogia . . . . . . . . . . . . . . . . . . . . . . . Exemple dorganisation de la hirarchie des emplacements de stockage . . . . Diagramme de classe reprsentant larchitecture du facility . . . . . . . . . . . Organisation du code gnr . . . . . . . . . . . . . . . . . . . . . . . . . . . Liste de tous les magasins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajout dune ligne de stock depuis un magasin . . . . . . . . . . . . . . . . . . Liste de toutes les lignes de stock . . . . . . . . . . . . . . . . . . . . . . . . . Enregistrement dun transfert de stock . . . . . . . . . . . . . . . . . . . . . . Liste des transferts de stock plannis . . . . . . . . . . . . . . . . . . . . . . Liste de toutes les lignes de stock . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 9 15 16 24 26 31 36 37 37 38 38 39 39 40 41 41 42 42 43 44 44

3.10 Vue de la liste des Inventaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 Vue ddition dun inventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 Ajout dun magasin un inventaire . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Vue de la liste des lignes dinventaire suite lajout dun magasin . . . . . . . 3.14 Ajout dun produit dans un inventaire . . . . . . . . . . . . . . . . . . . . . . 3.15 Vue de la liste des lignes dinventaire suite lajout dun produit un inventaire 3.16 Vue ddition dun inventaire : ralisation de linventaire . . . . . . . . . . . . 3.17 Ajout dune ligne dinventaire en cours de comptage . . . . . . . . . . . . . . 3.18 Vue de la liste des lignes dinventaire aprs ajout dune ligne dinventaire . . . vii

TABLE DES FIGURES

3.19 Vue de la liste des lignes dinventaire en cours de saisie . . . . . . . . . . . . . 3.20 Vue de la ligne dinventaire aprs validation dune ligne . . . . . . . . . . . . . 3.21 Vue ddition dun inventaire aprs clture dun inventaire . . . . . . . . . . . 3.22 Vue de la liste des inventaires aprs clture . . . . . . . . . . . . . . . . . . . 3.23 Vue dune commande depuis le composant Order dOfbiz . . . . . . . . . . . . 3.24 Liste des mouvements plannis de stock . . . . . . . . . . . . . . . . . . . . A.1 Organisation des magasins . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Organisation de linventaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Plannication des vnements sur les stocks . . . . . . . . . . . . . . . . . . . A.4 Relation entre les composants Facility et Manufacturing . . . . . . . . . . . . . A.5 Relation entre les composants Facility et Order . . . . . . . . . . . . . . . . . C.1 vue standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.2 vue modie en fonction du status des lignes dinventaire . . . . . . . . . . . .

45 45 46 46 47 47 52 53 54 55 56 66 66

viii

ix

Chapitre 1 Prsentation Gnrale


1.1
1.1.1
1.1.1.1

Problmatiques
Les ERP
Dnition dun ERP

LERP1 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. PROBLMATIQUES

F IG . 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 20022 :
2 source

IDC

1.1. PROBLMATIQUES

F IG . 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 rcente3 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

1.1. PROBLMATIQUES

Nom Origine Aria Nola Compiere Jorg Janke

Licence GPL Mozilla Public Licence GPL

Environnement PHP, MySQL J2EE, JBoss

ERP5

Nexedi

Python, Zope

Fisterra

Igalia

GPL

OFBiz (Open For Business) PGI Suite Value Enterprise

David MIT E. Jones + Andy Zeneski Taka GPL Emryn GPL

GNOME2 development platform, PostgreSQL XML, J2EE

Fonctionnalits Comptabilit, inventaire, paie. Gestion des ventes, gestion des catalogues, des tarifs, suivi des commandes, gestion des achats, des stocks, de la logistique, gestion comptable et nancire Gestion de production, gestion nancire, CRM, chane logistique, e-business, groupware Gestion dentrepts, des stocks, de trsorerie, facturation.

Gestion clients, fournisseurs, employs, gestion des articles, des stocks, des commandes, gestion de projet, e-commerce Gestion nancire, des achats, gestion commerciale, des ventes et des stocks. Comptabilit, gestion de production, CRM .

Linux, Apache, MySQL, PHP Delphi/Kylix, Java

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.

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 fonctionnalits. LAbstraction : elle doit permettre lvolution du code gnr notamment lors du changement de technologie de la plateforme.

1.2. CADRE DU STAGE

1.2
1.2.1

Cadre du stage
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 technologies java et xml.

1.2.2

Le rseau Libre Entreprise

La socit Code Lutin fait partie du rseau Libre -entreprise . Il sagit dun regroupement 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 complte possible de lenvironnement libre. Par ailleurs il existe un laboratoire dnomm labs.libre-entreprise.org qui met la disposition de la communaut du logiciel libre un ensemble de ressources sous licences libres (outils de dveloppement, bibliothques sous licence GPL, logiciels complets sous licences GPL, documentations, supports de cours et articles de fond sous licence FDL). Il hberge actuellement 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.

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

Chapitre 2 Prsentation du logiciel Ofbiz et du projet Neogia


2.1
2.1.1

lERP Ofbiz
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 dentreprise (service, industrie, commerce...).

2.1.2

Architecture

Ofbiz est une application java client-serveur compatible avec la spcication J2EE dnissant 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.

F IG . 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 applications diverses. Ce framework repose sur trois composants essentiels sans lesquels une application standard ne pourrait pas fonctionner : lEntity Engine, le Service Engine et le ControlServlet. 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 EECA1 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 composants 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 applications 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 lapplication. 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 JSP JPublish + FreeMarker

FOP + FreeMarker JasperReport

Description Les Java Server Pages permettent de gnrer des pages HTML dynamiquement. JPublish permet de construire une page HTML partir de plusieurs 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 est un processeur XSL qui transforme un document XML trait avec FreeMarker en un document HTML ou PDF. JasperReport permet de raliser trs facilement des rapports partir 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 envoie 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 souslments 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
2.2.1

le projet Neogia
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 MRP2 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 mouvements, 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 nouvelles 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 gnration 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 diffrents types de composant noncs au chapitre 2.2.2. Il existe en plus deux dossiers comportant 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

F IG . 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.

F IG . 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 composants 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 droulement 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 EDI1 : 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

Eclipse2 : Un EDI

Eclipse a t cre par la socit IBM, laquelle a, part la suite, cde le code la communaut an quelle poursuive son dveloppement. Son but est de fournir une plate-forme modulaire pour permettre des dveloppements informatiques, 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 dveloppement. Dans le cadre du projet Neogia, Eclipse est utilis comme EDI an de dvelopper lensemble des composants intgrs cet EDI.

3.2.2

Poseidon3 : 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 Edition 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 2 http

Development Environment ://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 Ant5

Ant est un projet du groupe Apache-Jakarta crit en java. Son but est dautomatiser les oprations 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 fonctionner 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 ensemble 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 projet : 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 Maven6

Maven est dvelopp par le groupe Apache-Jakarta. Cet outil permet galement dautomatiser la gestion de projets Java. Il offre les fonctionnalits de compilation et de dploiement
5 http 6 http

://ant.apache.org/ ://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

CVS7 : 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 dveloppement. 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 cvs update cvs commit

cvs add cvs remove

rapatrie lensemble des chiers dun module contenu sur le serveur vers lordinateur local mise jour des chiers locaux partir de versions situes sur le serveur intgre les modications dun chier en local sur le serveur avec vrication pralable des conits et attribution dun numro de version ajoute un chier en local. Il est ncessaire de mettre jour le serveur en utilisant la commande cvs commit 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 loptimisation 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
3.3.1

Fonctionnement avant mise en place


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 permettant 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 rorganisation 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 ncessaire 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

F IG . 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 compar 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 lensemble 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 produit. 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.

F IG . 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 shortName

Signication 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 gnre. 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 enregistrement dune entit. show gnre la transaction Show qui permet depuis une transaction List dafcher les donnes du champ associ. showList gnre la transaction ShowList qui permet depuis une transaction 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 saisie de donnes. drop-down indique que lentit apparat dans un drop-down pour les associations. Ceci est utilis notamment pour lafchage des statuts ou des numrations dd-descriptionOnly indique que dans les drop-down, seule la description est afche defaultValue afche pour les numrations et les statusitem ou toute autre association une valeur par dfaut dans le drop-down. Ce tag est utilis lorsque un tag identique nest pas dni sur lassociation. TAB . 3.1 Tags utiliss pour le paramtrage des entits

Valeur "texte"

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 readonly primaryKey true/ false ofbizEntityType staticValue defaultValue value Signication spcie que la valeur de cet attribut ne sera pas modiable indique que cet attribut sera une cl primaire. indique un type dni dans Ofbiz. dnie la valeur dun attribut comme static et nal . spcie pour le type booelan la valeur par dfaut (true ou false) dans un drop-down 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. insre une valeur en diffrents langages. Ceci gnre une icne an dentrer les diffrentes valeurs selon le langage 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] description 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

i18n gui

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 extrmit. 28

3.4. MODLISATION UML

associations classe dassociation agrgation composition

relation entre deux entits lorsque la cardinalit est * , * une classe est cre montre lappartenance, la destruction du tout se propage a ces parties 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
3.5.1

Gnration de code
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 automatiquement 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

F IG . 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 regrouper 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 list<Entity>.ftl editAssoc<Entiy>.ftl show<Entity>.ftl cran ddition dun enregistrement dune entit cran dafchage sous forme de liste du contenu dune entit cran de visualisation des entits associes une ligne denregistrement 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 find<Entity>.bsh editAssoc<Entity>.bsh script de rcupration des donnes pour lafchage dune interface graphique de type edit script de rcupration des donnes pour lafchage dune interface graphique de type liste suite une recherche 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 entitygroup.xml dnition des entits pour lentity engine 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 classe hritant dun <entity>Baseet implmentant les constructeurs de lobjet. Cest partir de ces chiers quest dveloppe une partie de la couche mtier

<entity>G.java

(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 dnitions des services de base. Les dnitions de ce chier sont recopies dans le chier service.xml implmentation des services de base de contrle de transaction depuis une interface visuelle

servicedefG.xml <entity>Service.java

(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 dveloppeur dajouter du code. Le paramtrage de certains chiers xml permet dactiver les fonctions 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 service standard. ajout de nouveaux services java permettant un traitement non standard des donnes, appels 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 mthodes fournies par lentity Engine (cf annexe B.6). Voici prsentes ci-dessous les principales modications effectues pour chaque partie du composant 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 gestion 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 services 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 modication 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 utilis an de dcrire le fonctionnement des diffrents composants. Ainsi, lintgration des composants 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
3.7.1

Fonctionnement actuel
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.

F IG . 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 renseigns, lajout de la ligne de stock se fait en cliquant sur "Ajouter".

36

3.7. FONCTIONNEMENT ACTUEL

F IG . 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".

F IG . 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 galement possible deffectuer un transfert directement en cliquant sur longlet transfert. Dans ce cas, aucun champ nest pralablement renseign.

F IG . 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.

F IG . 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.

F IG . 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".

F IG . 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).

F IG . 3.11 Vue ddition dun inventaire

40

3.7. FONCTIONNEMENT ACTUEL

Si linventaire est par emplacement, chaque lment est ajout partir de la vue NInventoryItemFacility. Tous les emplacements contenus dans celui-ci sont ajouts automatiquement.

F IG . 3.12 Ajout dun magasin un inventaire

Une ligne dinventaire est cre pour chaque ligne de stock.

F IG . 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 manuellement partir de la vue ci-dessous.

F IG . 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.

F IG . 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 devient 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".

F IG . 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.

F IG . 3.17 Ajout dune ligne dinventaire en cours de comptage

Une ligne dinventaire ainsi quune ligne de stock sont alors cres

F IG . 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". Plusieurs comptages sur une mme ligne peuvent tre saisis.

F IG . 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.

F IG . 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.

F IG . 3.21 Vue ddition dun inventaire aprs clture dun inventaire

Seule les oprations de consulations sont alors disponibles

F IG . 3.22 Vue de la liste des inventaires aprs clture

3.7.3
3.7.3.1

Amliorations fonctionnelles de la plannication des besoins


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

F IG . 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.

F IG . 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 envisage 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. Actuellement, 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 prsentes 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 scurit 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 architecturale 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

52

F IG . A.2 Organisation de linventaire 53

F IG . A.3 Plannication des vnements sur les stocks

54

F IG . A.4 Relation entre les composants Facility et Manufacturing

55

F IG . A.5 Relation entre les composants Facility et Order

56

Annexe B Exemple de code


B.1 Dntion de table NFacility pour lentity Engine : entitymodel.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 (usewhen) : 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(&quot;statusInventoryStatusId&quot;).equals(&quot;S_INV_PERFORM&quot;) &amp;&amp; !actionForm.equals(&quot;input&quot;)" target="AddNInventoryItemWhenPerform"/> <field name="actionForm" use-when="!&quot;${actionForm}&quot;.equals(&quot;add&quot;)"><hidden value="commit${actionForm}"/></field> <field name="actionForm" use-when="&quot;${actionForm}&quot;.equals(&quot;add&quot;) &amp;&amp; (&quot;${siiStatusId}&quot;.equals(&quot;S_INV_ITEM_COUNT&quot;) || &quot;${siiStatusId}&quot; .equals(&quot;S_INV_ITEM_RECOUNT&quot;))"><hidden value="commitedit"/></field> <field name="actionForm" use-when="&quot;${actionForm}&quot;.equals(&quot;add&quot;) &amp;&amp; !&quot;${siiStatusId}&quot;.equals(&quot;S_INV_ITEM_COUNT&quot;) &amp;&amp; !&quot;${siiStatusId}&quot; .equals(&quot;S_INV_ITEM_RECOUNT&quot;)"><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 || &quot;${actionForm}&quot;.equals(&quot;input&quot;)" ><display/></field> <field name="facility" title="${uiLabelMap.FacilityFacility}" use-when="&quot;${actionForm}& quot;.equals(&quot;add&quot;) &amp;&amp; &quot;${formsData.statusInventoryStatusId}&quot; .equals(&quot;S_INV_PERFORM&quot;)"><text/></field> <field name="facility" title="${uiLabelMap.FacilityFacility}" use-when="&quot;${actionForm}&quot; .equals(&quot;add&quot;) &amp;&amp; &quot;${formsData.statusInventoryStatusId}&quot; .equals(&quot;S_INV_PERFORM&quot;)"> <lookup target-form-name="LookupFacility"/> </field> <field name="countNum" title="${uiLabelMap.FacilityCountNum}" use-when="${isAdd}==null || &quot;${actionForm}&quot;.equals(&quot;input&quot;)"> <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 || &quot;${actionForm}&quot;.equals(&quot;input&quot;)"><display/></field> <field name="stockItemIdName" title="${uiLabelMap.FacilityStockItemIdName}" use-when="${isAdd}!=null &amp;&amp; !&quot;${actionForm}&quot;.equals(&quot;input&quot;) &amp;&amp; !&quot;${formsData.statusInventoryStatusId}&quot;.equals(&quot;S_INV_PERFORM&quot;)"><text/></field> <field name="statusInventoryItemStatusId" title="${uiLabelMap.FacilityStatusInventoryItemStatusId}" use-when="${isAdd}==null"> <display/> </field> <field name="product" title="${uiLabelMap.FacilityProduct}" use-when="&quot;${actionForm}&quot; .equals(&quot;input&quot;) || (${isAdd}!=null &amp;&amp; &quot;${formsData.statusInventoryStatusId} &quot;.equals(&quot;S_INV_PERFORM&quot;))"><text description="${product}"/></field> <field name="product" title="${uiLabelMap.FacilityProduct}" use-when="&quot;${actionForm}&quot; .equals(&quot;input&quot;) || (${isAdd}!=null &amp;&amp; &quot;${formsData.statusInventoryStatusId} &quot;.equals(&quot;S_INV_PERFORM&quot;))"> <lookup target-form-name="LookupProduct"/> </field> <field name="inputDate" title="${uiLabelMap.FacilityInputDate}" use-when="&quot;${actionForm}&quot; .equals(&quot;input&quot;) || (${isAdd}!=null &amp;&amp; &quot;${formsData.statusInventoryStatusId}&quot; .equals(&quot;S_INV_PERFORM&quot;))"><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

F IG . C.1 vue standard

F IG . C.2 vue modie en fonction du status des lignes dinventaire

66

You might also like