Lancer une jsp à la fin d'un workflow

cancel
Showing results for 
Search instead for 
Did you mean: 
ptitmat
Member II

Lancer une jsp à la fin d'un workflow

Bonjour,

J'ai une jsp qui me permet de choisir les lecteurs d'un document.

Je souhaiterais pourvoir lancer automatiquement cette JSP lors de la fin du Workflow.
C'est à dire au moment ou l'initiateur du workflow publie le document, je voudrais à ce moment là que ma jsp qui permet de choisir les personnes qui auront le droit de lire le document.

Mais je ne vois pas a quelle moment lancer la JSP?

Est ce que quelqu'un aurait une idée? est ce que je vais être obliger de modifier mon workflow?

Ptitmat
12 Replies
landry_2530
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour

C'est plus pratique de le faire directement dans votre workflow, dans le start state afin que ces utilisateurs soient selectionnées lors de l'initialisation au lieu de le faire en ramificication dans une autre jsp.
ptitmat
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour Landry,

Pour te répondre, le workflow marche de la façon suivante.
Un initiateur envoie un document en approbation.
Les approbateurs valide ou non le document.
Si le document est validé, l'initiateur publie le document.

Je voudrais justement à ce moment là, pouvoir choisir les lecteurs qui auront accès en lecture à ce document. Je souhaite le mettre seulement à la fin car si le document est rejeté, je ne veux pas laisser le choix des lecteurs.

C'est pour ça que je veux choisir mes lecteurs à la fin du workflow.

Quand j'ai ma page (jsp)de publication du document  (donc à la fin du workflow). J'ai le code suivant :

<tr>
<td align="center">
   <input id="dialog:transition_Tâche_Achevé"
         name="dialog:transition_Tâche_Achevé"
         type="submit"
         value="Tâche Achevé"
         onclick="if(typeof window.clearFormHiddenParams_dialog!='undefined'){clearFormHiddenParams_dialog('dialog');}"
         class="wizardButton" />
         </td>
         </tr>
<tr>

Je voudrais savoir comment appeler la JSP qui (existe déjà). donc au moment de l'appuie du bouton Tâche Achevé que je puisse m'appelé la JSP qui choisit le personnes qui auront le droit de lecture.

Ptitmat
ptitmat
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour à tous,

Je me permet de revenir vers vous pour comprendre le fonctionnement des JSP avec Alfresco qui pour moi reste un mystère au moment ou elles sont appelées et comment elles s'entrechoquent.

Pour ma part, je cherche à réaliser quelque chose qui ressemble à l'import d'un document dans Afresco. Lorsque l'on importe un document d'Alfresco, après la sélection du document, nous avons une page qui permet de voir les propriétés du document. Lorsque l'on clique sur OK, une nouvelle page apparait qui nous permet  de rajouter une description, le choix de l'auteur.

De la même manière, je souhaiterais pouvoir lorsque j'affiche la page de mon workflow de publication et que je clique sur "tache achevées", alors j'afficherais la page qui me permet de choisir mes lecteurs.

Mais pour ça je dois comprendre le fonctionnement des appels des différentes pages dans alfresco.

Si quelqu'un peut éclairer ma lanterne, je suis preneur.

Cordialement,
Ptitmat
landry_2530
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour ptitmat,

Je comprends mieux ton problème après cette description.

Tu souhaites, à la fin du workflow, c'est à dire après que approbation OK, lancer une jsp pour la selection des lecteurs. Je suppose également que tu souhaites
notifier ces lecteurs. Moi je te proposerais d'intercaler une étapede publication entre le noeud jpdl d'approbation (ton fork qui parallélise les taches d'approbation) et le noeud de fin de workflow. De cette façon, le moteur de workflow te permettra, une fois l'étape d'approbation terminée, de passer à l'étape de publication.

Tu pourrais créer un groupe de lecteurs et définir une association à une groupe d'utilisateurs dans le modèle alfresco du noeud publication (voir l'aspect bpm:assignee).

En résumé, je suis entrain de te proposer d'ajouter une étape de publication dans le design de ton workflow et de configurer le modèle alfresco de l'étape pour la selection d'un groupe de lecteur à qui le document sera envoyé pour lecture.

Remarque, une seule JSP Alfresco gère l'affichage des étapes des workflows. Les vues sont générées dynamiquement en se basant du modèle des tâches affichées. Donc, tu n'as pas à priori à dealer avec la JSP, mais plutot avec le modèle de ta tâche.
ptitmat
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour Landry,

Mon explication ne dois pas être si clair que ça car ta réponse ne convient pas à ce que l'on me demande de faire.

Le workflow se compose des étapes suivantes :
    1. approbation : le doucment est envoyé aux approbateurs pour une validation.
    2. validation approbateur : les approbateurs valident ou rejettent le document
    3. Si rejet, le document retourne à l'initiateur.
    4. Si approuver, l'initiateur dois publier le document.
L'étape de publication est dons déjà présente.
A l'heure actuelle, une fois le document publié, il n'y a que l'initiateur du workflow qui peut le voir.
Il doit alors utiliser une action (déjà implémentée ) qui va lui permettre de sélectionner les gens qui pourront lire ce document.

Ce que l'on me demande de faire, c'est d'automatiser cette dernière étape. En gros, si l'initiateur ne pense pas à cette étape personne de pourra lire le document.

Dans mon optique, je vous lancer cette action au moment ou l'initiateur valide sa publication
[img]http://rqajsq.bay.livefilestore.com/y1pLT_4KRYNNopE8RZtNdV3vxobeZZOtMnfEjB4uS1b7osfZVaXs7ANCFU7C0iQH...[/img]

Donc d'après l'image quand il appuie sur le bouton "tache achevé".

C'est pour cela que je cherche à comprendre les JSP et que je regarde actuellement comment lancé une action lors de l'appuie sur un bouton.

Peut être que ta méthode me permettrait de le faire. Mais il faut que je regarde comment inclure une action dans le workflow mais il faut aussi que cette méthode soit validée par mes supérieurs.

Pour être clair, l'action déjà présente et qui fonctionne se fait en cliquant sur une icône et ouvre sur une jsp qui permet de selectionner les personnes qui pourront lire le document.


J'espère avoir été le plus clair possible.

ptitmat
landry_2530
Member II

Re: Lancer une jsp à la fin d'un workflow

Effectivement, j'ai pas eu suffisament d'explication.

Donc, l'étape de publication est bien incluse dans le workflow.

J'ai bien l'impression que ton action en question est exécutée dans la transition de l'étape de publication à l'étape de fin du workflow. C'est une supposition car j'ai toujours pas exactement l'explication sur comment ton action est déclanché lorsqu'on clique sur le bouton "Tache achevée".

Ton si s'est executée dans la transition, alors il doit surrement prendre en paramètre l'initiateur. Je pense que, tu dois customiser le modèle de l'étape de publication afin de pouvoir selectionner soit un groupe d'utilisateurs, soit plusieurs utilisateurs. Ensuite customiser l'action pour prendre en paramètre cette liste d'utilisateurs ou le groupe d'utilisateurs et faire la publication.

Si tu pouvais me dire exactement comment ce qui se passe quand on clique sur le bouton "Tache achevée", je veux dire comment est lancé l'execution de l'action, ça permettrait d'avancer rapidement vers la solution à ton problème.
ptitmat
Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour,

Actuellement quand je clique sur le bouton "tache achevé". on revient à la page d'accueil d'Alfresco.

Ce que je cherche actuellement, c'est de modifier le bouton "tache achevé" pour pourvoir lancer mon action des choix des lecteurs plutot que de retourner à la page d'accueil.

Cette action est défini actuellement de la façon suivante.


         <action id="manage_readers">
            <!–permissions>
               <permission allow="true">ChangePermissions</permission>
            </permissions–>
            <evaluator>
               org.alfresco.community.delegation.evaluator.ManageReaderEvaluator
            </evaluator>
            <label-id>manage_readers</label-id>
            <image>/images/extension/icons/manage_users.gif</image>
            <!–action>dialog:manageDelegInvitedUsers</action>
            <action-listener>#{BrowseBean.setupSpaceAction}</action-listener–>
            <action-listener>#{BrowseBean.setupContentAction}</action-listener>
            <action>dialog:manageReadersFile</action>
            <params>
               <!–param name="ref">#{actionContext.nodeRef}</param–>
               <param name="id">#{actionContext.id}</param>
               <!–<param name="parent">#{NavigationBean.currentNodeId}</param>–>
            </params>
         </action>

Cette action lance le premier affichage qui va pourvoir nous permettre de choisir les personnes qui pourront avoir accès à la lecture du document.

Voici le fonctionnement actuelle pour choisir les personnes qui pourront lire le document.

Une fois le workflow publié. (validation avec le bouton "tâche achevé"), mon document arrive dans l'espace published.

A ce moment là, le seul à pouvoir lire et voir le document et son propriétaire.
Pour que d'autres personnes puissent y avoir accès, le propriétaire doit leur donner l'autorisation. Pour ce faire, le propriétaire va dans l'espace published et lance l'action gestion des lecteurs

[img]http://rqajsq.bay.livefilestore.com/y1pPALOouJA8M3NIZpmzf7rROZ3ENf7giwv73wjv1anR6ANXsAg9xfMPtZ9BSeUg...[/img]

Il voit apparaitre la page suivante :
[img]http://rqajsq.bay.livefilestore.com/y1pxKNFZ-Wkvl1MYj-bz_NJDVY9gZpecjcutac_MMO8SJsjNAhOHnNW2_3cfIqRe...[/img]


pour ajouter des lecteurs le propriétaire doit cliquer sur inviter

Il voit donc apparaitre la page suivante :
[img]http://rqajsq.bay.livefilestore.com/y1poDtBvTzMPp0qzDyafuhwu351DSM3Hpz9h2j4QT6qSxATQJ_7tDab2IhhLzP5X...[/img]


Donc si je résume, actuellement le propriétaire dois lancer le workflow, aller jusqu'au bout du workflox et une fois le document publié (donc le workflow terminé). Il eut lancer l'action qui lui permet de choisir les personnes qui pourront lire son document.

Ce que je cherche à faire :
Lorsque le propriétaire publie son document (encore dans le workflow), au moment ou le propriétaire clique sur le bouton "tache achevé", alors on lance soit cette page

[img]http://rqajsq.bay.livefilestore.com/y1pxKNFZ-Wkvl1MYj-bz_NJDVY9gZpecjcutac_MMO8SJsjNAhOHnNW2_3cfIqRe...[/img]

Ou alors (ce qui serait encore mieux ), cette page :
[img]http://rqajsq.bay.livefilestore.com/y1poDtBvTzMPp0qzDyafuhwu351DSM3Hpz9h2j4QT6qSxATQJ_7tDab2IhhLzP5X...[/img]

J'ajoute en plus le workflow :

<?xml version="1.0" encoding="UTF-8"?>

<!– LPR Validation 12.1.7 –>

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="lwf:edc_validation">
 
   <!– Workflow Initiator –>
   <swimlane name="initiator"/>
  
   <!– Workflow Approbators –>
   <swimlane name="approbators">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <pooledactors>#{group}</pooledactors>
      </assignment>
   </swimlane>
   
   
   <!–**************************–>
   <!–**    <Start State>     **–>
   <!–**        start         **–>
   <!–**************************–> 
   <start-state name="start">
      <task name="lwf:submitReviewAndApprovalTask" swimlane="initiator"/>
     
      <event type="node-leave">
         <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>Start State</type>
            <name>start</name>
            <disable>false</disable>
         </action>
      </event>
     
      <transition name="" to="startapproval">
         <!– Disabled all currents Permissions –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <permission>disabled</permission>
         </action>
        
         <!– Move Document to Review and Approval folder –>
         <action class="org.alfresco.community.repo.workflow.jbpm.MoveDocument">
            <folderdst>Review and Approval</folderdst>
         </action>
      </transition>
   </start-state>
  
   
   <!–**************************–>
   <!–**        <Node>        **–>
   <!–**    startapproval     **–>
   <!–**************************–>  
   <node name="startapproval">
      <event type="node-enter">
        <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>Node</type>
            <name>startapproval</name>
            <disable>false</disable>
         </action>         
        
         <!– Set document status to In Approval –>
         <!– action class="org.alfresco.community.repo.workflow.jbpm.SetDocumentStatus">
            <status>Approval</status>
         </action–>
        
         <!– Get Approbators Group –>
         <action class="org.alfresco.community.repo.workflow.jbpm.GetApprobators">
            <var>group</var>
         </action>

       <!–  Set read permission for approbators group –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <pooledactors>#{group}</pooledactors>
            <permission>set</permission>
         </action>  
      </event>
     
      <transition name="lwf_approve" to="approval"/>
   </node>
  
  
   <!–**************************–>
   <!–**     <Task Node>      **–>
   <!–**       approval       **–>
   <!–**************************–>    
   <task-node name="approval">
      <task name="lwf_approvalTask" swimlane="approbators"/>

      <event type="node-enter">
         <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>Task Node</type>
            <name>approval</name>
            <disable>false</disable>
         </action>        
     
         <!– Set read permission for tne current approbator –>     
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <pooledactors>#{group}</pooledactors>
            <permission>set</permission>
         </action> 
      </event>
     
      <event type="task-assign">
         <!– Set document status to In Approval –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetDocumentStatus">
            <status>Approval</status>
         </action>  
         <!– Notify Approval task to concerned actors and Review status to initiator–>
         <action class="org.alfresco.community.repo.workflow.jbpm.Notify"/>  
      </event>
        
      <event type="task-end">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <expression>
                  if (taskInstance.actorId == null)
                     taskInstance.actorId = person.properties.userName;
               </expression>
            </script>
         </action>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetApprobator">
            <approbator>#{taskInstance.actorId}</approbator>
         </action>
      </event>
     
      <event type="node-leave">
         <!– Unset read permission for tne group approbator –>     
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <pooledactors>#{group}</pooledactors>
            <permission>unset</permission>
         </action>
      </event>
     
      <transition name="reject" to="rejected">
         <!– Send mail to initiator –>
         <!–action class="org.alfresco.community.repo.workflow.jbpm.SendMail">
            <actor>#{person.properties.userName}</actor>
            <initiator>#{initiator}</initiator>
            <taskname>Approval</taskname>
            <status>Rejected</status>
         </action–>
         <!– Move Document to Drafts folder –>
      </transition>

      <transition name="approve" to="published">
         <!– Send mail to initiator –>
         <!– action class="org.alfresco.community.repo.workflow.jbpm.SendMail">
            <actor>#{person.properties.userName}</actor>
            <initiator>#{initiator}</initiator>
            <taskname>Approval</taskname>
            <status>Approved</status>
         </action–>
      </transition>
   </task-node>  
   

   <!–**************************–>
   <!–**     <Task Node>      **–>
   <!–**      rejected        **–>
   <!–**************************–> 
   <task-node name="rejected">
      <task name="lwf:rejectedTask" swimlane="initiator"/>
     
      <event type="node-enter">
        <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>Task Node</type>
            <name>rejected</name>
            <disable>false</disable>
         </action>       
        
         <!– Move Document to Drafts folder –>
         <action class="org.alfresco.community.repo.workflow.jbpm.MoveDocument">
            <folderdst>Drafts</folderdst>
         </action>
        
          <!– Set document status to Drafts –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetDocumentStatus">
            <status>Draft</status>
         </action> 
        
         <!– Notify Approval task to concerned actors and Review status to initiator–>
         <action class="org.alfresco.community.repo.workflow.jbpm.Notify"/>      
      </event>   
     
      <!–event type="task-assign"> –>
         <!– Notify Rejected task to concerned actor –>
          <!–action class="org.alfresco.community.repo.workflow.jbpm.Notify"/–>
      <!– /event–>
     
      <!– event type="node-leave">
      </event–> 
      <transition to="startapproval" name="restart">
         <!– Move Document to Review and Approval folder –>
         <action class="org.alfresco.community.repo.workflow.jbpm.MoveDocument">
            <folderdst>Review and Approval</folderdst>
         </action>
      </transition>
      <transition to="end" name="end">
         <!– Restore all currents Permissions –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <permission>enabled</permission>
         </action> 
      </transition>
   </task-node>
  
  
   <!–**************************–>
   <!–**     <Task Node>      **–>
   <!–**      published       **–>
   <!–**************************–>    
   <task-node name="published">
      <task name="lwf:publishedTask" swimlane="initiator"/>
     
      <event type="node-enter">
        <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>Task Node</type>
            <name>published</name>
            <disable>false</disable>
         </action>         
        
         <!– Delete not allowed Permissions –>
         <action class="org.alfresco.community.repo.workflow.jbpm.SetPermissions">
            <permission>delete</permission>
         </action>

         <action class="org.alfresco.community.repo.workflow.jbpm.ApprovedDocument"/>
                 
         <action class="org.alfresco.community.repo.workflow.jbpm.PublishedDocument">
            <initiator>#{initiator}</initiator>
         </action>
        
         <!– Notify Approval task to concerned actors and Review status to initiator–>
         <action class="org.alfresco.community.repo.workflow.jbpm.Notify"/>
        
       
      </event>    
     
      <!–event type="task-assign"–>
        <!– Notify Approval and Publication to concerned users and Notify Approval to initiator –>
         <!– action class="org.alfresco.community.repo.workflow.jbpm.Notify"/–>
         <!– action class="org.alfresco.community.repo.workflow.jbpm.DeleteWorkingCopyDocument"/–>
      <!–/event–>
     
      <transition to="end"/>
   </task-node>  


   <!–**************************–>
   <!–**     <End State>      **–>
   <!–**         end          **–>
   <!–**************************–>       
   <end-state name="end">
      <event type="node-enter">
        <action class="org.alfresco.community.repo.workflow.jbpm.WriteInfo">
            <type>End State</type>
            <name>end</name>
            <disable>false</disable>
         </action>          
        </event>
   </end-state>     
  
</process-definition>

Ptitmat
cleseach
Active Member II

Re: Lancer une jsp à la fin d'un workflow

Bonjour,

Avec Alfresco, il faut plutôt se raccrocher à la notion de Dialog ou de Wizard plutôt que de "JSP".
Dans votre cas, vous souhaitez qu'un dialog de gestion des droits sur le document s'ouvre à la fin de votre workflow.

Ceci va être possible en tordant affreusement le dialog gérant les tâches du workflow : ManageTaskDialog
L'idée brutale est de modifier le "outcome" utilisé lorsque la dernière tâche de votre workflow spécifique est terminée.
C'est techniquement possible, mais avec cette logique, vous allez au devant de complications dans la maintenance de votre application.

Pour disposer d'un environnement propice à l'évolution future de votre projet, je rejoins complètement l'idée de landry qui vous suggère de gérer la liste des lecteurs dans le workflow. Vous n'êtes pas obligé de le faire dans la première tâche; vous pouvez le faire dans la dernière.
Cette dernière tâche vous permettra de définir une liste d'utilisateur qui seront référencés comme lecteurs sur le document par un petit code placé sur l'événement de sortie de la dernière tâche.

Cordialement,
Charles Le Seac'h
ptitmat
Member II

Re: Lancer une jsp à la fin d'un workflow

Merci pour cette réponse.

Je vais maintenant me renseigner sur la façon de réaliser votre solution.

Ptitmat