Attribution dynamique des swimlanes?

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

Attribution dynamique des swimlanes?

Bonjour,

J'ai bien avancé dans la programmation de workflows avancés et je trouve la chose
très intéressante.
Cependant je me pose tout de même une question sur l'attribution des swimlanes:
Est-il possible d'allouer dynamiquement un acteur à un swimlane?

Par exemple, prenons le cas d'un employé qui veut assigner un workflow vers son chef
de service, de façon statique pas de problème.
Mais si je veux généraliser mon workflow afin qu'il s'adapte à tous les services?
Est-il possible de déterminer automatiquement(sans intervention de l'employé) le
groupe(service) dans lequel il se trouve et donc indirectement le chef de service qui
jouera le rôle d'assignee?

Je ne sais pas si je me suis bien fait compri? lol  :wink:
3 Replies
greg_shogun_852
Member II

Re: Attribution dynamique des swimlanes?

Pour faire plus simple:

Peut-on insérer du code javascript dans un swimlane?

Par exemple:
Pour une transition on met le code entre les balises <action> </action>;
Pour un noeud on peut mettre le code entre les balises <event></event>.

Et pour un swimlane c'est possible?
greg_shogun_852
Member II

Re: Attribution dynamique des swimlanes?

Resalut les amis!

Alors toujours pas d'idée?  :?:

C'est pas grave… J'ai répondu tout seul à ma question et même que je vais vous en faire
profiter!  :wink:


<swimlane name="initiator"/>
 
  <!–Definition du processus–>
  <start-state name="start">
     <task name="scwf:submitReviewTask" swimlane="initiator"/>
   <transition name="submit" to="Submit">
     <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
      <!– Ajout de l'aspect versionable au document concerne –>
        <script>
          var test = bpm_package;
        var doc = test.children[0];
       
        doc.addAspect("cm:versionable");
        doc.save();
      </script>
      <script>
        <variable name="groupe" access="read,write" />
        <expression>groupe = people.getGroup("GROUP_Service GRH");</expression>
      </script>
     </action>
     <action>
        <script>
          var nomInitiator = userhome.properties.name;
          var user = people.getPerson(nomInitiator);
        var group = people.getContainerGroups(user);
        var chefGroup = null;
               
        var nbr = group.length;
                       
        if(group[0].properties.id == (people.getGroup("GROUP_Service informatique")).properties.id)
        {
          chefGroup = people.getGroup("GROUP_Chef informatique");
        }
        if(group[0].properties.id == (people.getGroup("GROUP_Service comptabilite")).properties.id)
        {
          chefGroup = people.getGroup("GROUP_chef comptabilite");
        }
        if(group[0].properties.id == (people.getGroup("GROUP_Secretaria")).properties.id)
        {
          chefGroup = people.getGroup("GROUP_chef secretaria");
        }
       
               
        <variable name="groupe" access="read,write" />
          <expression>groupe = chefGroup;</expression>
        
        </script>
     </action>
   </transition>
  </start-state>
 
  <node name="Submit">
     <transition name="Assignee1 review" to="Assignee1 review"/>
  </node>
 
  <swimlane name="assignee1">
    <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
      <pooledactors>#{groupe}</pooledactors>
    </assignment>
  </swimlane>
 
  <task-node name="Assignee1 review">
    <task name="scwf:assignee1Review" swimlane="assignee1"/>
   <transition name="approve" to="Assignee2 review"/>
   <transition name="reject" to="Revise"/>
  </task-node>

Comme vous pouvez le voir, dans ce cas si, c'est le swimlane "assignee1" qui est dynamique.
Et ce en fonction du groupe d'appartenance de l'utilisateur qui lance le workflow.

En fait dans chacun des groupes représentant un service j'ai installé un sous-groupe appelé
"chef xxx". ==> l'attribution dynamique des swimlanes c'est possible!  Smiley Very Happy

PS: Il existe sûrement une méthode plus propre de le programmer et aussi trouverez vous
     peut être des incohérences dans le code ci-dessus mais c'est juste que je viens de me
     prendre le choux pendant toute une journée à  essayer de faire ce truc.
     Donc vous comprendrez qu'en fin de journée je suis… Comment dire… Déchiré!  :roll:
greg_shogun_852
Member II

Re: Attribution dynamique des swimlanes?

Bonjour,

J'ai modifié le code qui permet une allocation dynamique d'un swimlane pour 2 raisons:
  • Le code était trop fouille fouille;

  • Ce n'était pas une façon clean de le faire.
Voici donc une nouvelle version de mon code plus simple à comprendre et plus clean:

Partie du code de définition qui nous intéresse:

<swimlane name="initiator"/>
 
  <!–Definition du processus–>
  <start-state name="start">
     <task name="scwf:submitReviewTask" swimlane="initiator"/>
   <transition name="submit" to="Submit">
     <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
      <!– Ajout de l'aspect versionable au document concerne –>
        <script>
          var test = bpm_package;
        var doc = test.children[0];
       
        doc.addAspect("cm:versionable");
        doc.save();
       
          var nomInitiator = userhome.properties.name;
          var user = people.getPerson(nomInitiator);
        var group = people.getContainerGroups(user);
                       
       
       
                       
        if(group[0].properties.name == (people.getGroup("GROUP_Service informatique")).properties.name)
        {
          executionContext.setVariable("scwf_chefGroup","GROUP_Chef informatique");
        }
        if(group[0].properties.name == (people.getGroup("GROUP_Service comptabilite")).properties.name)
        {
          executionContext.setVariable("scwf_chefGroup","GROUP_Chef(s) service comptabilite");         
        }
        if(group[0].properties.name == (people.getGroup("GROUP_Secretaria")).properties.name)
        {
          executionContext.setVariable("scwf_chefGroup","GROUP_chef secretaria");
        }   
        if(group[0].properties.name == (people.getGroup("GROUP_Service GRH")).properties.name)
        {
          executionContext.setVariable("scwf_chefGroup","GROUP_Chef(s) service GRH");
        }
       
      </script>
      
     </action>
   </transition>
  </start-state>
 
  <node name="Submit">
     <transition name="Assignee1 review" to="Assignee1 review"/>
  </node>
 
  <swimlane name="assignee1">
    <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
      <pooledactors>#{people.getGroup(scwf_chefGroup)}</pooledactors>
    </assignment>
  </swimlane>
 
  <task-node name="Assignee1 review">
    <task name="scwf:assignee1Review" swimlane="assignee1"/>
   <transition name="approve" to="Assignee2 review"/>
   <transition name="reject" to="Revise"/>
  </task-node>


Partie du code du modèle qui nous intéresse:

<type name="scwf:submitReviewTask">
     <parent>bpm:startTask</parent>
   <properties>
      <property name="scwf:chefGroup">
      <type>d:text</type>
      <default>GROUP_Service GRH</default>
      </property>
    </properties>
  </type>


J'espère que vous trouverez votre bonheur dans ce post!

A plus,
Greg