Vous êtes sur la page 1sur 21

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report

par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)
Date de publication : 24 juin 2009 Dernire mise jour :

Cet article traite d'un exemple de dveloppement GED Alfresco: modlisation de contenu et utilisation de jasper report. Il s'adresse aux dveloppeurs java de projet GED/ECM base d'Alfresco. Vos ractions par l'intermdiaire de ce fil:

I - INTRODUCTION..................................................................................................................................................... 3 II - ETUDE DE CAS: SPECIFICATIONS FONCTIONNELLES DE L'EXEMPLE........................................................ 3 III - MODELISATION DE CONTENU DANS ALFRESCO...........................................................................................3 III-1 - Modle de donnes......................................................................................................................................3 III-2 - Modlisation du contenu Alfresco................................................................................................................ 3 III-2-1 - Petit rappel sur le dictionnaire de donnes Alfresco........................................................................... 3 III-2-2 - Modle M2 de notre projet : productModel.xml................................................................................... 4 III-2-3 - Internationalisation I18N relative au modle M2 (productModel.xml).................................................. 6 III-2-4 - Enregistrement du modle M2 (productModel.xml) et des bundles d'internationalisation i18n............7 IV - CONFIGURATION DU CLIENT WEB DANS ALFRESCO...................................................................................7 IV-1 - Configuration du client web......................................................................................................................... 7 IV-1-1 - Sous section de dfinition des actions................................................................................................8 IV-1-2 - Sous section de dfinition des menus................................................................................................ 9 IV-1-3 - Section de dfinition du Dialog......................................................................................................... 10 IV-2 - Dialog Alfresco - Formulaire de saisie.......................................................................................................10 IV-2-1 - Design de la JSP.............................................................................................................................. 10 IV-2-2 - Externalisation et internationalisation des labels de la JSP..............................................................10 IV-2-3 - Ecriture du code du Bean Manag................................................................................................... 10 IV-2-4 - Configuration JSF du Bean Manag.................................................................................................11 V - UTILISATION DE JASPER REPORT..................................................................................................................11 V-1 - Gnration du document PDF avec Jasper Report et enregistrement.......................................................11 V-1-1 - Cration du template jasper de la fiche du produit............................................................................ 11 V-1-2 - Compilation du template jasper report............................................................................................... 13 V-1-3 - Utilisation du template dans le projet et gnration du PDF..............................................................13 VI - COMPILATION ET DEPLOIEMENT DU PROJET............................................................................................. 14 VI-1 - Import de l'extension dans le SDK Alfresco.............................................................................................. 14 VI-2 - Construction du WAR................................................................................................................................ 15 VI-3 - Dploiement sur un Web Container.......................................................................................................... 15 VII - EXECUTION: CREATION, RECHERCHE FULL-TEXT, MODIFICATION, VERSIONNING.............................. 15 VII-1 - Cration d'une fiche produit......................................................................................................................16 VII-2 - Modification et versionnage d'une fiche produit....................................................................................... 19 VII-3 - Historique des versions d'une fiche produit..............................................................................................19 VII-4 - Recherche d'une fiche produit : 'recherche full-text'................................................................................. 19 VIII - TELECHARGEMENT CODE SOURCE DU PROJET......................................................................................21

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-2-

I - INTRODUCTION

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Le Centre de Comptences Alfresco-jBPM de Koossery Technology publie travers cet article un tutorial traitant: - de la modlisation de contenus dans Alfresco - de l'utilisation de Jasper Report pour la production de documents au format PDF qui sont par la suite stocks dans le Repository Alfresco. - enfin de l'archivage, de la recherche full-text, du versionning et de l'historisation des documents PDF stocks.

II - ETUDE DE CAS: SPECIFICATIONS FONCTIONNELLES DE L'EXEMPLE


Soit une entreprise qui souhaite archiver les fiches contenant des informations sur les produits dans un systme de GED (gestion lectronique de document). Pour cela les tapes sont les suivantes: - le systme de GED doit prsenter un formulaire de saisie des informations du produit; - une fiche du produit au format PDF est gnre sur la base des informations saisies; - la fiche ci-dessus (format PDF) est enregistre dans le systme de GED; - le systme de GED doit donner la possibilit de faire une recherche full-text d'une fiche produit, d'y effectuer des modifications et de l'enregistrer de nouveau. Le systme de GED doit versionner la fiche produit et aussi permettre d'avoir un historique complet de cette fiche.

III - MODELISATION DE CONTENU DANS ALFRESCO

III-1 - Modle de donnes


La figure ci-dessous prsente le modle de donnes du projet. On distingue les entits 'Product' et 'Picture'.

Figure 1: modle de donnes du projet

III-2 - Modlisation du contenu Alfresco III-2-1 - Petit rappel sur le dictionnaire de donnes Alfresco
Pour que les entits du modle de donnes du paragraphe III-1 soient prises en compte et gres sous forme de contenus dans Alfresco, il faut dcrire ces entits l'aide du dictionnaire de donnee Alfresco. Le dictionnaire de donnes Alfresco est un ensemble de modles de base (appels modles M1) qui permettent de dcrire la structure des contenus traiter. Un modle M1 contient la dfinition des types primitifs comme 'Double', 'Float', 'Integer' etc., ou des types complexes comme le type 'content' (type contenu pour contenir l'information sous forme binaire), 'folder' (pour les dossiers), 'person' (pour les personnes), etc.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-3-

Il existe plusieurs fichiers XML constituant le modle M1. On peut citer: - dictionaryModel.xml (types primitifs) - contentModel.xml (types complexes)

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Pour avoir une vue plus complte sur le Dictionnaire de donnes d'Alfresco, le Centre de Comptences AlfrescojBPM de Koossery Technology conseille la documentation ci-dessous: 1 http://wiki.alfresco.com/wiki/ Data_Dictionary_Guide

III-2-2 - Modle M2 de notre projet : productModel.xml


Les entits de notre projet vont tre dcrites sous forme de contenus dans un nouveau modle dit modle M2. Ce modle M2 est construit en utilisant les types de donnes des modles M1 (voir paragraphe III-2-1). Le modle M2 de l'entit produit est dfini dans le fichier productModel.xml dont le contenu est dans la figure cidessous : Figure 2: Alfresco Content Model: productModel.xml
1<?xml version="1.0" encoding="UTF-8"?> 2 3<!-- Definition of new Model --> 4<model name="product:model" xmlns="http://www.alfresco.org/model/dictionary/1.0"> 5 6 <!-- Optional meta-data about the model --> 7 <description>Custom Content Model</description> 8 <author>KOOSSERY TECHNOLOGY (Centre de Comptences Alfresco-jBPM)</author> 9 <version>1.0</version> 10 11 <!-- ici nos imports de modles M1 --> 12 <imports> 13 <!-- Import Alfresco Dictionary Definitions --> 14 <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/> 15 <!-- Import Alfresco Content Domain Model Definitions --> 16 <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/> 17 </imports> 18 19<!-- ci-dessous notre modle M2 pour ce projet --> 20 21 <!-- on dfinit le namespace de notre modle M2 --> 22 <namespaces> 23 <namespace uri="http://www.koossery-tech.com/model/product/1.0" prefix="product"/> 24 </namespaces> 25 26 <types> 27 <!-- The product type --> 28 <type name="product:product"> 29 <title>Product</title> 30 <parent>cm:content</parent> 31 <properties> 32 <property name="product:name"> 33 <title>Name</title> 34 <type>d:text</type> 35 <mandatory>true</mandatory> 36 </property> 37 <property name="product:description"> 38 <title>Description</title> 39 <type>d:text</type> 40 </property> 41 <property name="product:ref"> 42 <title>REF</title> 43 <type>d:text</type> 44 <mandatory>true</mandatory> 45 </property> 46 <property name="product:prize"> 47 <title>Prize</title> -4-

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

Figure 2: Alfresco Content Model: productModel.xml

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

48 <type>d:float</type> 49 <mandatory>true</mandatory> 50 </property> 51 <property name="product:stock"> 52 <title>Stock</title> 53 <type>d:int</type> 54 </property> 55 </properties> 56 57 <associations> 58 <!-- ci-dessous l'association qui lie le produit ses images 59 <association name="product:image"> 60 <target> 61 <class>product:picture</class> 62 <mandatory>false</mandatory> 63 <many>false</many> 64 </target> 65 </association> 66 </associations> 67 68 <!-- on greffe les aspect/comportements versionable et auditable --> 69 <mandatory-aspects> 70 <aspect>cm:versionable</aspect> 71 <aspect>cm:auditable</aspect> 72 </mandatory-aspects> 73 </type> 74 75 <!-- The product image --> 76 <type name="product:picture"> 77 <title>Picture</title> 78 <parent>cm:content</parent> 79 <properties> 80 <property name="product:pictureLegend"> 81 <title>Legend</title> 82 <type>d:text</type> 83 <mandatory>false</mandatory> 84 </property> 85 </properties> 86 </type> 87 88 </types> 89 90</model>

-->

Dcrivons de bout en bout le contenu de ce fichier. - Ligne 4: le modle est dfini dans le corps de la balise "model". L'attribut "name" reprsente le nom du modle : ce nom doit tre unique au sein de la plateforme Alfresco. Le nom du modle ici est "product:model". Remarquez qu'il est form de deux mots spars par deux points " : ". Le premier mot reprsente le prfixe du modle. Le prfixe est un symbole de votre choix qui permet d'identifier le modle une fois enregistr dans la plateforme. Ce prfixe doit tre unique. Pour finir on distingue l'url du modle de base du dictionnaire de donnes: http://www.alfresco.org/ model/dictionary/1.0. - Ligne 7 ligne 9: on distingue les sous lments de description , d'auteur et de version du modle. - Ligne 12 ligne 17: la dclaration des imports des modles de base M1. Tout modle M2 est construit partir d'lments des modles de base M1. Ici nous importons le modle M1 (identifi par le prfix 'd') des types primitifs et le modle M1 (identifi par le prfix 'cm') des types de contenu. - Ligne 23: on dclare le namespace de notre modle que nous sommes entrain d'crire. Nous avons donn comme prefix (qui doit tre unique dans le systme Alfresco) le mot 'product'. Nous avons donn comme uri l'url 'http://www.koossery-tech.com/model/product/1.0'

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-5-

- Ligne 28: dfinition du type de contenu 'product'.Ce type de contenu correspond la modlisation de l'entity 'Product' du paragraphe III-1. L'attribut 'name' du type de contenu doit tre au format 'prefix : nom' o 'prefix' reprsente le prefix de notre modle et 'nom' reprsente le nom qu'on veut donner au type de contenu. Chaque proprit de notre type de contenu est dfinie dans un sous lment "property". On distingue pour une proprit les lments suivants : son titre, son type, son caractre non obligatoire ou pas ("mandatory"). - Ligne 57 ligne 66: on reprsente l'association entre un produit et son image. Cette association ici est reprsente par la composition "child-association": la destruction d'un produit entrane la destruction de son image. - Ligne 69 ligne 72: une autre partie trs importante lors de la dfinition d'un type de contenu est la partie de la dclaration des aspects, reprsente par le l'lment "mandatory-aspects". Celui-ci permet de greffer un aspect gnrique (ou comportement gnrique). Dans notre exemple, deux aspects sont greffs au modle: l'aspect de versioning et l'aspect d'audit du contenu. - Ligne 76 ligne 86: dfinition du type de contenu "image" Les types de contenu ainsi dfinis vont reprsenter le contrat entre le client web et le Server Repository d'Alfresco pour ce qui concerne les manipulations sur le produit. Lorsque le client web va afficher le formulaire de saisie des informations d'un produit, les labels qui seront affichs seront les valeurs de l'lment "title" des proprits de notre type de contenu 'product:product'. Comme dans toute application web les labels sont externaliss et dfinis dans des bundles d'internationalisation i18n. C'est l'objet du paragraphe III-2-3.

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

III-2-3 - Internationalisation I18N relative au modle M2 (productModel.xml)


Alfresco donne la possibilit d'externaliser les labels dans un fichier de bundle et de permettre ainsi leur internationalisation i18n. La saisie des informations concernant un produit se fera via le systme de GED Alfresco. Pour cela il y aura diffrents crans de saisie de fiche d'un produit. Ces crans vont prsenter des labels et des zones de saisies correspondant toutes les proprits d'un produit et de ses images. Dans notre cas nous n'allons dfinir que les ressources pour les langues franaise (fr_FR) et anglaise (en_EN). La figure ci-dessous montre le contenu de la ressource fr_FR dfini dans le fichier properties productmodel_fr_FR.properties. Figure 3: Ressource bundle fr_FR d'internationalisation des labels du modle de contenu 'product:product'
# Display labels for Content Domain Model product_model.description=Modle de contenu de l'entit produit product_model.type.product_product.title=Produit product_model.type.product_product.description=Produit product_model.type.product_picture.title=Photo product_model.type.product_picture.description=Photo du produit product_model.property.product_name.title=Nom product_model.property.product_name.description=Nom du produit product_model.property.product_description.title=Description product_model.property.product_description.description=Description du produit product_model.property.product_ref.title=Refrence product_model.property.product_ref.description=Refrence du produit product_model.property.product_prize.title=Prix product_model.property.product_prize.description=Prix du produit product_model.property.product_stock.title=Nombre en stock product_model.property.product_stock.description=Nombre en stock product_model.property.product_pictureLegend.title=Lgende product_model.property.product_pictureLegend.description=Lgende de la photo product_model.child-association.product_image.title=Image product_model.child-association.product_image.description=Images du produit

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-6-

III-2-4 - Enregistrement du modle M2 (productModel.xml) et des bundles d'internationalisation i18n


L'enregistrement du modle productModel.xml et des bundles d'internationalisation se fait l'aide de Spring dans le fichier product-context.xml. La figure ci-dessous montre un extrait du fichier product-context.xml: Figure 4: Fichier contexte Spring product-context.xml
<!-- ici on enregistre notre modle avec les bundles des labels --> <bean id="productContent.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap"> <property name="models"> <list> <value>com/koossery/alfresco/tuto/model/productModel.xml</value> </list> </property> <property name="labels"> <list> <value>com/koossery/alfresco/tuto/model/product-model</value> </list> </property> </bean>

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Le modle productModel.xml et ses 'productContent.dictionaryBootstrap'.

bundles

sont

enregistrs

dans

le

Repository

via

le

bean

IV - CONFIGURATION DU CLIENT WEB DANS ALFRESCO


Une fois que toutes les oprations relatives la dfinition du modle de contenu de l'exemple sont termines, l'opration suivante est la configuration du client web. Pour notre exemple il s'agit de: - Construire un formulaire permettant de saisir les informations sur les produits. - Construire une action qui permettra travers les menus d'ouvrir le formulaire de saisie pour la cration d'un nouveau produit. - Construire une autre action qui permettra de modifier les informations d'un produit.

IV-1 - Configuration du client web


La saisie des informations sur les produits se fera partir un client web. Alfresco offre un mcanisme puissant permettant de construire des pages jsp par simple assemblage de composants. Nous allons voir comment construire notre page jsp et l'intgrer dans le client web de la plateforme Alfresco. La premire des choses consiste configurer les composants de notre vue. Ce mcanisme d'Alfresco est ralis dans un fichier XML de l'extension nomm conventionnellement web-client-config-custom.xml et plac dans un package alfresco.extension. La figure ci-dessous montre un extrait de ce fichier pour notre extension. Figure 5: web-client-config-custom.xml
<config> <actions> <!-- action :crer une fiche produit --> <action id="create_product"> <permissions> <permission allow="true">Write</permission> </permissions> <label-id>create_product</label-id> <image>/images/icons/add.gif</image> <action-listener>#{SaveProductDialog.setupFlagCreate}</action-listener> <action>dialog:save_product</action> </action> -7-

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

Figure 5: web-client-config-custom.xml

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

<!-- action :modifier une fiche produit --> <action id="update_product"> <permissions> <permission allow="true">Write</permission> </permissions> <evaluator>com.koossery.web.action.evaluator.UpdateProductEvaluator</evaluator> <label-id>update-product</label-id> <image>/images/icons/update.gif</image> <action-listener>#{SaveProductDialog.setupContentAction}</action-listener> <action>dialog:save_product</action> <params> <param name="id">#{actionContext.id}</param> </params> </action> <!-- ici on ajoute l'action 'crer produit' dans le groupe <action-group id="browse_create_menu"> <action idref="create_product" /> </action-group> <!-- ici on ajoute l'action 'crer produit' dans le groupe <action-group id="document_browse"> <action idref="update_product" /> </action-group> </actions> </config> <!-- configuration du Dialog--> <config> <dialogs> <dialog name="save_product" page="/jsp/extension/content/save-product-dialog.jsp" managed-bean="SaveProductDialog" icon="/images/icons/new_content_large.gif" title-id="save_product_dialog_title" description-id="save_product_description_dialog"> </dialog> </dialogs> </config> 'browse_create_menu'-->

'document_browse'-->

Le fichier web-client-config-custom.xml de la figure 5 contient deux grandes sections de configuration: les actions (une action est en quelque sorte une commande avec son menu), et les dialog (un dialog est une pages jsp) de cration/modification des fiches de produit. Dans les paragraphes qui suivent nous allons voir les configurations des actions et des dialog en dtail.

IV-1-1 - Sous section de dfinition des actions


Dans le fichier web-client-config-custom.xml de la figure 5, les actions sont dfinies dans les sous-lments "action" de l'lment "actions". Nous avons dfini 2 actions: l'action de cration d'une fiche produit (cette action est identifie par l'id "create_product") et l'action de modification d'une fiche produit (d'id "update_product"). La structure d'un lment "action" est la suivante: - permissions: permet de dfinir les permissions que l'utilisateur doit avoir pour excuter l'action. Pour modifier une fiche, l'utilisateur doit avoir une permission 'write'. - evaluator: permet d'valuer certaines conditions indispensables l'excution de l'action. L'evaluator peut tre spcifi via une classe java. La classe valuator ('com.koossery.web.action.evaluator.UpdateProductEvaluator') de l'action de modification vrifie si le contenu courant qu'on veut modifier est un contenu de type "product:product". Sinon l'action ne s'excute pas. - label-id: reprsente l'id de la traduction du label de l'action qui sera affich comme lien cliquable. - image: c'est l'image qui sera affiche comme icne de l'action. - action-listener: on peut configurer un listener sur l'action. Cela permet de monitorer l'vnement mis au moment de l'xcution de l'action et d'effectuer des traitements dsirs (exemple= charger certaines informations pouvant tre utiles l'excution de l'action).

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-8-

- action: il s'agit de l'action (en quelque sorte la commande) excuter. Il peut s'agir d'afficher un Dialog (formulaire) ou un Wizard. Dans l'un ou l'autre des cas, l'identification conventionnelle Alfresco du composant doit tre spcifie. Dans notre cas les actions lancent le formulaire en mode cration ou modification et cela est spcifi par 'dialog:save_product'. Le mot "dialog" signifie au noyau Alfresco que l'on veut ouvrir un Dialog. "save_product" est l'id du dialog qu'on veut ouvrir. Voir paragraphe IV-1-3 pour la configuration des Dialogs Alfresco. - params: dfinit les paramtres du listener. Dans notre cas l'id du noeud courant est pass au listener comme paramtre. Avec cette id le listener va retrouver le noeud du contenu modifier et placer le dialog en mode modification.

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

IV-1-2 - Sous section de dfinition des menus


L'intgration des liens des actions dans le client web se fait dans les menus. Le client web possde un certain nombre de menus listant des actions excutables par simple clic sur leur lien. L'ajout d'une action sur un menu se fait partir du action-group de ce menu. Un action-group est un groupe d'actions prsent dans le client web sous forme de menu droulant dont les items sont les actions du groupe. Dans notre cas nous devons ajouter nos deux actions dans des action-group qui vont permettre de les rendre accessible dans le client web. Pour ajouter une action dans un menu, il suffit d'ajouter un sous-lment dans le groupe. Nous voulons que l'action de cration des fiches de produit soit accessible partir du menu " Crer " du client web (voir figure 6).

Figure 6: Menu 'Crer' Dans la plate-forme Alfresco, l'action groupe du menu "crer" est identifie par l'id "browse_create_menu". Nous ajoutons donc l'item "create_product" ce groupe. Figure 7: Configuration de l'item menu 'create_product'
<!-- Actions Menu for Create in Browse screen --> <action-group id="browse_create_menu"> <action idref="create_product" /> </action-group>

D'autre part nous voulons que l'action de modification d'une fiche produit soit disponible dans le menu contextuel du noeud de ce document. La zone entoure en rouge de la figure 8 ci-dessous montre le menu contextuel d'une fiche produit.

Figure 8 : Menu contextuel d'une fiche produit Dans la plate-forme Alfresco, l'action groupe du menu contextuel des documents est identifie par l'id "document_browse". Nous ajoutons donc l'item "update_product" ce groupe.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

-9-

Figure 9: Configuration de l'item menu 'update_product'

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

<!-- Actions for a document in the Browse screen --> <action-group id="document_browse"> <action idref="update_product" /> </action-group>

IV-1-3 - Section de dfinition du Dialog


La configuration d'un Dialog Alfresco est simple. Elle s'effectue dans un sous-lment "dialog" de l'lment "dialogs". La description est la suivante: - name: dfinit le nom unique de ce dialog. Il est utilis pour identifier le dialog; - page: dfinit la page jsp du Dialog; - managed-bean: dfinit l'id du backing-bean (au sens JSF) associ; - icon: dfinit le chemin de l'icne qui sera affiche dans la vue conteneur du Dialog; - title-id: dfinit l'id de la traduction dans la ressource I18N du titre de la page du Dialog; - description-id: dfinit l'id de la traduction dans la ressource I18N de la description qui sera affiche pour ce dialog.

IV-2 - Dialog Alfresco - Formulaire de saisie IV-2-1 - Design de la JSP


Il s'agit de construire la page jsp qui va prsenter le formulaire de saisie des informations du nouveau produit en cours de cration. Cette page est construite par assemblage de JSF "UI Components". La jsp du Dialog est create-product-dialog.jsp. Elle est assez simple et nous invitons le lecteur l'examiner (voir le code source du projet au chapitre VIII).

IV-2-2 - Externalisation et internationalisation des labels de la JSP


En restant conforme avec les conventions d'Alfresco, les labels prsents dans les pages jsp sont externaliss i18n dans le bundle 'customcontent-webclient'. Figure 10: Ressource i18N fr_FR des labels de la page create-product-dialog.jsp
# Create New product Dialog save_product_title_dialog=Cration/Modificaiton d'un produit save_product_description_dialog=Saisir les informations du produit # Actions Labels create_product=Nouveau Produit update-product=Modifier le produit # General new_product=Nouveau Produit name=Nom du Produit description=Description reference=Refrence prize=Prix Unitaire stock=Nombre en Stock legend=Lgende de la photo photo=Photo du produit

IV-2-3 - Ecriture du code du Bean Manag


Le Bean Manag d'un Dialog doit tre une classe de type BaseDialogBean. Les mthodes suivantes doivent tre implmentes : - init( Map ): elle permet au dveloppeur de raliser les oprations d'initiation du Dialog comme l'instanciation des DTOs, la recherche des donnes modifier etc.
- 10 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- String finishImpl(FacesContext, String): cette mthode est excute lorsque l'utilisateur a fini ses saisies et qu'il enregistre la fiche (clic sur le bouton 'Terminer') de notre Dialog. Elle est utilise pour enregistrer les informations dans le Repository Alfresco.

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

IV-2-4 - Configuration JSF du Bean Manag


La configuration JSF du Bean manag de l'extension se fait dans le fichier faces-config-custom.xml. C'est une convention Alfresco du mcanisme d'extension.
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <managed-bean> <managed-bean-name>SaveProductDialog</managed-bean-name> <managed-bean-class> com.koossery.alfresco.web.bean.content.SaveProductDialog </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>nodeService</property-name> <value>#{NodeService}</value> </managed-property> <managed-property> <property-name>contentService</property-name> <value>#{ContentService}</value> </managed-property> <managed-property> <property-name>browseBean</property-name> <value>#{BrowseBean}</value> </managed-property> <managed-property> <property-name>serviceRegistry</property-name> <value>#{ServiceRegistry}</value> </managed-property> </managed-bean> </faces-config>

Il s'agit de la configuration JSF du Bean Manag SaveProductDialog qui ralise la cration et la modification d'une fiche produit. Il est de scope session et on voit que les services du Repository sont injects.

V - UTILISATION DE JASPER REPORT V-1 - Gnration du document PDF avec Jasper Report et enregistrement
Pour la gnration de la fiche du produit au format PDF, cela est fait avec le standard Jasper Report avec son outil iReport. Avant de prsenter l'utilisation de l'API Jasper dans le projet pour la gnration du PDF, nous allons d'abord brivement faire un rappel de l'utilisation de iReport pour la construction du template.

V-1-1 - Cration du template jasper de la fiche du produit


Dans l'interface d'iReport nous crons un nouveau rapport vierge et nous dplions les zones : title, detail et pageFooter. Dans la zone title reprsentant le titre et le logo du document qui sera produit, nous allons placer un composant image et des zones de textes statiques.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 11 -

Lors de la gnration du rapport, le moteur doit prendre en entre un objet de type InputStream contenant les binaires de l'image. Les Stream de l'image seront passs au le moteur Jasper Report travers le paramtre : PRODUCT_REPORT_KOOSSERY_LOGO de type java.io.InputStream. Les valeurs des zones de textes statiques sont directement saisies (voir la figure ci-dessous). Dans la zone detail nous allons placer un composant image pour le positionnement de l'image du produit et des zones d'entre de textes pour les informations du produit. Il a aussi 5 zones de textes statiques affichant les labels du nom du produit, la description du produit, la rfrence du produit, le prix unitaire et le stock. Les valeurs sont passes au travers des paramtres : - PRODUCT_REPORT_NAME de type java.lang.String, - PRODUCT_REPORT_PRIZE de type java.lang.Float, - PRODUCT_REPORT_REFERENCE de type java.lang.String, - PRODUCT_REPORT_STOCK de type java.lang.Integer, - PRODUCT_REPORT_DESCRIPTION de type java.lang.String. - Les Stream de l'image sont passs partir du paramtre PRODUCT_REPORT_IMAGE de type java.io.InputStream. Dans la zone pageFooter nous allons placer des zones de textes statiques.

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Figure 12 : Cration du fichier jasper avec iReport 1.3.3 Pour avoir des notions approfondies sur la cration des rapports avec Jasper Report, le Centre de Comptences Alfresco-jBPM de Koossery Technology conseille les nombreuses documentations du site developpez.com, dans la rubrique 'java'. Quelques exemples de tutoriaux :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 12 -

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

1 2

Gnration de rapport avec Jasper Report par Eric Reboisson (Site Web) Initiation JasperReports - iReport par JeanPhilippe Guilloux (Site Web)

V-1-2 - Compilation du template jasper report


La compilation du template se fait dans l'outil iReport partir du menu Crer -> Compiler. Nous avons compil et produit le fichier Product.jasper.

V-1-3 - Utilisation du template dans le projet et gnration du PDF


L'utilisation du template Product.jasper dans le projet pour la gnration du PDF de la fiche produit se fait dans la mthode String finishImpl(FacesContext arg0, String arg1) du backing bean. Nous allons prsenter dans les dtails. Tout d'abord les labels des paramtres dclars dans le template; les noms doivent tre identiques aux noms des paramtres dclars dans le template :
/* --------------- Report Parameters --------------- */ private final String PRODUCT_REPORT_DESCRIPTION = "PRODUCT_REPORT_DESCRIPTION"; private final String PRODUCT_REPORT_IMAGE = "PRODUCT_REPORT_IMAGE"; private final String PRODUCT_REPORT_KOOSSERY_LOGO = "PRODUCT_REPORT_KOOSSERY_LOGO"; private final String PRODUCT_REPORT_NAME = "PRODUCT_REPORT_NAME"; private final String PRODUCT_REPORT_PRIZE = "PRODUCT_REPORT_PRIZE"; private final String PRODUCT_REPORT_REFERENCE = "PRODUCT_REPORT_REFERENCE"; private final String PRODUCT_REPORT_STOCK = "PRODUCT_REPORT_STOCK";

Puis les images et le fichier jasper du template :


/* --------------- JASPER REPORT FILE AND RESSOURCES --------------- */ private ClassPathResource JASPER_REPORT_CONTEXT_PATH= new ClassPathResource("/jasperreport/Product.jasper"); private ClassPathResource JASPER_REPORT_KOOSSERY_LOGO_PATH= new ClassPathResource("/images/logo/logo_koossery.jpg");

En dernier le chargement des donnes dans le template et la production du PDF :


// - Parameters to send to the report Map parameters = new HashMap(); /* Product Report */ parameters.put(PRODUCT_REPORT_DESCRIPTION, this.productData.getDescription()); parameters.put(PRODUCT_REPORT_IMAGE, this.productData.getPhotoInputStream()); parameters.put(PRODUCT_REPORT_KOOSSERY_LOGO, new FileInputStream(JASPER_REPORT_KOOSSERY_LOGO_PATH.getFile())); parameters.put(PRODUCT_REPORT_NAME, this.productData.getName()); parameters.put(PRODUCT_REPORT_PRIZE, this.productData.getPrize()); parameters.put(PRODUCT_REPORT_REFERENCE, this.productData.getRef()); parameters.put(PRODUCT_REPORT_STOCK, this.productData.getStock()); File file = JASPER_REPORT_CONTEXT_PATH.getFile(); // - Execution - 13 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology) JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(file), parameters,new JREmptyDataSource()); // - Create report as PDF FIle this.reportBytes = JasperExportManager.exportReportToPdf(jasperPrint);

VI - COMPILATION ET DEPLOIEMENT DU PROJET


Le projet est une extension Alfresco et a t dvelopp dans le SDK Alfresco. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande fortement aux dveloppeurs de travailler dans un SDK Alfresco. La procdure suivre pour installer un environnement de dveloppement (SDK) Alfresco est dcrite dans le Le Guide du dveloppeur Alfresco.

VI-1 - Import de l'extension dans le SDK Alfresco


Le SDK Alfresco est l'ensemble des bibliothques Alfresco ncessaires aux dveloppements d'extensions. Nous avons choisi Eclipse comme EDI pour monter notre environnement SDK Alfresco. Il est indispensable d'ajouter le projet AlfrescoEmbedded du SDK dans les dpendences de l'extension. La figure ci-dessous montre l'arborescence du projet.

Figure 15 : Arborescence du projet

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 14 -

VI-2 - Construction du WAR

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

La compilation est effectue avec l'outil Ant. Nous devons personnaliser le fichier build.xml en remplacer le chemin du WAR Alfresco par le notre.

Figure 16 : Personnalisation du fichier Ant Nous devons tlcharger les librairies itext-1.3.1.jar et jasperreports-1.3.3.jar et les placer dans WEB-INF/lib. Le Target ANT choisir est le Target "integrate-extension".

VI-3 - Dploiement sur un Web Container


Avant de dployer notre .war il faut mettre jour le fichier de proprits repository.properties afin d'indiquer le rpertoire pour le stockage du contenu ainsi que les paramtres de connexion la base de donnes utilise par Alfresco. Aprs avoir dmarr le Web Container, lanons notre navigateur et tapons l'url http://@IP:PORT/context-root (exemple: http://localhost:8080/archiveproduit) et connectons-nous.

Figure 19 : Interface de connexion

VII - EXECUTION: CREATION, RECHERCHE FULL-TEXT, MODIFICATION, VERSIONNING

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 15 -

VII-1 - Cration d'une fiche produit

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Allons dans notre page d'accueil (panneau de gauche de la page d'accueil) et plaons-vous dans le dossier ddi au stockage du contenu des produits pour crer un nouveau produit. Puis allons dans le groupe de menu 'Crer' et cliquons 'Nouveau Produit'

Figure 20 : Menu crer nouveau produit La page de cration des produits apparat :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 16 -

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Figure 21 : Formulaire du Dialog de saisie des informations du produit Aprs avoir saisi les informations sur un produit, appuyez sur le bouton 'OK' pour l'enregistrement. Les informations vont tre traites par Jasper report et un document PDF va tre gnr et stock dans le dossier consacr aux fiches produits. La figure ci-dessous montre les fiches de produits cres dans le dossier "Produits".

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 17 -

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Figure 22: Fiches produits archives Vous pouvez consulter les documents en ligne en cliquant directement dessus. La figure ci-dessous montre un document PDF d'un produit:

Figure 23: Fiche produit

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 18 -

VII-2 - Modification et versionnage d'une fiche produit

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Pour modifier une fiche de produit, il suffit de cliquer sur l'icne de modification de la fiche du menu contextuel du noeud reprsentant le document. Pour enregistrer vos modifications cliquez sur le bouton OK du Dialog de modification. Du fait que nous avons pris le soin de greffer l'aspect 'versionnable' sur le type de contenu 'product:product', le systme de GED Alfresco va crer une nouvelle version du document.

VII-3 - Historique des versions d'une fiche produit


Pour voir les versions d'une fiche produit, il suffit d'afficher les dtails du document (cliquez sur " visualiser les dtails " dans le menu contextuel du document) et rendez vous la section " historique des versions ". Vous pouvez ainsi tlcharger une version antrieure ou revenir sur elle.

Figure 24: Historique des versions d'une fiche produit

VII-4 - Recherche d'une fiche produit : 'recherche full-text'


La plateforme Alfresco fournit un composant UI qui permet de faire la recherche full-text d'un document. La recherche se fait en s'appuyant sur le contenu et sur les proprits. Le composant est configur dans le fichier de configuration du client web partir de l'lment "advanced-search". La figure ci-dessous montre la configuration du composant de recherche pour la recherche full-text d'un document de type "product:product".
<config evaluator="string-compare" condition="Advanced Search"> <advanced-search> <content-types> <type name="product:product"/> </content-types> <custom-properties> <meta-data type="product:product" property="product:name" /> <meta-data type="product:product" property="product:description" /> <meta-data type="product:product" property="product:ref" /> <meta-data type="product:product" property="product:prize" /> <meta-data type="product:product" property="product:stock" /> </custom-properties> </advanced-search> </config>

Nous pouvons remarquer que nous avons spcifi travers l'lment "content-types" le type de l'entit des produits. Ceci permet de spcifier la plateforme que la recherche doit tre faite sur les documents de ce type. Dans la configuration du composant search, nous avons spcifi que la recherche d'une fiche produit peut se faire sur : le titre, la description, le prix, le stock et la rfrence. En plus de ces critres, Alfresco permet aussi par dfaut de rechercher un contenu en se basant sur l'auteur, la date de modification, le type de dossier, le type de contenu et le format de contenu. La figure ci-dessous montre un exemple de recherche d'une fiche produit contenant le mot "fleur".

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 19 -

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Figure 25: Recherche avance Nous saisissons le mot "fleur" dans la description et clic sur le bouton 'rechercher'. La figure ci-dessous affiche le rsultat :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 20 -

Tutorial dveloppement Alfresco: modlisation de contenu et utilisation de jasper report par Landry KOUAM (Centre de Service Alfresco/jBPM, Koossery Technology) Bak Jc. BAKENEGHE (Software Coordinator, Koossery Technology)

Figure 26: Resultat d'une recherche avance

VIII - TELECHARGEMENT CODE SOURCE DU PROJET


Le code source du projet est tlchargeable ici: zip du projet Tous les remerciements au comit de relecture developpez.com

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco/tutorial-developpement-alfresco-modelisation-contenu-et-utilisation-jasper-report/

- 21 -

Vous aimerez peut-être aussi