cancel
Showing results for 
Search instead for 
Did you mean: 

E-mail et notifications dans un workflow

pascalh_3059
Champ in-the-making
Champ in-the-making
Bonjour à tous!

Je suis encore bloqué sur l'envoi des e-mails :s.
A vrai dire, je souhaiterais, à travers le workflow avancé "Review&Approve", notifier les points suivants :
- quand un document uploadé par un utilisateur A1 est soumis à un "Review&Approve" à un utilisateur A2, je voudrais que A2 reçoive un e-mail l'en avertissant
- quand A2 approuve ou refuse le document, un e-mail est envoyé à A1 (celui qui est à la source du workflow)

Ceci pourrait être très pratique dans le cadre d'un projet.
Je me demande donc comment intégrer une telle fonctionnalité dans Alfresco. J'ai déjà posé quelques questions à ce propos sur le forum anglophone, mais c'est resté très vague…
Dans un premier temps, j'ai crû comprendre qu'il fallait que je m'intéresse de près au fichier xml "review_processdefinition.xml". Je l'ai modifié comme suit pour pouvoir lancer un e-mail si le document est rejetté :

    <task-node name="review">
        <task name="wf:reviewTask" swimlane="reviewer">
            <event type="task-create">
                <script>
                    if (bpm_workflowDueDate != void) taskInstance.dueDate = bpm_workflowDueDate;
                    if (bpm_workflowPriority != void) taskInstance.priority = bpm_workflowPriority;
                </script>
            </event>
        </task>
<!–        <transition name="approve" to="approved" />    –>
      
<!– Ma modif  –>
        <transition name="approve" to="approved" >
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
           <script>
                 var mail = actions.create("mail");
                 mail.parameters.to = initiator.properties.email;
                 mail.parameters.subject = "Petite tâche à faire!" + bpm_workflowDescription;
                 mail.parameters.from = bpm_assignee.properties.email;
                 mail.parameters.text = "C'est refusé!";
                 mail.execute(bpm_package);
           </script>
         </action>
      </transition>      
      

<!–  Ma modif   –>      
      
      
        <transition name="reject" to="rejected" />
    </task-node>


Problème : en lançant Alfresco, il a un souci et lance des ERROR et exceptions java. Résultat : Alfresco ne démarre pas…

Puis on m'a dit de m'intéresser aux business rules dans Alfresco, je creuse encore pour savoir ce que c'est…

Quelqu'un a-t-il déjà eu à faire de genre de choses ou quelque chose qui s'en approche? J'avoue être un peu perdu dans tout ça, donc si une âme charitable ne pourrait ce serait-ce que m'aiguiller un peu, je lui en serai reconnaissant.

Un grand merci d'avance!

Pascal
19 REPLIES 19

jayjayecl
Confirmed Champ
Confirmed Champ
Vous pouvez voir que l'affichage des propriétés au sein des formulaires de taches est gérée dans le web-client-config-properties.xml (dans tomcat/webapps/alfresco/WEB-INF/classes/alfresco)
Vous devriez surcharger la définition de l'affichage de la tâche wf:submitReviewTask dans votre fichier web-client-config-custom.xml (dans tomcaT/shared/classes/alfresco/extension)

hope this helps

pascalh_3059
Champ in-the-making
Champ in-the-making
Effectivement, dans le fichier web-client-config-properties.xml, je peux voir l'affichage des propriétés et je vois qu'il y a bpm:assignee pour submitReviewTask.

Cependant, dans web-client-config-custom.xml, suis-je sensé intégrer une portion de code de ce type : 


   <config evaluator="node-type" condition="wf:submitReviewTask" replace="true">
      <property-sheet>

     CODE ici      


      </property-sheet>
   </config>
afin de surcharger ladite définition de l'affichage?

Ou bien ai-je mal interprété vos propos?

jayjayecl
Confirmed Champ
Confirmed Champ
oui absolument

pascalh_3059
Champ in-the-making
Champ in-the-making
Ok merci beaucoup!

Toudefois, plutôt que de modifier le workflow review_processdefinition.xml, j'ai implanté le workflow défini dans parallelreview_processdefinition.xml. Cela me permet simplement d'ajouter ce workflow dans l'UI d'Alfresco.
Pour info, dans bootstrap-context.xml, j'ai rajouté cette portion de code :

      <props>
                    <!– WCM workflow definition –>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/parallelreview_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">true</prop>
                </props>
En redémarrant Alfresco, le nouveau workflow apparaît dans la liste des workflows avancés.

Maintenant, je vais essayer d'implanter la fonction de notification d'e-mails dans ce workflow, en suivant le raisonnement précédent. Je poste ma solution une fois que je l'ai faite.

pascalh_3059
Champ in-the-making
Champ in-the-making
Une autre question me passe par la tête au passage….
Dans l'e-mail que j'écris aux personnes, serait-il possible de préciser dans le corps du texte le nom de la tâche que je leur ai donnée (par exemple "Tâche à faire"), le nom et prénom de la personne ayant initiée le workflow, le nom de l'espace dans lequel est situé le document ainsi que le lien direct vers le document?

Si oui, comment faire??

Sinon, j'ai presque trouvé la solution à mon problème (même si pour le moment je n'arrive pas à lancer le mail à la personne initiatrice une fois qu'une des personnes assignées a donné son avis sur le doc) :

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

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:parallelreview">

    <swimlane name="initiator" />

    <start-state name="start">
        <task name="wf:submitParallelReviewTask" swimlane="initiator" />
        <transition name="" to="startreview"/>
    </start-state>

    <node name="startreview">
        <action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
            <foreach>#{bpm_assignees}</foreach>
            <var>reviewer</var>
        </action>
        <event type="node-enter">
            <script>
                <variable name="wf_approveCount" access="write" />
                <expression>
                    wf_approveCount = 0;
                </expression>
            </script>
        </event>
        <transition name="review" to="review">
                  <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                <script>
                {
                var mail = actions.create("mail");
            mail.parameters.to = reviewer.properties.email;
                mail.parameters.subject = "A workflow has been created for you";
                mail.parameters.from = "alfresco@alfresco.com";
                mail.parameters.text = "You have a TASK from";
                mail.execute(bpm_package);
                }
                </script>
                </action>
         </transition>
    </node>

    <task-node name="review">
        <task name="wf:reviewTask">
            <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
               <actor>#{reviewer}</actor>
            </assignment>
            <event type="task-create">
                <script>
                    if (bpm_workflowDueDate != void) taskInstance.dueDate = bpm_workflowDueDate;
                    if (bpm_workflowPriority != void) taskInstance.priority = bpm_workflowPriority;
                </script>
            </event>
        </task>
        <transition name="reject" to="endreview" />
        <transition name="approve" to="endreview">
            <script>
                <variable name="wf_approveCount" access="read,write" />
                <expression>
                    wf_approveCount = wf_approveCount +1;
                 </expression>
            </script>
        </transition>
    </task-node>

    <join name="endreview">
        <transition to="isapproved" />
    </join>

    <decision name="isapproved">
        <event type="node-enter">
           <script>
              <variable name="wf_reviewerCount" access="write"/>
              <variable name="wf_requiredPercent" access="write"/>
              <variable name="wf_actualPercent" access="write"/>
              <expression>
                  wf_requiredPercent = wf_requiredApprovePercent;
                  wf_reviewerCount = bpm_assignees.size();
                  wf_actualPercent = ((wf_approveCount * 100) / wf_reviewerCount);
              </expression>
           </script>
        </event>
        <transition name="reject" to="rejected" />
        <transition name="approve" to="approved">
            <condition>#{wf_actualPercent >= wf_requiredApprovePercent}</condition>
        </transition>
    </decision>
              
    <task-node name="rejected">
        <task name="wf:rejectedParallelTask" swimlane="initiator" />
       <transition to="end" /> 
    </task-node>

    <task-node name="approved">
        <task name="wf:approvedParallelTask" swimlane="initiator" />
        <transition to="end" />
    </task-node>

    <end-state name="end"/>

</process-definition>


Merci d'avance!

jayjayecl
Confirmed Champ
Confirmed Champ
Une autre question me passe par la tête au passage….
Dans l'e-mail que j'écris aux personnes, serait-il possible de préciser dans le corps du texte le nom de la tâche que je leur ai donnée (par exemple "Tâche à faire"), le nom et prénom de la personne ayant initiée le workflow, le nom de l'espace dans lequel est situé le document ainsi que le lien direct vers le document?

Si oui, comment faire??

C'est la question du moment !  :mrgreen:
J'ai tenté d'éclairer un utilisateur à ce sujet sur le forum anglophone :

http://forums.alfresco.com/en/viewtopic.php?f=34&t=22962

bonne chance Smiley Happy

pascalh_3059
Champ in-the-making
Champ in-the-making
Ah très bien, merci beaucoup, j'y jetterai un oeil attentif dessus demain! Smiley Very Happy

pascalh_3059
Champ in-the-making
Champ in-the-making
Finalement, ce n'est pas évident du tout de pouvoir préciser ces diverses choses dans le corps du mail…:s
Je continue à étudier ça tout de même.

J'ai toujours un problème avec la notification à l'initiateur. L'e-mail est bien envoyé aux reviewers, mais lorsque chacun donne sa décision, l'e-mail n'est pas envoyé à l'initiateur. C'est tout de même étonnant, pourtant ça marche dans mon workflow review_processdefinition.xml. Je ne sais pas si c'est dû au nombre d'utilisateurs ou pas, mais ça me dérange pas mal. Mon bout de code est le même. J'ai ceci : 

        <transition name="reject" to="endreview">
      <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                <script>
                {
                var mail = actions.create("mail");
      mail.parameters.to = initiator.properties.email;
                mail.parameters.subject = "Workflow " + bpm_workflowDescription;
                mail.parameters.from = "alfresco@alfresco.com";
                mail.parameters.text = "Workflow rejetté.";
                mail.execute(bpm_package);
                }
                </script>
                </action>
   </transition>

en lieu et place de :

<transition name="reject" to="endreview" />

J'ai même essayé de le placer au niveau du join qui suit, mais dans ce cas, je ne peux pas différencier le "approved" du "rejected". Et de toute façon, il ne m'envoie pas de mail.
Et quand je fais ça, c'est le drame. D'une, il ne m'envoie pas le mail, et de deux, Alfresco lance une erreur "interne".

Des idées? J'ai pensé à me créer mon propre workflow, mais comme je n'en ai pas eu besoin jusque là, je pensais pouvoir m'en passer…

Merci d'avance pour votre aide.

jayjayecl
Confirmed Champ
Confirmed Champ
Avez-vous créé votre propre méthode MailActionExecuter (comme dans le topic anglophone) ?

Pourriez-vous donner la trace d'erreur interne d'alfresco (et préférablement le message dans alfresco.log) ?

vaporisator
Champ in-the-making
Champ in-the-making
Bonjour, je suis de près cette discussion car le résultat m'intéresse fortement … Une fois qu'une solution aura été trouvée, j'essaierai d'appliquer les différentes étapes, merci à vous en tous cas Smiley Wink