alfresco bpm guide devpt 20090519

Upload: hanane-esi

Post on 19-Jul-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition)par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)Date de publication : 26 Mai 2009 Dernire mise jour :

La plate-forme java ecm Alfresco est un standard pour adresser les projets ged/ecm/ workflow (gestion lectronique de document, gestion de contenus, workflows avancs). Ce guide s'adresse tous les dveloppeurs java qui dsirent acqurir des comptences en dveloppement Alfresco-jBPM. Les dveloppeurs Alfresco-jBPM pourront l'utiliser pour confirmer ou approfondir leurs connaissances. Note importante:il s'agit d'un guide itratif sur plusieurs ditions. Par consquent il se peut que certaines parties de l'dition actuelle ne soient pas encore traites: elles le seront l'occasion des ditions suivantes.

Dans le cadre des projets GED/Workflow/BPM que lui confient ses clients, Koossery Technology s'appuie sur les standards suivants : - Alfresco pour ce qui concerne l'implmentation de la GED/ECM - jBoss BPM pour ce qui concerne l'implmentation des workflow BPM - jBoss BPEL pour ce qui concerne l'orchestration de processus - et enfin l'ESB Mule ESB pour l'intgration de processus htrognes. Le Centre de Comptences Alfresco-jBPM de Koossery Technology publie travers ce guide la "Bible" du dveloppeur java Alfresco. Ce guide va tre utile tous les dveloppeurs java qui dsirent acqurir des comptences en dveloppement AlfrescojBPM. Les dveloppeurs Alfresco-jBPM pourront l'utiliser pour confirmer ou approfondir leurs connaissances. I - INTRODUCTION..................................................................................................................................................... 5 II - LES BASES TECHNIQUES GNRALES DU JCR (JAVA CONTENT REPOSITORY)....................................... 5 II-1 - Entity Model JCR: spcifications JSR-170....................................................................................................5 II-2 - Exercices simples de manipulation de contenu l'aide de l'implmentation JCR Apache-Jackrabbit.......... 6 II-2-1 - Projet DAO simple base sur Jackrabbit............................................................................................. 6 II-2-2 - Projet DAO avance base sur Jackrabbit.......................................................................................... 6 II-2-3 - Approfondissement de Jackrabbit........................................................................................................ 6 II-3 - Exercices simples de manipulation de contenu l'aide de l'implmentation JCR Alfresco.......................... 7 II-3-1 - Overview du modle de donnes sur lequel s'appuie Alfresco............................................................7 II-3-2 - Mise sur pied de l'environnement de dveloppement SDK-Alfresco....................................................7 II-3-3 - Exercice simple de manipulation du JCR Model d'Alfresco................................................................. 7 III - LES MODLES DE CONTENU DE L'ECM ALFRESCO..................................................................................... 8 III-1 - Les modles................................................................................................................................................. 8 III-1-1 - Version Model...................................................................................................................................... 8 III-1-2 - Rule Model...........................................................................................................................................8 III-1-3 - User Model...........................................................................................................................................8 III-1-4 - Action Model........................................................................................................................................ 9 III-1-5 - Transformation component Model....................................................................................................... 9 III-1-6 - Alfresco Security Model....................................................................................................................... 9 III-1-7 - Alfresco Audit Management Model......................................................................................................9 III-2 - Le dictionnaire de donnes et son extension............................................................................................ 10 IV - L'ARCHITECTURE TECHNIQUE GNRALE DU FRAMEWORK ALFRESCO............................................... 10 IV-1 - Overview de l'architecture technique......................................................................................................... 10 V - LE BACK-END ALFRESCO: LES SERVICES OFFERTS PAR LA PARTIE SERVER DU REPOSITORY.......... 10 V-1 - NodeService................................................................................................................................................ 10 V-2 - ContentStoreService................................................................................................................................... 11 V-3 - ContentService............................................................................................................................................ 12 V-4 - FileFolderService.........................................................................................................................................13 V-5 - DictionnaryService.......................................................................................................................................14 V-6 - NamespaceService..................................................................................................................................... 15 V-7 - VersionService.............................................................................................................................................15 V-8 - VersionHistoryService................................................................................................................................. 16 V-9 - NodeArchiveService.................................................................................................................................... 16 V-10 - SearchService........................................................................................................................................... 16 V-11 - ADMSearchService................................................................................................................................... 18 V-12 - LockService............................................................................................................................................... 18 V-13 - LuceneCategoryService............................................................................................................................ 19 V-14 - AuditService.............................................................................................................................................. 19 V-15 - ActionService.............................................................................................................................................19 V-16 - AttributService........................................................................................................................................... 21 V-17 - ScriptService............................................................................................................................................. 21 V-18 - RuleService............................................................................................................................................... 21 V-19 - AuthenticationService................................................................................................................................21 V-20 - PermissionService.....................................................................................................................................22

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-2-

V-21 - AuthorityService........................................................................................................................................ 23 V-22 - PersonService........................................................................................................................................... 23 V-23 - CategoryService........................................................................................................................................ 24 V-24 - UsageService............................................................................................................................................ 24 V-25 - CheckOutCheckinService..........................................................................................................................24 V-26 - MimeTypeService...................................................................................................................................... 24 V-27 - MimeTypeConfigService............................................................................................................................25 V-28 - MessageService........................................................................................................................................ 25 V-29 - ContentFilterLanguagesService................................................................................................................ 25 V-30 - WorkflowService........................................................................................................................................ 25 V-31 - ImporterService......................................................................................................................................... 25 V-32 - MultilingualContentService........................................................................................................................ 26 V-33 - EditionService............................................................................................................................................26 V-34 - AdminService............................................................................................................................................ 27 V-35 - OwnableService........................................................................................................................................ 27 V-36 - CopyService.............................................................................................................................................. 27 V-37 - AVMService............................................................................................................................................... 27 V-38 - ExporterService......................................................................................................................................... 27 V-39 - Template Service.......................................................................................................................................28 V-40 - TransactionService.................................................................................................................................... 28 V-41 - DeploymentService................................................................................................................................... 28 V-42 - EmailService..............................................................................................................................................28 V-43 - ModuleService...........................................................................................................................................28 V-44 - DescriptorService...................................................................................................................................... 28 V-45 - TenantService............................................................................................................................................28 V-46 - ServiceRegistry......................................................................................................................................... 28 VI - LA GESTION DES EXCEPTIONS DANS ALFRESCO......................................................................................28 VI-1 - Alfresco Exception Management Model.................................................................................................... 29 VII - LES WORKFLOW DANS ALFRESCO..............................................................................................................29 VII-1 - Workflow simples...................................................................................................................................... 29 VII-2 - Workflow avancs..................................................................................................................................... 29 VII-2-1 - jBPM: syllabus simple...................................................................................................................... 30 VII-2-2 - jBPM: syllabus avanc..................................................................................................................... 30 VII-3 - Le Framework des Workflows Alfresco.................................................................................................... 30 VIII - LES FRAMEWORKS DU BACK-END ALFRESCO......................................................................................... 30 VIII-1 - Les Actions Alfresco................................................................................................................................ 30 VIII-1-1 - Notions d'Action Alfresco.................................................................................................................30 VIII-1-2 - Exercice simple de dveloppement d'Action Alfresco.....................................................................34 VIII-2 - Les Aspects Alfresco............................................................................................................................... 34 VIII-2-1 - Notions sur les Aspects Alfresco.................................................................................................... 34 VIII-2-2 - Exercice simple de dveppement d'Aspect Alfresco.......................................................................40 VIII-3 - Sources et Auditeur................................................................................................................................. 40 VIII-3-1 - Notions.............................................................................................................................................40 VIII-3-2 - Exercice simple de dveloppement d'auditeur d'vnement Alfresco.............................................43 IX - CONFIGURATIONS DU REPOSITORY.............................................................................................................43 X - FRONT-END WEB D'ALFRESCO: DVELOPPEMENTS JSF...........................................................................44 X-1 - Gnralits sur le Front-end JSF Alfresco................................................................................................. 44 X-2 - Les Principaux Bean manags du Front-End.............................................................................................44 X-2-1 - LoginBean...........................................................................................................................................44 X-2-2 - BrowseBean........................................................................................................................................44 X-2-3 - NavigationBean...................................................................................................................................45 X-2-4 - WorkflowBean..................................................................................................................................... 45 X-2-5 - FileUploadBean.................................................................................................................................. 45 X-2-6 - BaseActionWizard...............................................................................................................................45 X-2-7 - RunActionWizard................................................................................................................................ 45 X-2-8 - BaseActionHandler............................................................................................................................. 45 X-2-9 - ScriptHandler...................................................................................................................................... 45 X-2-10 - BaseContentWizard.......................................................................................................................... 45-3-

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

X-2-11 - CreateContentWizard........................................................................................................................46 X-2-12 - EditContentWizard............................................................................................................................ 46 X-2-13 - DashboardWizard............................................................................................................................. 46 X-2-14 - BaseDialogBean............................................................................................................................... 46 X-2-15 - FileUploadBean................................................................................................................................ 46 X-2-16 - SidebarBean..................................................................................................................................... 46 X-2-17 - BaseContentWizard.......................................................................................................................... 46 X-2-18 - CreateContentWizard....................................................................................................................... 46 X-2-19 - EditContentWizard............................................................................................................................ 46 X-2-20 - DashboardWizard............................................................................................................................. 46 X-2-21 - ForumsBean..................................................................................................................................... 46 X-2-22 - AddUserDialog..................................................................................................................................46 X-2-23 - CreateGroupDialog........................................................................................................................... 47 X-2-24 - CreateRoleWizard.............................................................................................................................47 X-2-25 - CreateSpaceWizard..........................................................................................................................47 X-2-26 - CreateSpaceDialog...........................................................................................................................47 X-2-27 - TrashcanDialog................................................................................................................................. 47 X-2-28 - ContentUsersBean............................................................................................................................47 X-2-29 - CreateUserWizard............................................................................................................................ 47 X-2-30 - UserConsoleDialog........................................................................................................................... 47 X-2-31 - UserDialog........................................................................................................................................ 47 X-2-32 - NewUserWizard................................................................................................................................ 47 X-2-33 - BaseWizardBean.............................................................................................................................. 47 X-2-34 - ManageTaskDialog........................................................................................................................... 47 X-2-35 - WorkflowBean................................................................................................................................... 48 X-2-36 - WorkflowConsoleBean......................................................................................................................48 X-2-37 - StartWorkflowWizard.........................................................................................................................48 X-3 - Les Frameworks du FE.............................................................................................................................. 48 X-3-1 - Les Dialogs Alfresco...........................................................................................................................48 X-3-2 - Les Wizards Alfresco..........................................................................................................................48 X-4 - Les APIs Webscript et JavaScript.............................................................................................................. 48 X-4-1 - Alfresco : Web Scripts........................................................................................................................ 48 X-4-2 - Alfresco : JavaScripts......................................................................................................................... 48 X-5 - Extension du Front-End Alfresco................................................................................................................ 48 XI - EXPOSITION DE SERVICES: LES MIDDLEWARE D'ALFRESCO...................................................................48 XI-1 - Alfresco Web Services...............................................................................................................................48 XI-2 - Alfresco RMI...............................................................................................................................................49 XII - PAQUETAGE ET DPLOIEMENT DES EXTENSIONS AVEC LES OUTILS D'ALFRESCO............................ 49 XIII - LES PROTOCOLES D'ACCS........................................................................................................................ 49 XIII-1 - CLUSTER.................................................................................................................................................49 XIII-2 - CIFS......................................................................................................................................................... 49 XIII-3 - FTP...........................................................................................................................................................49 XIV - REMERCIEMENTS ET COMMENTAIRES...................................................................................................... 50

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-4-

I - INTRODUCTION

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Le prsent guide est issu du rsultat d'un profond travail effectu par le Centre de Comptences Alfresco-jBPM de Koossery Technology. C'est un guide utile pour tout dveloppeur Java qui voudrait acqurir (ou approfondir) des comptences en dveloppement java ecm/ged/workflow sur la base de la plate-forme Alfresco-jBPM. Il prsente un ensemble de tches, d'exercices et de tutoriaux absolument faire de faon progressive. Dans la partie II, nous abordons les bases techniques gnrales du JCR (Java Content Repository) Dans la partie III nous abordons les modles de contenu de l'ECM Alfresco. Dans la partie IV nous abordons l'architecture technique gnrale du framework Alfresco. Dans la partie V nous abordons les services offerts par la partie Server du repository Alfresco. Dans la partie VI nous abordons la gestion des exceptions dans Alfresco. Dans la partie VII nous abordons le dveloppement des workflow (simples et avancs). Dans la partie VIII nous abordons les frameworks du repository Alfresco. Dans la partie IX nous abordons les configurations du repository Alfresco. Dans la partie X nous abordons les dveloppement front-end web (JSF) d'Alfresco. Dans la partie XI nous abordons les modes d'exposition des services d'Alfresco (les middleware d'Alfresco). Dans la partie XII nous abordons le paquetage et dploiement des extensions avec les outils d'Alfresco. Dans la partie XIII nous abordons les protocoles d'accs.

II - LES BASES TECHNIQUES GNRALES DU JCR (JAVA CONTENT REPOSITORY)Le Centre de Comptences Alfresco-jBPM de Koossery Technology prconise de commencer par avoir de bonnes bases sur le JCR (Java Content Repository).

II-1 - Entity Model JCR: spcifications JSR-170Dans les projets java classiques qui manipulent les donnes, le stockage se fait en gnral dans une base de donnes relationnelle. L'accs cette base se fait en gnral via une couche DAO base sur un mapper O/R ou ORM (iBatis ou Hibernate par exemple). Lorsqu'on manipule des documents ou du contenu, les bases de donnes relationnelles ne sont plus adaptes car elles ne prsentent pas de fonctionnalits pousses pour ce qui concerne le versionning, la recherche full-text, la catgorisation et classification du contenu, le contrle d'accs au contenu, etc. Pour palier cette non adaptation des sgbr, la norme JSR-170 apporte un ensemble de spcifications pour le stockage et la manipulation du contenu (JCR=Java Content Repository). La norme JSR-170 est implmente par certains outils open source notamment Apache Jackrabbit. Alfresco implmente aussi la norme JSR170. Pour avoir un bon overview sur le JCR et la norme JSR-170, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande de lire tour tour les documents ci-dessous: 1 http://www.artima.com/ lejava/articles/ contentrepositoryP.html http://www.onjava.com/ pub/a/onjava/2006/10/04/ lire les premiers paragraphes jusqu'au paragraphe "blogging with jackrabbit" exclu. lire la page 1: trs bon overview sur le JCR !

2

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-5-

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

3

what-is-java-contentrepository.html http://www.ibm.com/ developerworks/java/ library/j-jcr/

II-2 - Exercices simples de manipulation de contenu l'aide de l'implmentation JCR ApacheJackrabbitDans un projet java, la couche DAO est la couche d'accs aux donnes. Dans notre cas nous manipulons le contenu.

II-2-1 - Projet DAO simple base sur JackrabbitIci il s'agit de s'entraner crire une petite DAO implmente base de Apache Jackrabbit pour manipuler le contenu. Le but de cet exercice est d'apprendre manipuler les concepts vus au paragraphe II-1. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande de lire, comprendre et refaire soi-mme les 2 petits exercices exposs dans les documents ci-dessous: 1 http://www.onjava.com/ pub/a/onjava/2006/10/04/ what-is-java-contentrepository.html http://www.artima.com/ lejava/articles/ contentrepositoryP.html Trs bon petit exercice d'une DAO Jackrabbit simple sur les pages 2 et 3 !

2

II-2-2 - Projet DAO avance base sur JackrabbitDans la suite de l'exercice de manipulation de contenu du paragraphe II-2-1 , il s'agit ici d'aller plus loin en s'entranant crire une DAO base sur Apache Jackrabbit en maniant les concepts avancs : introduction du versionning, utilisation des modles de donnes, indexage, recherche textuelle, upload de fichier. Le Centre de Comptences Alfresco-jBPM de Koossery Technology pense que cet exercice est optionnel: nous fournirons dans une prochaine version de ce guide un zip avec un exemple de code. Le dveloppeur peut nansmoins faire l'exercice de la documentation ci-dessous: 1 http://www.onjava.com/ pub/a/onjava/2006/10/04/ what-is-java-contentrepository.html appronfondir avec l'exemple de search (XPath) et l'upload de la page 4

II-2-3 - Approfondissement de JackrabbitSi vous voulez approfondir vos connaissances sur l'implmentation JCR Jackrabbit il faut aller sur le site Apache: 1 http:// jackrabbit.apache.org

Le Centre de Comptences Alfresco-jBPM de Koossery Technology pense que cet approfondissement n'est pas dterminant pour entrer dans Alfresco.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-6-

II-3 - Exercices simples de manipulation de contenu l'aide de l'implmentation JCR Alfresco

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

II-3-1 - Overview du modle de donnes sur lequel s'appuie AlfrescoLorsqu'on doit stocker des donnes dans une base de donnes relationnelle, on prend d'abord la peine de modliser ces donnes en utilisant les concepts relatifs aux sgbdr: tables, attributs, jointures etc. Pour ce qui concerne un projet de gestion de contenu bas sur Alfresco, le dveloppeur Java doit d'abord prendre la peine de modliser le contenu manipul en utilisant les concepts de modles de donnes relatifs Alfresco. Le but dans ce paragraphe est d'avoir de bonnes bases sur le modle de donnes sur lequel Alfresco s'appuie pour organiser le contenu. Les principaux concepts dont : - le dictionnary data model et les notions de modles M1 et M2. - les principaux modles M1 : dictionaryModel, contentModel, systemModel, applicationModel Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande de lire le documentation suivant: 1 http:// wiki.alfresco.com/wiki/ Data_Dictionary_Guide

II-3-2 - Mise sur pied de l'environnement de dveloppement SDK-AlfrescoPour pouvoir dvelopper en utilisant le Framework Alfresco, le plus pratique est de le faire dans un environnement SDK Alfresco. Cet environnement est pr configur avec toutes les librairies du noyau Alfresco. En tant que dveloppeur Alfresco, vous devez monter cet environnement sur votre poste. Pour mettre en place son environnement de dveloppement Alfresco (SDK-Alfresco), le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande de s'inspirer du document suivant: 1 http:// wiki.alfresco.com/ wiki/Alfresco_SDK

II-3-3 - Exercice simple de manipulation du JCR Model d'AlfrescoAprs avoir install son environnement de dveloppement (voir II-3-2 ), le dveloppeur doit lire, comprendre et s'exercer sur projet "JCRSamples" du SDK Alfresco. Pour cela s'aider de la documentation ci-dessous: 1 http:// wiki.alfresco.com/ wiki/ Introducing_the_Alfresco_Java_Content_Repository_API

Le Centre de Comptences Alfresco-jBPM de Koossery Technology pense que cet exercice est utile. Nous fournirons dans une prochaine version de ce guide un zip avec d'autres exemples de code.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-7-

III - LES MODLES DE CONTENU DE L'ECM ALFRESCO

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Il est question dans ce chapitre de matriser les diffrents modles M1 d'Alfresco et leurs implmentations. Nous prsenterons aussi le dictionnaire de donnes et son extension.

III-1 - Les modlesL'implmentation du JCR Alfresco manipule plusieurs modles M1.

III-1-1 - Version ModelC'est le modle sur lequel repose la gestion des versions des documents du JCR Alfresco et son implmentation. Ce modle est dcrit travers le fichier "versionstoreModel.xml". Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande non seulement la matrise du modle versionstoreModel.xml mais aussi pour une prise main du mcanisme des versions, la matrise des services VersionService (voir V-7) et VersionHistory(voir V-8) du package org.alfresco.service.cmr.version. Lire la documentation ci-dessous : 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-2 - Rule ModelC'est le modle sur lequel repose l'implmentation des rules Alfresco (Rgles de gestion). Ce modle est dcrit travers le fichier "ruleModel.xml". Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande non seulement la matrise du modle ruleModel.xml mais aussi pour une prise main du mcanisme des rgles de gestion, la matrise du service RuleService (voir V-18) du package org.alfresco.service.cmr.rule. Lire la documentation ci-dessous : 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-3 - User ModelC'est le modle li la gestion des utilisateurs et son implmentation dans le noyau. Ce modle est dcrit travers l'entit cm:person du modle contentModel.xml. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande non seulement la matrise de l'entit cm:person du modle contentModel.xml, mais aussi pour une prise main du mcanisme de gestion des utilisateurs, la matrise des APIs du package org.alfresco.repo.security.person et org.alfresco.repo.security.authority. Lire la documentation ci-dessous :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-8-

1

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-4 - Action Model1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-5 - Transformation component ModelIl s'agit de matriser l'implmentation des composants du noyau qui permettent la prise en compte de l'intgration des moteurs de transformation de format de fichiers. Le dveloppeur Alfresco doit: - savoir comment intgrer un nouveau moteur de transformation de format de fichiers (Nous fournirons dans une prochaine version de ce guide un zip avec un exemple de code). - savoir comment dvelopper un composant permettant de plugger un moteur de transformation. - matriser les services fondamentaux du noyau permettant de raliser la transformation des documents. Lire la documentation ci-dessous : 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-6 - Alfresco Security ModelIl est question de matriser comment est implment la scurit dans Alfresco. Ce master inclut le master de la gestion des rles (ACLs), la scurisation des objets, l'utilisation des annuaires stockant les lments de scurit, la gestion des droits, les mcanismes d'authentification et d'autorisation etc.. Le modle de scurit est dcrit travers le fichier securityModel.xml. Le dveloppeur Alfresco doit: - savoir intgrer un annuaire du type LDAP pour la gestion des accs. - savoir intgrer le SSO avec NTLM. - savoir customiser le module de gestion des rles et ACLs. - savoir customiser le module de gestion des rles et ACLs. Lire la documentation ci-dessous : 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-1-7 - Alfresco Audit Management ModelLe but est de matriser l'implmentation de l'audit dans Alfresco. Des composants (interceptors) ont cette responsabilit. Lire la documentation ci-dessous :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

-9-

1

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

III-2 - Le dictionnaire de donnes et son extension1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

IV - L'ARCHITECTURE TECHNIQUE GNRALE DU FRAMEWORK ALFRESCO

IV-1 - Overview de l'architecture techniqueAlfresco est un framework open source permettant de dvelopper des applications de gestion de contenu. Alfresco est en architecture J2ee avec un web-tiers (JSF) et un Business-Tiers compos de services. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande de lire la documentation cidessous: 1 http://wiki.alfresco.com/wiki/ Alfresco_Repository_Architecture

V - LE BACK-END ALFRESCO: LES SERVICES OFFERTS PAR LA PARTIE SERVER DU REPOSITORYLe JCR Alfresco fournit un ensemble de services simples permettant de manipuler un Repository JSR-170. L'utilisation de ces services primitifs est assez complexe. Pour palier ce problme une couche de services de haut niveau encapsule toutes ces complexits. Cette couche est appele dans le jargon d'Alfresco: Repository Foundation Services. Ces services sont spcialiss c'est dire que pour chaque domaine fonctionnel de l'ECM (gestion des noeuds, gestion des versions, gestion des catgories, etc.) un service de haut niveau est ddi. Le dveloppeur Alfresco doit matriser les services du Repository Foundation Services ainsi que leurs APIs.

V-1 - NodeService@Package : org.alfresco.service.cmr.repository Le Node Service permet par exemple d'effectuer les oprations suivantes: o Obtenir la racine de l'arborescence des nodes d'un Workspace donn: Obtenir la racine de l'arborescence des nodes d'un Workspace donn:nodeService.getRootNode(companyHomeStore);

Cette instruction permet de rechercher et retourner une rfrence au node racine du Workspace contenant le node rfrenc par companyHomeStore (NodeRef). o D'obtenir une proprit d'un contenu reprsent par un node:

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 10 -

obtenir une proprit d'un contenu reprsent par un node:

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

(NodeRef)nodeService.getProperty(person,ContentModel.PROP_HOMEFOLDER);

Cette instruction permet de retourner la proprit du node rfrenc par person (NodeRef) et qualifi par le QName ContentModel.PROP_HOMEFOLDER. Notons que les proprits dfinies dans les modles de donnes sont qualifies par des QNames. o Vrifier si un contenu associ une URL existe dans le repository: Vrifier si un contenu associ une URL existe dans le repository:nodeService.exists(urlRef);

Cette instruction permet de vrifier si l'url "urlRef" est associe un contenu dans le repository. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous : 1 http:// wiki.alfresco.com/wiki/ Node_Service_API_Design

V-2 - ContentStoreService@Package: org.alfresco.repo.content Alfresco stocke les contenus binaires sur le File System travers un composant qui fournit les services de lecture et criture: ContentStoreService ContentStoreService permet d'obtenir des flux d'criture et de lecture des contenus dans le rfrentiel en utilisant des urls. ContentStoreService est un service interne c'est dire utilis par d'autres services (Content Service par exemple) pour lire et crire les contenus sur le systme de stockage. Alfresco range les fichiers binaires des contenus sur le systme de fichiers. Tous les fichiers binaires sont conservs dans le rfrentiel, dans un rpertoire racine nomm contentstore. Les fichiers sont rangs par anne, mois, jour, heure et minute, c'est--dire que, la racine de contentstore, un sous-dossier pour l'anne en cours (exemple: 2008) est cre par le JCR. Ce dossier contient des sous-dossiers de mois, de jours, ainsi de suite jusqu' la minute. Ainsi lorsque le JCR veut sauvegarder un fichier binaire, il cre cette sous-arborescence jusqu' la minute de cration du document. ContentStoreService est implment par la classe abstraite AbstractContentStore qui est la classe de base fournissant le support pour divers type de stockage de contenu. AbstractContentStore est tendue par une implmentation du stockage de contenu dans le systme de fichier: FileContentStore. FileContentStore fournit une implmentation du stockage des nodes directement dans le systme de fichier (le repository). FileContentStore utilise un contexte dans lequel toutes les informations pour le stockage, le traitement des mimetypes etc. sont conserves et rendues accessibles via des Url de la forme store://year/month/day/hour/ minute/GUID.bin (nous en parlons dans le paragraphe ci-dessous). Les noms des fichiers doivent obir la convention de nommage des Urls. Lorsqu'un contenu est stock sur le systme de fichier via (FileContentStore), l'url du document nouvellement stock est cre et le document est accessible via cette url. L'url a la syntaxe suivante: store://year/month/day/hour/ minute/GUID.bin Le GUID est le nom d'identification gnr par le JCR. Les fichiers imports sont renomms avec un GUID gnr automatiquement. Ce GUID est unique pour chaque fichier.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 11 -

Ainsi donc, le service ContentStore permet d'crire et de lire les fichiers binaires sur le systme de stockage en se basant sur des urls donc la convention est celle qui vient d'tre prsente. Un store est un Workspace dans le rfrentiel (repository). Un store contient les informations sur les nodes du Workspace et des rfrences vers les contenus binaires dans contentstore. Les Workspaces sont dfinis dans Alfresco partir de deux choses: Un protocole et un identificateur. Par exemple, le Workspace par dfaut utilis dans Alfresco est dfini par: Protocol = workspace Identifier = SpaceStore d'o store=workspace://SpacesStore Il est possible de crer d'autres stores en utilisant des identifier diffrents. Par exemple: store=workspace:// monStore. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous pour avoir une bonne vue sur Content Store Service: 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

V-3 - ContentService@Package: org.alfresco.service.cmr.repository ContentService fournit les fonctionnalits pour accder aux contenus et les manipuler. Il utilise le service ContentStoreService pour le stockage des contenus binaires et s'appuie aussi sur le service de transformation de format afin d'excuter les oprations de transformation de format (exemple : transformation .doc en .pdf). Alfresco stocke les mta-donnes primaires (c'est--dire les mtadonnes extraits des documents: le titre, l'auteur, date de cration, mimetype, etc.) et les mtadonnes applicatives (c'est--dire les proprits dfinies dans les modle M2) en base de donne. Le Framework ORM utilis pour accder la base de donnes est Hibernate. Ci-dessous quelques exemples d'utilisation de ce service:// get the content reader ContentReader reader = contentService.getReader(nodeRef, propertyQName); (1) // establish mimetype String mimetype = reader.getMimetype(); (2) // get the content and stream directly to the response output stream reader.getContent(res.getOutputStream());

L'instruction (1) permet de retourner un objet de type ContentReader qui permet de lire le contenu binaire proprit de type content (cm:content) sur le node rfrenc par le NodeRef nodeRef. Rappelons que les entits contenant des contenus binaires (c'est--dire des documents imports, des documents pouvant tre des images, des documents Word, Excel, PDF etc.) doivent tre de type content (cm:content) chez Alfresco. L'instruction (2) permet d'obtenir le type mime du contenu rattach au reader. L'instruction (3) permet de lire les binaires du contenu du repository et l'crire dans l'OutPutStream. Notons que ContentService permet galement d'obtenir un objet de type ContentWriter qui permet d'crire un contenu binaire dans le repository (sur le File System). Il permet galement de transformer les contenus. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous pour avoir une bonne vue sur Content Service:

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 12 -

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

1

http://wiki.alfresco.com/wiki/ Content_Service_API

V-4 - FileFolderService@Package: org.alfresco.service.cmr.model FileFolderService fournit mthodes spcifiques pour manipuler les contenus "fichiers" et les contenus "dossiers". Ce service permet de rechercher des fichiers ou des dossiers d'aprs leur nom, de renommer un fichier ou un dossier, dplacer un fichier ou un dossier un autre emplacement, de copier un fichier ou un dossier dans le presse-papier. Ce service permet de crer des fichiers et des dossiers, de les supprimer (ils peuvent tre archivs). Ce service utilise le service ContentService pour raliser l'criture et la lecture du contenu dans le systme de stockage. Ce service est implment par le composant FileFolderServiceImpl. Cette implmentation s'appuie: - Le Namespace Service: afin d'utiliser les modles enregistrs de faon unique dans la plateforme partir de namespaces. Notons que c'est le service Namespace Service qui permet d'utiliser l'objet QName pour identifier les entits (proprits, types, aspects, associations). - Le Dictionnary Service : pour utiliser les entits dfinis dans le dictionnaire de donnes (c'est--dire les types de donnes dfinis dans les modles comme dictionnaryModel.xml, contentModel.xml, blogModel.xml, monModel.xml etc.). - Le Node Service: pour manipuler les nodes grce au NodeRef (rfrence des nodes chez Alfresco). - Le Tenant Service:@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO - Le Copy Service: pour effectuer les copies dans le presse-papier (pouvant tre coll n'importe o). - Le Search Service: pour effectuer la recherche. - Le Content Service: pour l'criture et lecture des contenus binaires dans le systme de stockage. - Le MimeType Service: pour la gestion des types de fichiers et pour les transformations de format. Le Service fournit l'api pour manipuler les contenus de type folder ou hritant du type folder (c'est--dire que si vous dfinissez un type de contenu hritant du type cm:folder alors il sera manipul comme tout autre contenu de type dossier). Ci-dessous quelques exemples d'utilisation dans un programme:List liste = fileFolderService.list(contextNodeRef) (1) nodeRef = fileInfo.getNodeRef(); (2)

L'instruction (1) permet lister les fichiers et dossiers dont les noeuds sont des enfants immdiats du node contexte (c'est--dire le noeud courant) contextNodeRef. Les informations de chaque fichier et dossier retrouv sont ranges dans un objet de type FileInfo. Les objets de type FileInfo sont utiliss par encapsuler les informations (c'est--dire les proprits) des contenus fichiers et dossiers). L'instruction (2) montre comment il est possible d'obtenir la rfrence d'un noeud de contenu partir d'un objet FileInfo fournissant les informations sur lui. Notons galement l'exemple ci-dessous:List liste fileFolderService.search( NodeRef contextNodeRef, String namePattern, boolean includeSubFolders);

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 13 -

Cette instruction permet de rechercher tous les fichiers et dossiers dont les noms match avec le pattern namePattern et contenus dans le contexte du noeud contextNodeRef (c'est--dire les noeuds de dossiers et fichiers contenus dans le sous-arbre de racine contextNodeRef). Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous pour avoir une bonne vue sur FileFolder Service: 1 http://dev.alfresco.com/ resource/docs/java/repository/ org/alfresco/service/cmr/ model/FileFolderService.html

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

V-5 - DictionnaryService@Package: org.alfresco.service.cmr.dictionary Ce service interne, c'est--dire utilis par d'autres services, fournit les fonctionnalits pour manipuler les entits dfinies dans les modles de base de la plateforme Alfresco et les modles intgrs par le dveloppeur (c'est--dire les modles de donnes de votre domaine vous). Il permet de manipuler le dictionnaire de donnes c'est--dire la banque de tous les types de donnes enregistrs et manipuls par la plateforme. Ce service fournit les accs aux mtadonnes de contenus comme les types (Type) et les descriptions des Aspects (Aspect description), les proprits, les associations. Le dictionnaire de donnes s'appuie sur les modles de donnes dfini dans les modles M1 comme dictionnaryModel.xml et les modles M2 (les modles de base comme contentModel.xml et les modles tendus c'est--dire les modles de donnes dfinis le dveloppeur utilisant les modles de base). Notons qu'un modle est identifi par un ou plusieurs namespaces et un prefix. Le DictionaryService permet entre autre de retrouver tous les modles qui ont t enregistrs, de retourner un modle d'aprs son nom qualificatif (QName), de retrouver tous les types de donnes et ceux d'un modle donn, de retrouver tous les aspects dfinis dans un modle, d'obtenir la dfinition de la classe d'une entit, de vrifier si une classe est sous-classe d'une autre. DictionaryService permet d'obtenir les informations (la dfinition) d'une proprit d'une entit dfinie dans un modle. Bref, DictionaryService permet de fournir tous les services pour manager les types de donnes. Ci-dessous quelques exemples d'utilisation dans un programme:// return the names of all models that have been registered with the Repository Collection models = dictionaryService.getAllModels() ; (1) ModelDefinition modelDef = dictionaryService.getModel(QName model); (2) Collection datas = dictionaryService.getAllDataTypes(); (3) Collection aspects = dictionaryService.getAllAspects(); (4) ClassDefinition classDef = dictionaryService.getClass(QName name); (5 PropertyDefinition propDef = dictionaryService.getProperty(QName className, QName propertyName); (6)

L'instruction (1) retrouve tous les modles qui ont t enregistrs dans le repository. L'instruction (2) retrouve un modle partir de son nom qualificatif (QName). L'instruction (3) retourne tous les types de donnes qui ont t enregistrs dans le repository. L'instruction (4) retourne tous les aspects qui ont t enregistrs dans le repository. L'instruction (5) permet de dterminer les informations sur la classe dfinissant le type de donnes qualifi par le nom (QName) name. L'instruction (6) retrouve la dfinition d'une proprit d'une classe donne. Le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous pour avoir une bonne vue sur Dictionnary Service:- 14 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

1

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/service/cmr/ dictionary/DictionaryService.html

V-6 - NamespaceService@Package: org.alfresco.service.namespace Ce service offre des fonctionnalits permettant de manipuler les namespaces, les prfixes etc. Par exemple pour enregistrer un prefix pour un namespace uri, on peut faire:registerNamespace(String prefix, String uri).

Pour voir les API de ce service, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous: 1 http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/service/ namespace/NamespaceService.html

Pour avoir la liste des namespaces de bases de la plateforme Alfresco, il faut lire la documentation ci-dessous: 1 http://wiki.alfresco.com/wiki/ Alfresco_Namespaces

V-7 - VersionService@Package: org.alfresco.service.cmr.version Le service VersionService fournit une API pour manipuler les versions des objets, que ce soit les versions d'un node simple (c'est un vulgaire node reprsentant un type de contenu de base), ou bien les versions d'une traduction d'un document, ou mme les versions d'un conteneur de traduction d'un contenu. Bref la gestion des versions fait l'abstraction sur le type de l'objet dont les versions sont gres. Ce service fournit des API pour crer de nouvelles versions d'un node partir de son NodeRef. Il permet d'avoir l'historique des versions d'un node partir de son NodeRef. Il permet de restaurer un node qui a un historique de versions. Les versions de document sont stockes dans le store lightWeightVersionStore. Le service de gestion des versions s'appuie sur le modle version_model.xml org.alfresco.repo.version) de namespace: http://www.alfresco.org/model/versionstore/1.0 (@Package:

AbstractVersionServiceImpl est l'implmentation abstraite de base de VersionService. Une implmentation concrte est VersionServiceImpl. VersionServiceImpl tend l'abstract AbstractVersionServiceImpl et implmente aussi l'interface VersionModel contenant les constantes (entre autres les QName des entits du modle des versions) utilises pour l'implmentation. Quelques exemples:VersionHistory vh = versionService.getVersionHistory(NodeRef node); (1) - 15 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY) VersionHistory vh = versionService.getVersionHistory(NodeRef translation); (2)

L'instruction (1) permet de retrouver l'historique des versions d'un contenu associ au Node node. L'instruction (2) est quivalente la (1) sauf qu'elle fournit plutt l'historique des versions d'une traduction d'un contenu. Pour avoir une meilleure vue sur le service VersionService, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous: 1 2 http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/service/cmr/ version/VersionService.html http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/repo/version/ VersionServiceImpl.html

V-8 - VersionHistoryService@Package: org.alfresco.service.cmr.version Ce service collecte les versions constituant l'historique des versions d'un objet. Il fournit aussi des oprations sur les historiques. Il est implment par le composant VersionHistoryImpl qui permet d'accder l'historique des versions, de naviguer entre les versions et d'ajouter des versions l'historique des versions d'un node. Pour avoir une meilleure vue sur le service VersionHistoryService, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous: 1 2 http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/jcr/version/ VersionHistoryImpl.html http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/repo/version/ VersionServiceImpl.html

V-9 - NodeArchiveService@Package: org.alfresco.repo.node.archive @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-10 - SearchService@Package: org.alfresco.service.cmr.search Ce service fournit les API de recherche travers diffrents mcanismes d'indexage. Ses implmentations fournissent la recherche partir de 3 langages: XPath, lucene, et jcr-XPath. Il permet de rechercher dans un store (Workspace) en prenant en entre des classes encapsulant des paramtres de recherche, la langage de requtage utiliser (parmi les 3 cits).

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 16 -

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Diagramme de classes simplifi de Search Service SearchService est l'interface du service de recherche (Search). AbstractSeacherComponent est l'implmentation de base du service SearchService. Elle est abstraite. SearcherComponent est le composant de recherche, il tend AbstractSearcherComponent.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 17 -

Pour fonctionner, SearcherComponent s'appuie sur un objet de type IndexerAndSearcher LuceneIndexerAndeSearcher en est une implmentation relative l'indexage et la recherche lucene).

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

(dont

Indexer est l'interface du service l'indexage. IndexerComponent est une implmentation de Indexer. Pour fonctionner, IndexerComponent s'appuie sur un objet de type IndexeAndSearcher. Ci-dessous un exemple:List refs = searchService.selectNodes(nodeService.getRootNode(companyHomeStore), companyHomePath, parameters, namespaceService, false);

Cette instruction permet de retrouver une liste de noeuds selon des critres donns. Ici les paramtres sont: - nodeService.getRootNode(companyHomeStore): sous-arbre des noeuds reprsentant l'arborescence partir duquel doit s'effectuer la recherche - parameters: objet contenant une chane XPath parametrable contenant les paramtres de recherche - namespaceService: le NameSpaceService. - Boolean: de valeur false, permet de prciser si la rechercher s'effectuer jusqu'aux feuilles du sous-arbre. Notons que SearchService permet de faire la recherche sur les proprits des contenus et plus encore. Pour avoir une meilleure vue sur le service SearchService, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous: 1 @COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-11 - ADMSearchService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-12 - LockServiceCe Service vital fournit une API pour verrouiller et dverrouiller des nodes afin d'viter toute modification concurrente. Tant que le node d'un contenu est verrouill, un autre utilisateur ne peut modifier le contenu du noeud jusqu' ce que le node du contenu soit unlock (dverrouill). Quelques exemples d'utilisation:lockService.lock(NodeRef nodeRef, LockType lockType); (1) lockService.unlock(NodeRef nodeRef, boolean lockChildren); (2)

L'instruction (1) permet de verrouiller le contenu de node rfrenc par le NodeRef nodeRef. lockType est le type de verrou utilis, c'est un objet de type LockType. L'instruction (2) enlve le verrou sur le contenu de node rfrenc par le NodeRef nodeRef et optionnellement sur ses enfants (lockChildren). Pour avoir une meilleure vue sur le service LockService, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous:

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 18 -

1

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-13 - LuceneCategoryService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-14 - AuditService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-15 - ActionServiceUne Action Alfresco est une unit de tche qui peut tre excute sur un node. Exemple: transformer le document reprsent par le node, envoyer le document par email dans un fichier attach, copier le document, lancer une opration de sauvegarde de tout le repository etc. Une action est une opration qu'on peut effectuer partir d'un node. L'opration n'est toujours pas forcement applique sur le node courant et elle peut impacter tout ou partie des nodes du repository ou d'un Workspace. Les Actions Alfresco sont excutables depuis le Client Web partir d'un gestionnaire de rgles (rules) qui affiche la liste des actions excutables. La plateforme permet ainsi au dveloppeur de dvelopper de nouvelles fonctionnalits et de les intgrer. Ci-dessous le diagramme de classes simplifi :

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 19 -

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Diagramme de classes Action Service Le service ActionService permet de dfinir les actions (liste des entits sur lesquelles l'action est applicable). Ce service permet de grer les conditions des actions (les conditions dont la ralisation permet d'excuter l'action).http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 20 -

Ce service permet de crer de nouvelles actions Alfresco, d'excuter les actions (aprs avoir vrifi que les conditions associes l'action sont ralises) et enfin de supprimer des actions. ActionService est implment par ActionServiceImpl qui fournit tout le ncessaire pour grer les actions Alfresco. ActionServiceImpl implmente RuntimeActionService (permet de grer la liste des actions dans la plateforme, de les enregistrer, de les excuter, etc.). ActionServiceImpl implmente aussi ApplicationContextAware de Spring. Le service ActionService s'appuit sur le modle ActionModel. Le dveloppement d'une Action Alfresco implique le couple (ActionCondition, ActionExecuter). ActionCondition est une condition qui doit tre ralise afin que ActionExecuter qui est l'unit de tche soit lance.

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

V-16 - AttributService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-17 - ScriptService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-18 - RuleServiceCe service vital fournit une API pour manipuler les rgles de gestion dans le systme. Rappelons qu'une rgle de gestion est un mcanisme qui permet de dicter des conduites tenir, contrler la ralisation de certaines conditions (faisant partie intgrante de la dfinition des rgles) et ventuellement engager certaines oprations. Le Framework de gestion des rgles de gestion Alfresco s'appuie sur un modle qui est vraiment interne et ne demande aucune intervention d'un dveloppeur. Le modle des rgles est interne et n'est utilis et compris que par les composants internes au noyau qui constituent le Framework des rgles de gestion. Donnons quelques exemples de rgle pour claircir les ides. On peut avoir une rgle de gestion sur un dossier qui est dclenche chaque fois qu'un document est ajout dans le node associ. On peut avoir une rgle qui est dclenche quand un contenu est dplac d'un node. Notons aussi qu'il est trs commode d'utiliser les rgles de gestion pour implmenter des logiques mtiers bases sur des workflows (Approved, review etc.). Quelques exemples de code:RuleType ruleType = ruleService.getRuleType(String name); (1) boolean hasRule = ruleService.hasRules(NodeRef nodeRef); (2) List liste = ruleService.getRules(NodeRef nodeRef); (3) ruleService.removeRule(NodeRef nodeRef, Rule rule); (4)

L'instruction (1) permet de retrouver une rgle d'aprs son nom. Notons que les objets de type RuleType permettent de dfinir les rgles. Les rgles sont identifiables par des noms. Une entit rgle est dfinie par la classe Rule. L'instruction (2) permet de dterminer si un node contient une rgle de gestion qui lui est associe. L'instruction (3) retrouve toutes les rgles associes un node rfrenc par un NodeRef y compris les rgles hrites des nodes parents. Notons que les entits Rule sont retournes. L'instruction (4) enlve une rgle de gestion sur un node.

V-19 - AuthenticationServiceLe service d'authentification dfinit une API pour manager les informations d'authentification des utilisateurs. L'implmentation de base est AuthenticationComponentImpl.- 21 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

AuthenticationComponentImpl s'appuie sur ACEGI security (net.sf.acegisecurity). Cette implmentation utilise aussi l'Authentication Manager et le provider AuthenticationDao d'ACEGI pour retourner un UserDetails contenant les autorisations de l'utilisateur authentifi. Enfin AuthenticationComponentImpl utilise MD4 pour crypter les mots de passe. AuthenticationComponentImpl utilise les services PersonService (qui gre les profiles utilisateurs), le NodeService, le TransactionService et le TenantService. Il permet aussi de grer les l'utilisateur invit (GUEST USER). AuthenticationComponentImpl utilise le modle userModel.xml dfinissant l'entit user. Notons les que les implmentations concrtes ci-dessous tendent AuthenticationComponentImpl: - JAASAuthenticationComponent: pour l'authentification partir de JAAS - LDAPAuthenticationComponentImpl: pour l'authentification par LDAP - NTLMAuthenticationComponentImpl: pour l'authentification par NTLM. Quelques exemples:// authenticate and get a ticket authenticationService.authenticate(username, password.toCharArray()); (1) // get the current ticket authenticationService.getCurrentTicket(); (2) // Clear current security context authenticationService.clearCurrentSecurityContext(); (3) authenticationService.getCurrentUserName() ; (4) // Update the login information for the user (typically called by the user) authenticationService.updateAuthentication(String userName, char[] oldPassword, char[] newPassword); (5)

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

l'implmentation

de

base

L'instruction (1) permet d'authentifier un utilisateur dans le systme, de crer et charger tous les informations relatives l'utilisateur dans un contexte de scurit. Un ticket est cre pour la session de l'utilisateur. L'instruction (3) permet de vider le contexte courant de scurit ce qui fait qu'ainsi l'utilisateur n'est plus authentifi. L'instruction (4) permet d'obtenir le nom de l'utilisateur authentifi. L'instruction (5) permet d'update les informations de login de l'utilisateur. Pour avoir une meilleure vue sur le service AuthenticationService, le Centre de Comptences Alfresco-jBPM de Koossery Technology recommande la documentation ci-dessous: 1 2 http://dev.alfresco.com/resource/docs/ java/repository/org/alfresco/service/cmr/ security/AuthenticationService.html http://dev.alfresco.com/resource/ docs/java/repository/org/alfresco/ repo/security/authentication/ AuthenticationComponent.html http://wiki.alfresco.com/wiki/ Security_and_Authentication

3

V-20 - PermissionServiceCe service vital permet de grer les permissions, de vrifier les droits, de vrifier si une entit possde un rle lui permettant d'effectuer une certaine opration, de vrifier si un utilisateur appartient un groupe d'utilisateur ayant des droits d'oprations sur quelque chose.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 22 -

Notons qu'un modle permet de dfinir de faon standard le modle de permission d'Alfresco. Mais ce modle est interne c'est--dire utilis par le composant interne du noyau et donc non manipulable par le dvloppeur, moins de vouloir changer un comportement dans le noyau. Ci-dessous quelques exemples:Set permissions permissionService.getPermissions(NodeRef nodeRef); (1) AccessStatus status permissionService.hasPermission(NodeRef nodeRef, String permission); (2)

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

L'instruction (1) permet de fournir toutes les permissions que l'utilisateur courant authentifi (reprsent par l'objet de type authentication d'ACEGI) possde sur l'objet reprsent par le NodeRef nodeRef. L'instruction (2) vrifie si l'utilisateur courant authentifi possde la permission identifie par la String permission sur l'objet rfrenc par le NodeRef nodeRef.

V-21 - AuthorityServiceCe Service vital fournit une API pour manager les autorisations des utilisateurs. Quelques exemples:Boolean isAdmin = authorityService.hasAdminAuthority(); (1) Set authorities = authorityService.getAuthorities(); (2)

L'instruction (1) vrifie si l'utilisateur courant a les autorisations d'Administrateur. L'instruction (2) retrouve les autorisations de l'utilisateur courant (celui qui est authentifi).

V-22 - PersonServiceCe Service vital permet de manager les utilisateurs et les groupes d'utilisateurs. Notons que les types de donnes reprsentant les utilisateurs et les groupes d'utilisateurs sont matrialiss comme des contenus. Ceci veut dire qu'un utilisateur est manipul dans le systme grce un node. Le type de contenu reprsentant un utilisateur est dfini dans un modle M2. Ce modle est extensible si vous voulez ajouter des proprits et des comportements supplmentaires dans les gestions des utilisateurs et des groupes d'utilisateurs. Notons galement que les utilisateurs et groupes d'utilisateurs peuvent tre soit entirement manipuls dans le repository (c'est--dire que les informations sur les utilisateurs sont gr par Alfresco), soit manipuls depuis une implmentation LDAP ou NTLM. Quelques exemples:NodeRef person = personService.getPerson(String userName); (1) personService.setPersonProperties(String userName, Map properties); (2) personService.deletePerson(String userName); (3) personService.getAllPeople(); (4)

L'instruction (1) permet de retrouver un utilisateur partir du username. Remarquons que c'est un NodeRef (c'est-dire un noeud) qui est retourn. Ceci dit, le type utilisateur est manipul comme tout type de contenu partir de noeud. L'instruction (2) permet de modifier ou de dfinir un ensemble de proprits d'un utilisateur de username userName. L'instruction (3) permet de supprimer l'utilisateur identifi par le username userName. L'instruction (4) permet de retourner tous les utilisateurs connus du systme.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 23 -

V-23 - CategoryService

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Ce Service vital fournit une API pour manipuler les catgories. Rappelons que les catgories sont une faon de classifier les documents. Associer un document une catgorie c'est signifier que ce document est de cette catgorie. Il est ainsi possible de rechercher les documents partir d'une catgorie. On distingue les catgories et les souscatgories. Une sous-catgorie hrite d'une autre. Ainsi, un document d'une sous catgorie est aussi de la catgorie mre de la sous catgorie. Alfresco vient avec des catgories de base mais il est possible d'en crer de nouvelles partir du Client Web. CategoryService permet de faire des recherches et de crer des catgories de documents. Quelques exemples:NodeRef category = categoryService.createCategory(NodeRef parent, String name); (1)

L'instruction (1) permet de crer une catgorie dans nom "name" en dessous d'un node "parent".

V-24 - UsageService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-25 - CheckOutCheckinServiceCe Service vital fournit une API pour check-in et check-out les contenus. Rappelons que check-out un document c'est crer un copie de travail de ce document en verrouillant la copie originale (c'est--dire que personne d'autre ne peut plus effectuer une modification tant que le document n'est pas check-in). Check-in permet de merger les modifications de la nouvelle version du document dans la copie originale et de dverrouiller le document. Quelques exemples:NodeRef workingCopyRef = cicoService.checkout(NodeRef nodeRef); (1) NodeRef newCopy = cicoService.checkin( NodeRef workingCopyNodeRef, Map versionProperties, String contentUrl); (1)

L'instruction (1) permet de check-out le document de noeud rfrenc par le NodeRef nodeRef et de crer une copie de travail sur lequel seront effectues les modifications avant prise en compte dans la copie originale. L'instruction (2) permet de check-in le document. L'opration n'est pas directement excute car il y'a d'abord les oprations de versionning qui sont effectues afin de crer une nouvelle version du document d'aprs la modification effectue. L'argument versionProperties spcifie les proprits de la nouvelle version. L'argument contentUrl reprsente l'url de la copie de travail: s'il est NULL, alors le contenu de la copie de travail sera copi dans la copie initiale directement.

V-26 - MimeTypeServiceCe service est trs utile et intervient en combinaison avec le service ContentService. Il permet de fournir ( travers un Map qu'il dtient) le type mime associ une extension, de fournir l'extension associe un type mime, de fournir tous les types mime, etc. Quelques exemples:- 24 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY) String mt = mimetypeService.getMimetypesByExtension().get(ext); (1)

L'instruction (1) permet de fournir le type mime associ l'extension (exemple : .pdf, .doc, .txt) reprsent par le String ext.

V-27 - MimeTypeConfigService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-28 - MessageService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-29 - ContentFilterLanguagesService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-30 - WorkflowServiceCe Service vital fournit une API pour interagir avec les workflows et les tches Alfresco. WorkflowService permet de dployer des workflows dfinis suivant un principe dict par la classe WorkflowDefinition. Le manager de workflow Alfresco pilote l'infrastructure permettant divers types de moteur de workflow de fonctionner. L'api du service permet de spcifier un id correspondant un moteur utiliser (moteur qui a t au pralable enregistr dans la plateforme). Comme moteur de workflow prenrgistr dans la plate-forme, nous avons jBPM (JBoss Business Process Management). Quelques exemples:WorkflowDeployment workflowDescriptor = workflowService.deployDefinition(String engineId, InputStream workflowDefinition, String mimetype); (1) WorkflowDeployment workflowService.deployDefinition(NodeRef workflowDefinition); (2) List tasksList = workflowService.getTasksForWorkflowPath(String pathId); (3)

L'instruction (1) permet de dployer un workflow dfini dans l'inputStream workflowDefinition de type mime mimetype. Elle demande d'utiliser le moteur de workflow d'id engineId. L'instruction (2) est quivalente au (1) sauf qu'elle dploie un workflow dfinie dans le repository Alfresco travers le contenu de NodeRef workflowDefinition contenant la dfinition du workflow. Le contenu dfinissant le workflow doit tre du type bpm:workflowdefinition dfini dans le modle des workflows jbpmModel.xml. L'instruction (3) permet d'obtenir tous les tches associes au workflow dont le node est identifi par le path pathId. Remarquons que les tches de workflow sont dfinies partir de la classe WorkflowTask.

V-31 - ImporterService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 25 -

V-32 - MultilingualContentService

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

Ce service fournit une API pour manipuler la traduction des contenus. Notons que ce service concerne les donnes de type "content" c'est--dire cm:content car il s'agit de la traduction de contenu. Alfresco dfinit des groupes de traduction. Si un document fait partie d'un groupe de traduction alors il est traductible dans la langue du groupe. Afin de mieux comprendre cette notion, dcrivons comment sont gres les traductions des documents. Notons que cette logique s'appuie sur les modles de donnes multilinguismes dcrits dans le modle contentModel.xml. Une traduction d'un document c'est--dire une copie d'un document traduit dans un langage de locale donne est reprsent par le type de contenu cm:mlDocument (qui est un aspect). L'ensemble des traductions d'un document est contenu dans un conteneur de type ml:mlContainer qui est du type sys:container (c'est--dire que c'est un conteneur d'entits). Ainsi donc, les composants de multilinguisme usent de ce modle pour grer les traductions des documents. Quelques exemples:Boolean b = multilingualContentService.isTranslation(NodeRef contentNodeRef); (1) multilingualContentService.makeTranslation(NodeRef contentNodeRef, Locale locale); (2) Map locales = translationOfNodeRef); (3) multilingualContentService.getTranslations(NodeRef

L'instruction (1) permet de vrifier si le contenu (de type content cm:content) reprsent par le node rfrenc par le NodeRef contentNodeRef appartient un groupe de traduction. L'instruction (2) permet de traduire un document dans la langue de Locale locale, ceci en lui ajoutant l'aspect cm:mlDocument (c'est une faon de greffer le comportement qui permettra de traduire en background le document dans la langue de locale spcifie. Notons que cet aspect est un aspect de base de la plateforme Alfresco). L'instruction (3) retrouve toutes les traductions d'un contenu.

V-33 - EditionServiceCe Service vital fournit une API pour manipuler les versions des conteneurs des traductions d'un document. Afin de mieux comprendre cette notion, faisons un retour arrire pour dcrire comment sont gres les traductions des documents. Les traductions s'appuient sur le modle de multilinguisme (ml:) dcrit dans le modle contentModel.xml. Une traduction d'un document c'est--dire une copie d'un document traduit dans un langage de locale donne est reprsente par le type de contenu cm:mlDocument (qui est un aspect). L'ensemble des traductions d'un document est contenu dans un conteneur de type ml:mlContainer qui est du type sys:container (c'est--dire que c'est un conteneur d'entits). Les conteneurs ml:mlContainer sont aussi versionnables. EditionService est un service qui permet alors de manipuler les versions des cm:mlContainer. Quelques exemples:VersionHistory vh = editionService.getEditions(NodeRef mlContainer); (1)

L'instruction (1) fournit l'historique des versions d'un conteneur de translations rfrence par le NodeRef mlContainer.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 26 -

V-34 - AdminService

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-35 - OwnableServiceCe Service vital fournit une API permettant de manager la notion de proprit sur des entits. Quelques exemples:// Get the username of the owner of the given object. String userName = ownableService.getOwner(NodeRef nodeRef); (1) // Set the owner of the object. ownableService.setOwner(NodeRef nodeRef, String userName); (2)

L'instruction (1) permet d'obtenir le Username du propritaire du contenu de noeud rfrenc par le NodeRef NodeRef. L'instruction (2) permet de donner la proprit du contenu de noeud rfrenc par le NodeRef nodeRef l'utilisateur de Username userName.

V-36 - CopyServiceCe Service vital fournit une API pour copier des nodes du workspace de travail et d'updater l'tat d'un autre node avec celui du node copi. Le node updat pouvant tre dans le workspace de travail ou bien dans un autre workspace. Quelques exemples:NodeRef newNode = copyService.copy( NodeRef sourceNodeRef, NodeRef destinationParent, QName destinationAssocTypeQName, QName destinationQName, boolean copyChildren); (1) NodeRef newNode = copyService.copyAndRename( NodeRef sourceNodeRef, NodeRef destinationParent, QName destinationAssocTypeQName, QName destinationQName, boolean copyChildren); (2)

L'instruction (1) copie le node source de rfrence sourceNodeRef vers le parent node destinationParent. destinationAssocTypeQName est le type de la nouvelle association enfant. destinationQName est le nom qualificatif de l'association entre le parent et le nouveau node. copyChildren indique si les enfants du node doivent aussi tre copis. L'instruction (2) est identique au prcdent, mais renomme le nouveau node afin d'viter la duplication de noms.

V-37 - AVMService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-38 - ExporterService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO- 27 -

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

V-39 - Template Service

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-40 - TransactionService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-41 - DeploymentService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-42 - EmailService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-43 - ModuleService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-44 - DescriptorService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-45 - TenantService@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

V-46 - ServiceRegistryC'est le Finder c'est--dire que c'est le service qui permet d'accder au autre service. Celui-ci met en oeuvre le design pattern service Locator. Par exemple pour accder un service on fait:NodeService nodeService = serviceRegistry.getNodeService(); (1) ContentService contentService = serviceRegistry.getContentService(); (2) SearchService searchService = serviceRegistry.getSearchService(); (3) ... ...

L'instruction (1) permet d'obtenir le composant du NodeService. Ainsi de suite pour les autres.

VI - LA GESTION DES EXCEPTIONS DANS ALFRESCOLe but est de matriser comment sont gr les exceptions dans Alfresco et de pouvoir faire des customisation.

http://koossery-tech.developpez.com/tutoriels/java/ecm/alfresco-jbpm/bible-developpeur-alfresco-jbpm-guide-complet-developpeur-alfresco-jbpm/

- 28 -

VI-1 - Alfresco Exception Management Model

La Bible du dveloppeur Alfresco: guide du dveloppeur Alfresco (1re dition) par Landry KOUAM (Centre de Comptences Alfresco-jBPM, KOOSSERY TECHNOLOGY) Bak Jc. BAKENEGHE (Software Coordinator, KOOSSERY TECHNOLOGY)

@COMING SOON DANS LA PROCHAINE VERSION DE LA BIBLE DU DEVELOPPEUR ALFRESCO

VII - LES WORKFLOW DANS ALFRESCODans Alfresco nous distinguons deux catgories de Workflow : - Workflow de simple processus d'approbation: workflow simples - et Workflow de management de processus mtier complexe: workflow avancs

VII-1 - Workflow simplesLe Workflow simple d'Alfresco est le mouvement des documents travers les espaces (dossiers) : il est possible d'attacher un workflow simple un document et de notifier les collaborateurs qui peuvent traiter le document. Ces collaborateurs peuvent effectuer des oprations Approval et Reject. A partir de rgles des gestions il est possible de raliser le dplacement des documents entre espaces en fonction de l'tat du document et de l'action effectue sur le document. L'implmentation de cette catgorie basique de workflow ne ncessite de pas de code. Il s'agit ici d'implmenter le business process partir de la plateforme directement dans le Client Web.

VII-2 - Workflow avancsUne autre catgorie plus importante est les workflows complexes (Advanced Workflows). Alfresco utilise le moteur jBPM (JBoss Business Process Management) dans son noyau. Alfresco a extrmement rendu ce moteur extensible pour le dveloppement de workflow complexes bass sur des processus orients tche (dlgation de tches des collaborateurs et des groupes de collaborateurs, avec un timing, des dlais, des notifications email etc...). Alfresco utilise le langage de workflow jPDL pour l'expression de processus mtier de faon graphique ou manuel (XML) en terme de tches, d'tat d'attente, de synchronisation de la communication, de timers et d'actions automatises. Pour dvelopper une extension en implmentant un workflow avanc grce Alfresco, il est indispensable: - De matriser ce que c'est qu'un workflow Ad-hoc et tous les concepts autour du management de processus a