IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel Alfresco et jBoss BPM : exemple d'implémentation d'un workflow avancé de gestion des dossiers de crédit

Tutorial Alfresco - jBPM:
exemple d'implmentation d'un workflow avanc

Date de publication : 12 mai 2009


IV. Implmentation de la solution dans Alfresco
IV-1. Modlisation des types de contenu ('Content Type model')
IV-1-1. Exemple de modlisation (Content Type model) de la Fiche de demande de crdit
IV-2. Modlisation des tches du Workflow (Task Content Model)
IV-2-1. Exemple de modlisation (Task Content Model) de la tche "dispatch-application"
IV-3. Implmentation du management des tches dans la plateforme Alfresco
IV-3-1. Configuration du Client Web pour l'affichage des tches
IV-3-2. Internationalisation I18N
IV-3-3. Ralisation d'un dashlet pour l'affichage des tches relatives aux crdits dans le tableau de bord des utilisateurs
IV-4. Implmentation des fonctionnalits ralises au sein du Workflow
IV-4-1. Implmentation de la fonctionnalit de Numrisation et de l'Archivage
IV-4-2. Implmentation de la fonctionnalit de cration des fiches et des rapports
IV-4-3. Implmentation de la cration d'un garant
IV-4-4. Implmentation de la cration d'une garantie
IV-4-5. Implmentation de la cration d'un document d'identification
IV-4-6. Implmentation de la cration d'un contrat


IV. Implmentation de la solution dans Alfresco

La solution t implmente avec Alfresco. Alfresco fournit un mcanisme conceptuel et des APIs pour la ralisation du BPM sous forme d'une application web J2EE.
Le diagramme d'activits prconis par le Centre de Comptence Alfresco/jBPM de Koossery Technology pour l'implmentation d'un workflow se rsume au tableau ci-dessous:

Figure 23 : Diagramme d'activits de l'implmentation d'un Workflow prconis par le Centre de Comptence Alfresco/jBPM de Koossery Technology
Figure 23 : Diagramme d'activits de l'implmentation d'un Workflow prconis par le Centre de Comptence Alfresco/jBPM de Koossery Technology

Nous allons appliquer ce diagramme d'activits sur le cas d'tude du Workflow d'approbation du crdit.


IV-1. Modlisation des types de contenu ('Content Type model')

Ci-dessous le schma du modle d'entit de l'application :

Figure 24 : Data model de la demande de crdit
Figure 24 : Data model de la demande de crdit

Le content type model de chaque entit du schma ci-dessus (figure 24) doit tre crit l'aide du dictionnaire de donnes Alfresco. Le paragraphe IV-1-1 montre le content model de l'entit "creditRecordApplication" (Fiche de demande de crdit).


IV-1-1. Exemple de modlisation (Content Type model) de la Fiche de demande de crdit

Figure 25 : Content Model de la fiche de demande de crdit

<!-- Credit Application Record -->
		<type name="creditApprobation:creditRecordApplication">
			<title>Credit application record</title>
			<parent>cm:folder</parent>			
			<properties>
				<property name="creditApprobation:creditNumber">
					<title>Credit number</title>
					<type>d:text</type>
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:creditProduct">
					<title>Credit product</title>
					<type>d:text</type>			
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:applicationDate">
					<title>Application date</title>
					<type>d:date</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:amount">
					<title>Amount</title>
					<type>d:float</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:annualInterestRate">
					<title>Annual interest rate</title>
					<type>d:float</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:nbOfInstallmentPayment">
					<title>Number of Installment Payment</title>
					<type>d:long</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:installmentType">
					<title>Installment type</title>
					<type>d:text</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:interestCalculationMethod">
					<title>Interest Calculation Method</title>
					<type>d:text</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:lastMaturityCapital">
					<title>Last maturity capital</title>
					<type>d:float</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:creditLine">
					<title>Credit line</title>
					<type>d:text</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:agent">
					<title>Agent</title>
					<type>d:text</type>					
					<mandatory>true</mandatory>
				</property>
				<property name="creditApprobation:interestCalculationByDay">
					<title>interest calculation by day</title>
					<type>d:boolean</type>					
					<mandatory>false</mandatory>
				</property>
				<property name="creditApprobation:agreedPrepaymentOfInterest">
					<title>Agreed sum for prepayment of interest</title>
					<type>d:boolean</type>					
					<mandatory>false</mandatory>
				</property>
				<property name="creditApprobation:deductInterestAtOutlay">
					<title>Deduct interest at outlay</title>
					<type>d:boolean</type>					
					<mandatory>false</mandatory>
				</property>
				<property name="creditApprobation:interestDuringTheGracePeriod">
					<title>Interest during the grace period</title>
					<type>d:boolean</type>					
					<mandatory>false</mandatory>
				</property>
				<property name="creditApprobation:stagger">
					<title>To stagger</title>
					<type>d:boolean</type>					
					<mandatory>false</mandatory>
				</property>
			</properties>
			<associations>
				<child-association name="creditApprobation:installments">
					<target>
						<class>creditApprobation:installment</class>
						<mandatory>false</mandatory>
						<many>true</many>
					</target>
				</child-association>
				<child-association name="creditApprobation:guarantors">
					<target>
						<class>creditApprobation:guarantor</class>
						<mandatory>false</mandatory>
						<many>true</many>
					</target>
				</child-association>
				<child-association name="creditApprobation:collaterals">
					<target>
						<class>creditApprobation:collateral</class>
						<mandatory>false</mandatory>
						<many>true</many>
					</target>
				</child-association>
				<child-association name="creditApprobation:creditAppClient">
					<target>
						<class>creditApprobation:client</class>
						<mandatory>false</mandatory>
						<many>false</many>
					</target>
				</child-association>

			</associations>
		</type>

IV-2. Modlisation des tches du Workflow (Task Content Model)

Au paragraphe III-1 nous avons vu le design jBPM du processus.

Chaque tche ou noeud de ce BPM design sera modlis avec le dictionnaire de donnes Alfresco.

Le paragraphe IV-2-1 montre la modlisation de la tche "dispatch application" ralise par l'agent du courrier et consistant envoyer la demande de crdit numrise du client au responsable du crdit. Ce modle est utilis par le Client Web de la plateforme Alfresco pour la construction de la vue de prsentation de la tche.


IV-2-1. Exemple de modlisation (Task Content Model) de la tche "dispatch-application"

Les tches sont dfinies dans le modle comme type de contenu: en effet les entits tches sont manipules dans le JCR exactement comme tout autre type de contenu.
Figure 26 : Content model de la tche 'dispatch-application'

		<type name="ac:dispatch-application">
			<parent>bpm:startTask</parent>
			
			<properties>
				<property name="ac:notifyMe">
					<type>d:boolean</type>
					<default>false</default>
				</property>
			</properties>
			
			<mandatory-aspects>
				<aspect>bpm:assignee</aspect>
			</mandatory-aspects>
			
			<!-- Custom aspects may be added to collect any arbitrary 
				number of people / groups. -->
		</type>

Comme on peut le voir (figure 26), ce modle hrite du modle "bpm:startTask" qui est le modle de base des tches d'initiation des worklflows BPM.
Cette tche est la premire tche qui doit tre ralise lors que le Workflow est initialis.
Le modle dfini une proprit ("notifyMe") de type boolen. Cette proprit sera affiche l'interface utilisateur sous forme de case cocher et permettra de notifier par email l'agent du courrier de l'envoi de la demande de crdit au responsable de crdit.


IV-3. Implmentation du management des tches dans la plateforme Alfresco

Une fois le modle des tches ralis, il faut effectuer un certain nombre d'oprations afin que les tches puissent tre accessibles dans le tableau de bord des utilisateurs. Ces oprations sont dans l'ordre :
-configuration du client web pour l'affichage des tches
-ralisation des dashlet relatives au tableau de bord. Un dashlet est un composant UI Alfresco qui permet d'afficher des informations dans une zone du tableau de bord des utilisateurs


IV-3-1. Configuration du Client Web pour l'affichage des tches

La configuration du client web (l'application Web de la plateforme Alfresco) permet de prciser comment vont tre affichs les composants UI pour la saisie des donnes. La configuration du client web se fait dans le fichier "web-client-config-custom.xml". La configuration du client web pour l'affichage de la vue de la tache de type "dispatch-application" est la suivante :
Figure 27 : Configuration du Client Web de la tche ac:dispatch-application

	<config evaluator="node-type" condition="ac:dispatch-application" replace="true">
		<property-sheet>
			<separator name="sep1" display-label-id="general"
							component-generator="HeaderSeparatorGenerator" />
			<show-property name="bpm:description" component-generator="TextAreaGenerator" />
			<show-property name="bpm:priority" />
			<show-property name="bpm:dueDate" />
			<show-property name="ac:notifyMe" />
			<separator name="sep2" display-label-id="responsable_service_credit"
							component-generator="HeaderSeparatorGenerator" />
			<show-association name="bpm:assignee"/>
		</property-sheet>
	</config>

IV-3-2. Internationalisation I18N

L'internationalisation permet d'afficher la vue de la tche dans la langue du l'utilisateur. La configuration de l'internationalisation relative la tche consiste dfinir le bundle I18N des proprits de la tche dfinies dans le content model. En prenant l'exemple de la tche d'initialisation du Workflow (la tche "ac:dispatch-application"), une entre doit tre dfinie pour la proprit "notifyMe" et une autre pour l'aspect "bpm:assignee".
La figure 28 montre les entres de ces deux lments dans le bundle I18N.
Figure 28 : I18N de la tche ac:dispatch-application

ac_workflowmodel.type.ac_dispatch-application.title=Acheminer une demande de crdit vers le service du crdit.
ac_workflowmodel.type.ac_dispatch-application.description=Acheminer une demande de crdit vers le service du crdit.

...
# Associations

ac_workflowmodel.association.ac_assignee.title=Agent en charge du crdit
ac_workflowmodel.association.ac_assignee.description=Agent en charge du crdit

Dans notre cas d'tude, nous avons dfini la ressource bundle d'internationalisation du Workflow dans le fichier de proprits : "approbationcreditworkflow-model.properties".


IV-3-3. Ralisation d'un dashlet pour l'affichage des tches relatives aux crdits dans le tableau de bord des utilisateurs

Un dashlet est un composant UI Alfresco qui permet d'afficher des informations dans une zone du tableau de bord des utilisateurs.
La ralisation du dashlet est classique et ncessite des configurations XML et du code java. Nous avons ralis un dashlet Alfresco pour afficher les tches en attente de traitement par les utilisateurs dans leur tableau de bord.
La figure 29 montre l'affichage des tches d'un utilisateur dans la dashlet des tches de demande de crdit.

Figure 29 : Dashlet des tches de demande de crdit
Figure 29 : Dashlet des tches de demande de crdit

Cette figure montre un travail faire "Quotter dossier demande crdit" dans le dashlet "Demande(s) de crdit en attente de traitement".
Crer un dashlet, c'est :
-le configurer dans le fichier "web-client-config-custom.xml"
-dfinir la page jsf du dashlet
-dfinir le backed-bean de la page jsf ci-dessus
-dfinir la dashlet dans la liste des dashlet afficher par dfaut

- 1 . Le configurer dans le fichier "web-client-config-custom.xml":
Figure 30 : Configuration du dashlet des tches de demande de crdit

<dashlet 	id="loan-application-to-threat" 
			label-id="my_loan_to_treat_title" 
			description-id="my_tasks_todo_desc"
  			jsp="/jsp/extension/workflow/custom-tasks-todo-dashlet.jsp" 
			allow-narrow="false" />

Dans cette configuration (figure 30), "my_loan_to_treat_title" reprsente l'entre I18N du label de dashlet qui est affich l'interface utilisateur (dans notre cas de figure, il s'agit du label "Demande(s) de crdit en attente de traitement").
La JSP du dashlet est la JSP custom-tasks-todo-dashlet.jsp.

- 2 . Dfinir la page jsf du dashlet:
La JSP de notre cas d'tude est la JSP "custom-tasks-todo-dashlet.jsp". Cette JSP permet de lister les tches assignes l'utilisateur connect.

- 3 . Dfinir le Backed-Bean :
Le Backed Bean est le managed Bean de la dashlet. C'est ce Bean qui est rfrenc dans la JSP du dashlet travers les expressions EL.

- 4 . Dfinir la dashlet dans la liste des dashlets afficher par dfaut lorsque les utilisateurs se connectent:
La liste par default des dashlets constitue les dashlets qui vont tre affiches dans l'ordre dfini lorsque l'utilisateur se connecte. Dans notre cas d'tude, la liste est la suivante :
Figure 31 : La liste des dashlets afficher par dfaut

<default-dashlets>
            <dashlet id="loan-application-to-threat" />
            <dashlet id="tasks-todo" />
            <dashlet id="pooled-tasks" />
            <dashlet id="myspaces-webscript" />
</default-dashlets>

Cette liste place la dashlet des demandes de crdit en tte, puis la dashlet de base du noyau Alfresco (qui affichera les tches autres que celle relatives au crdit), puis les tches du Pot Commun de l'utilisateur et en fin le composant web Script AJAX qui affiche l'arborescence des dossiers du repository.


IV-4. Implmentation des fonctionnalits ralises au sein du Workflow

Les principales fonctions sont :

-Numrisation et archivage de la demande manuscrite du crdit
-Cration de la fiche interne de demande de crdit
-Cration d'un garant
-Cration d'une garantie
-Cration d'un document d'identification
-Cration du contrat

Le Workflow doit s'interfacer avec le systme d'information de l'entreprise notamment pour invoquer certains services existants ou crer.

Cet interfaage peut tre ralis via divers moyens : les web services, ou carrment un ESB (Mule ESB) en particulier dans le cadre de l'orchestration de processus htrognes.
L'interfaage avec le SI est en dehors de l'objet de ce document.
Dans les paragraphes qui suivent, nous verrons brivement comment chaque fonctionnalit a t implmente.


IV-4-1. Implmentation de la fonctionnalit de Numrisation et de l'Archivage

Une chane de numrisation est une infrastructure logicielle et matrielle mise en oeuvre pour automatiser la chane "Scanner - OCR - Indexage - Archivage".
Le scanner produit une image du document. La reconnaissance de caractre est effectue sur l'image afin de gnrer un document Texte ou PDF. Pour faciliter les recherches, l'indexage est galement fait. De nos jours, presque tous les scanners ralisent l'OCR et produisent des documents textes (Word, RTF) et des documents au format PDF. Nanmoins, il reste impossible de raliser des traitements tels que le dimensionnement d'image, les corrections, la lecture automatique de document (LAD), etc..

Pour adresser les traitements complexes sur le document numris, Koossery Technology utilise deux technologies propritaires: Kofax et eCopy.

Pour des solutions des chanes simples, Koossery Technology met en oeuvre la chane ci-dessous:
Figure 32 : chane de numrisation simple

<Scanner OCR - Bibliothque Tiger OCR (Optionnelle) - CIFS - Extraction de mtadonnes - 
							- Indexage - GED />

La bibliothque Tiger OCR est une librairie JAR qui permet de raliser de l'OCR dans une application JAVA sur une zone donne de l'image. Nous utilisons cette librairie pour raliser la reconnaissance de caractre sur des Chques Bancaire, des factures etc..
Pour notre cas d'tude, nous avons mont la chane de numrisation simple permettant de numriser les demandes manuscrites des clients et de les intgrer automatiquement et directement dans un espace du service du courrier de la GED.
La chane prend en compte l'extraction de mtadonnes et l'indexage automatique.


IV-4-2. Implmentation de la fonctionnalit de cration des fiches et des rapports

La fiche de demande de crdit est un gros formulaire de saisie de donnes sectionn en tapes. Les informations d'une fiche de demande de crdit sont saisies travers un Wizards Alfresco.

Un Wizard est un composant UI qui permet de saisir des informations en tapes. Nous avons ralis la saisie des fiches de demande de crdit en ce servant du mcanisme conceptuel des Wizards d'Alfresco.

Crer un Wizard Alfresco c'est faire des configurations XML et crire du code JAVA. La configuration XML concerne la configuration du Client Web (l'application Web) pour l'affichage des tapes du Wizard et l'criture du code consiste coder le Backed-Bean (Managed Bean) du Wizard.

La ralisation des wizard Alfresco fera l'objet d'une publication ultrieure.
Nous allons nanmoins brivement voir comment dvelopper un Wizard Alfresco travers l'exemple de la fiche de demande de crdit.
Voici les tapes suivies pour crer le Wizard de la fiche de demande de crdit :

-configuration du wizard dans le client web
-crire les pages jsf des diffrentes tapes d'attribution du crdit
-mise en place des bundles d'internationalisation i18n
-dfinition du backed-bean du wizard

- 1 : Configuration du Wizard dans le Client web (web-client-config-custom.xml)
Figure 33 : Configuration du Wizard de la fiche de demande de crdit

<config>
      <wizards>
         <wizard name="createCreditRecordApplication" 
         	managed-bean="CreateCreditRecordAppWizard"
         	title-id="create_credit_record_app_content_title" 
         	description-id="create_credit_record_app_content_desc"
         	icon="/images/icons/new_content_large.gif">
         	<step name="partie1" title-id="credit_write_part1"
         						description-id="create_credit_record_app_step1_desc">
         		<page path="/jsp/extension/content/create-credit-record-app-wizard/part1.jsp"
         			title-id="create_credit_record_app_content_step1_title"
         			description-id="create_credit_record_app_content_step1_desc"
         			instruction-id="default_instruction" />
         	</step>
         	<step name="partie2" title-id="credit_write_part2"
         			description-id="create_credit_record_app_step2_desc">
         		<page path="/jsp/extension/content/create-credit-record-app-wizard/part2.jsp"
         			title-id="create_credit_record_app_content_step2_title"
         			description-id="create_credit_record_app_content_step2_desc"
         			instruction-id="default_instruction" />
         	</step>
         	<step name="partie3" title-id="credit_write_part3" <br/>
         			description-id="create_credit_record_app_step3_desc">
         		<page path="/jsp/extension/content/create-credit-record-app-wizard/part3.jsp"
         			title-id="create_credit_record_app_content_step3_title"
         			description-id="create_credit_record_app_content_step3_desc"
         			instruction-id="default_instruction" />
         	</step>
         </wizard>
      </wizards>
</config>

Nous pouvons remarquer que ce Wizard est compos de 3 tapes (partie1, partie2 et partie3). Chaque tape est une vue JSF (les lments page) qui peut contenir d'autres Wizards ou des dialogs Alfresco. Nous verrons ce que c'est qu'un dialog Alfresco et brivement comment le raliser.
Le nom du Bean Manag du Wizard est "CreateCreditRecordAppWizard" et il est configur dans le ficher "faces-config-custom.xml". Ce mme Bean est utilis comme Bean Managed des vues des tapes (step) du Wizard.

- 2 : Dfinition des pages jsf des tapes
L'enchanement des pages du Wizard est ralis par le Wizard Framework du noyau de la plateforme Alfresco. Celui-ci utilise la configuration de la figure30 pour savoir quelle vue d'tape il faut afficher. Dans notre cas, nous avons 3 JSP pour les trois tapes : part1.jsp, part2.jsp et part3.jsp.

- 3 : Dfinition de l'I18N du Wizard
Il s'agit de dfinir les entres "title-id" et "description-id" du Wizard dans le bundle.

- 4 : Cration du Bean Manag du Wizard
C'est la dernire opration. Il s'agit d'crire le code java du Bean Manag du Wizard. Le Bean manag d'un Wizard est classique. Toutes les mthodes correspondants aux actions "suivant" , "prcdent", "modifier les labels des boutons", "gnrer de nouveaux boutons", "enregistrer les donnes saisies", etc.. doivent tre implmentes.


IV-4-3. Implmentation de la cration d'un garant

Un garant est une personne physique qui se porte garant pour un crdit. L'entit garant est un type de contenu dfini dans le modle. Les garants sont choisis ou crs lors de la cration de la fiche de demande de crdit. Nous avons ralis la cration d'un garant grce au Framework Conceptuel Dialog d'Alfresco. La ralisation des Dialogs Alfresco fera l'objet d'une publication ultrieure. Nanmoins, nous allons prsenter brivement un petit exemple.

Crer un Dialog Alfresco c'est faire des configurations XML et crire du code JAVA. La configuration XML concerne la configuration du Client Web pour l'affichage du dialog et l'criture du code JAVA concerne l'criture du Bean manag du dialog. Voici les tapes suivies pour crer le Dialog de cration des garants :

-configuration du Dialog dans le client web
-crire les pages jsf des diffrentes tapes d'attribution du crdit
-mise en place des bundles d'internationalisation i18n
-dfinition du backed-bean du wizard

- 1 : Configuration du Dialog dans le Client web (web-client-config-custom.xml)
Figure 34 : Configuration du Client Web du Dialog de cration des garants

<dialog name="create_guarantor_dialog" 
			page="/jsp/extension/content/create-guarantor-dialog.jsp" 
			managed-bean="CreateGuarantorDialog"
			icon="/images/extension/icons/new_person.gif" 
			title-id="create_guarantor_dialog_title" 
			description-id="create_guarantor_description_dialog">                
</dialog>

Les lments constitutifs du Dialog Alfresco sont : la JSP du dialog (dans notre cas il s'agit de la JSP create-guarantor-dialog.jsp), le Bean manag (dans notre cas il s'agit du Bean CreateGuarantorDialog), l'icne (dans notre cas il s'agit de l'image new_person.gif), du titre et de la description.

- 2 : Dfinition de la JSP du Dialog
Il s'agit d'crire la page JSP create-guarantor-dialog.jsp. Les balises (tags librairies) JSF sont utilises pour la construction de la JSP. Les Expressions EL sont utilises pour le lien avec le Bean Manag.

- 3 : Dfinition de l'I18N du Dialog
L'internationalisation du dialog se rduit aux entres "title-id" et "description-id" de la configuration du dialog.

- 4 :Cration du Bean Manag du Dialog
C'est la dernire opration. Il s'agit d'crire le code java du Bean Manag du Dialog. Le Bean manag d'un Dialog est classique. Certaines mthodes doivent tre implmentes pour les actions "annuler" et "Ok", "modifier les labels des boutons", "gnrer de nouveaux boutons", "enregistrer les donnes saisies", etc..


IV-4-4. Implmentation de la cration d'une garantie

Une garantie est aussi un type de contenu configur dans le content model. La cration des garanties se fait galement partir du Framework Dialog d'Alfresco. Bien vouloir ce reporter la section (paragraphe IV-4-3) d'implmentation de la cration d'un garant pour les dtails techniques.


IV-4-5. Implmentation de la cration d'un document d'identification

Un document d'identification est aussi un type de contenu configur dans le content modle. La cration des documents d'identification se fait galement partir du Framework Dialog d'Alfresco. Bien vouloir ce reporter la section (paragraphe IV-4-3) d'implmentation de la cration d'un garant pour les dtails techniques.


IV-4-6. Implmentation de la cration d'un contrat

Un contrat est dfini dans notre application comme un type de contenu. La diffrence de ce modle de cration avec les autres est que, le contrat n'est pas saisi mais plutt cr par interfaage avec le Systme d'Information de l'tablissement de crdit.

L'interfaage de l'application ECM/BPM d'approbation de crdit avec le SI de l'tablissement de crdit est ralis via l'esb Mule ESB.

L'aspect interfaage avec le Systme d'Information de l'tablissement de crdit est en dehors de l'objet de ce document.