Workflow - Etat d'un document

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

Workflow - Etat d'un document

Bonjour,

Je suis en pleine configuration de workflow de Alfresco avec pour objectifs :
- Créer un etat associé au document
- Modifier cet état en fonction que le document est en "brouillon", "en relecture", "refusé"…

:arrow: Ma solution :
Apres avoir vu pas mal de choses qui se faisait sur le wiki, j'ai finalement opté pour la solution advance workflow et j'ai crée un aspect "wfl:status" que je modifie à l'entrée dans un noeud du workflow, classique donc.

Mon nouveau workflow marche bien et l'aspect est visible quand je fais Apply Template > Doc infos

:arrow: Problèmes :
Mon premier problème à été de savoir comment afficher maintenant ce status ?

En cherchant à resoudre ce problème je me suis questionné sur le fait de mettre à jour le document (avoir plusieurs versions) et j'ai vite remarqué que le status est associé au document et non a la version

Cela vient du fait qu'une tache est associée à un document et non a une version. C'est pour cela que dans les documents associés à la tache, lorque que l'on clique sur un document, on visualise la dernière version et non celle envoyée initialement. Pas très charmant !

:arrow: Mon problème maintenant :
Comment associer un workflow ou plutot une tache à une version d'un document et non au document. Et comment faire porter le status par un aspect spécifique à la version ?

Au final est ce une bonne solution de passer par les advanced workflows ? T_T

Merci d'avance à ceux qui pourront me conseiller ou me faire avancer car je suis un peu bloqué  :mrgreen:
1 Reply
kogangel
Member II

Re: Workflow - Etat d'un document

Je pense avoir résolu le problème des versions
En conservant un tableau de versions des documents associés à la tache.

Je pensais que tout fonctionnait correctement quand je me suis rendu compte qu'en créant une tache celle-ci n'etait pas visible dans "My Alfresco", et je n'ai aucun message dans ma console !

Sinon je cherche toujours comment afficher au niveau des propriétés d'une version le status !


La definition de mon workflow :

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

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

   <swimlane name="initiator" />

   <start-state name="start">
       <task name="wf:submitReviewTask" swimlane="initiator" />

       <event type="node-leave">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
           
               if (logger.isLoggingEnabled()) logger.log("—=== START ===—");
              
               /* Creation de l aspect versions dans la tache si il n existe pas deja */
               if (!bpm_package.hasAspect("wfl:versions")){
                  bpm_package.addAspect("wfl:versions");
                  if (logger.isLoggingEnabled())logger.log("Aspect version ajoute !");
               }
           
               /* Declaration du tableau dans lequel on stockera les versions */
               var verTable = new Array();
               if (logger.isLoggingEnabled())logger.log("Array version cree !");
           
               /* Parcours des noeuds documents */
               for (var i = 0; i &lt; bpm_package.children.length; i++){
               
                  var child = bpm_package.children[i];
                  var versions = child.getVersionHistory();
               
                  /* On recupere la version du document */
                  verTable[i] = child.properties["cm:versionLabel"];
               
                  /* Recuperation de la derniere version du document */
                  var version = child.getVersion(verTable[i]);
                  var verNode = version.getNode();
               
                  if (logger.isLoggingEnabled())logger.log("Version " + version.getLabel());
               
                  /* Creation de l aspect status de la version si il n existe pas deja */
                  try {
                     if (!verNode.hasAspect("wfl:status")){
                        verNode.addAspect("wfl:status");
                     }
                  } catch (error) { if (logger.isLoggingEnabled())logger.log("Erreur addAspect wfl:status");}
            
                  /* Acces aux properties */   
                  try{
                     logger.log("Version status : " + verNode.properties["wfl:status"]);
                  } catch (error) { if (logger.isLoggingEnabled())logger.log("Erreur acces properties");}
         
                  /* Mise a jour de l aspect versions qui prend le tableau de versions */
                  bpm_package.properties["wfl:versions"] = verTable;
                  bpm_package.save();
                  if (logger.isLoggingEnabled())logger.log("Version mise a jour !");
            
               }
               
               </script>
           </action>
       </event>

       <transition name="" to="review" />
   </start-state>

   <swimlane name="reviewer">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <actor>#{bpm_assignee}</actor>
      </assignment>
   </swimlane>

   <task-node name="review">
       <event type="node-enter">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
           
               if (logger.isLoggingEnabled()) logger.log("—=== REVIEW : node-enter ===—");
           
               /* Recuperation du tableau de version dans la tache */
               var verTable = bpm_package.properties["wfl:versions"];
               if (logger.isLoggingEnabled())logger.log("Tableau des versions recupere !");
           
               /* Parcours des noeuds documents */
               for (var i = 0; i &lt; bpm_package.children.length; i++){
           
                  var child = bpm_package.children[i];
                  var versions = child.getVersionHistory();
            
                  /* Recuperation de la bonne version du document */
                  var version = child.getVersion(verTable[i]);
                  var verNode = version.getNode();
             
                  if (logger.isLoggingEnabled())logger.log("Version url : " + verNode.getUrl());
               
                  verNode.properties["wfl:status"] = "In Review";
                  verNode.save();
               
                  try{
                     logger.log("Version status : " + verNode.properties["wfl:status"]);
                  }    catch (error) { logger.log("Erreur acces properties");}

               }
               
               </script>
           </action>
       </event>

       <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="reject" to="rejected" />
       <transition name="approve" to="approved" />
   </task-node>

Mon modèle :
<?xml version="1.0" encoding="UTF-8"?>

<model name="wfl:workflowlifecyclemodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <description>Workflow Lifecycle Model</description>
   <author></author>
   <version>1.0</version>

   <imports>
       <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
       <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
      <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/>
   </imports>

   <namespaces>
       <namespace uri="wfl.model" prefix="wfl" />
   </namespaces>

   <constraints>
       <constraint name="wfl:status" type="LIST">
           <parameter name="allowedValues">
               <list>
                   <value>Draft</value>
                   <value>In Review</value>
                   <value>Approved</value>
               </list>
           </parameter>
       </constraint>
   </constraints>

   <aspects>
       <aspect name="wfl:status">
           <title>Status</title>
           <properties>
               <property name="wfl:status">
                   <title>Status</title>
                   <type>d:text</type>
                   <default>Draft</default>
                   <constraints>
                       <constraint ref="wfl:status" />
                   </constraints>
               </property>
           </properties>
       </aspect>
     
      <aspect name="wfl:versions">
           <title>Version Tache</title>
           <properties>
               <property name="wfl:versions">
                   <title>Version Tache</title>
                   <type>d:any</type>
               </property>
           </properties>
       </aspect>
     
   </aspects>
  
</model>

Un coup de pouce serait le bienvenue  :mrgreen: