ottenere lo username dell'utente che esegue un task di un wf

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

ottenere lo username dell'utente che esegue un task di un wf

Ciao a tutti.
Ho creato un workflow il cui task di approvazione è assegnato al gruppo "approvers" che sono i Project Manager.
Inoltre ho creato un aspect "utente" che dovrebbe visualizzare il nomeutente del project manager che ha preso in consegna il task di approvazione. Come posso fare? Questo è il codice in questione:

   
<swimlane name="approvers">
           <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
                  <pooledactors>#{people.getGroup('GROUP_ProjectManager')}
      </pooledactors>
   </assignment>
   </swimlane>


<task-node name="Validazione">
   <event type="node-enter">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <runas>admin</runas>
               <script>
                   for (var i = 0; i &lt; bpm_package.children.length; i++)
                   {
                      bpm_package.children[i].properties["wfpm:status"] = "Verificato";
                      bpm_package.children[i].save();
                   }
               </script>
           </action>
       </event>
         <event type="node-leave">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
             <runas>admin</runas>
               <script>
                   for (var i = 0; i &lt; bpm_package.children.length; i++)
                   {
                          if (!bpm_package.children[i].hasAspect("wfpm:utente"))
                      {
                         bpm_package.children[i].addAspect("wfpm:utente");
                      }
                   }
                    </script>
           </action>
       </event>
      <transition to="Rifiutato" name="Rifiuta"></transition>
      <transition to="Validato" name="Valida"></transition>
         <task name="wfpm:validazioneTask" swimlane="approvers" />
   </task-node>

<task-node name="Validato">
     <event type="node-enter">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <runas>admin</runas>
                <script>
                   //prima prova effettuata
                   //var utente=people.getPerson(people.getGroup('GROUP_ProjectManager'))).properties.userName;

                    //seconda prova
                        var utente=people.getPerson(approvers).properties.userName;


                    for (var i = 0; i &lt; bpm_package.children.length; i++)
                   {
                       bpm_package.children[i].properties["wfpm:utente"] = utente;
                      bpm_package.children[i].properties["wfpm:status"] = "Validato";
                      bpm_package.children[i].save();
                   }
                </script>
           </action>
       </event>
   <task name="wfpm:ValidatoTask" swimlane="initiator" />
<transition to="End" name="termina"></transition>
</task-node>
Quando clicco, durante il tak di validazione, il bottone "Valida",
nel primo caso mi dà l'errore:  TypeError: Cannot read property "properties" from null (AlfrescoJS#1)
nel secondo caso l'errore è: ReferenceError: "approvers" is not defined. (AlfrescoJS#1)
Qualche suggerimento???
5 Replies
xena
Member II

Re: ottenere lo username dell'utente che esegue un task di un wf

Girando sui tanti forum e provando tutte le possibili soluzioni alla fine ho trovato la variante giusta.
Poichè finalmente sono riuscita a risalire alla variabile che corrisponde all'utente che esegue il task, alla fine ne ho preso direttamente il nome e il cognome, non piu lo username.
<task-node name="Validazione" >
     <task name="wfpm:validazioneTask" swimlane="approvers" >
  <event type="task-end">
               <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                  <script>
                     <variable name="bpm_assignee" access="write"/>
                     <expression>
                        if (taskInstance.actorId != null)
                           people.getPerson(taskInstance.actorId);
                        else
                           person;
                     </expression>
                  </script>
                </action>
            </event>
        </task>

       <event type="node-enter">
           <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <runas>admin</runas>
               <script>
                   for (var i = 0; i &lt; bpm_package.children.length; i++)
                   {
                      bpm_package.children[i].properties["wfpm:status"] = "Verificato";
                      bpm_package.children[i].save();
                   }

               </script>
           </action>
       </event>
      <transition to="Rifiutato" name="Rifiuta"></transition>
      <transition to="Validato" name="Valida">
                 <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <runas>admin</runas>
               <script>
                   for (var i = 0; i &lt; bpm_package.children.length; i++)
                   {
                       var nome= bpm_assignee.properties["cm:firstName"];
                       var cognome=  bpm_assignee.properties["cm:lastName"];
                       var utente= nome + ' ' + cognome;
                       bpm_package.children[i].properties["wfpm:utente"] = utente;

                       bpm_package.children[i].save();
                   }

               </script>
           </action></transition>
   </task-node>

Credo che il punto principale dove sbagliavo stava nel fatto che volevo richiamare la variabile nell'evento node-enter, invece ora dichiarando la variabile bmp_assignee nell'evento task-end,  e prelevando una delle sue proprietà al momento della transizione, (e non al task node successivo), sono finalmente riuscita a catturare cio che mi serviva Smiley Happy
izio
Member II

Re: ottenere lo username dell'utente che esegue un task di un wf

ma questi file che modifichi/crei…dove risiedono???
qual'è il path???
xena
Member II

Re: ottenere lo username dell'utente che esegue un task di un wf

Nell'apposita cartella "extension" che alfresco ha riservato per le estensioni. ecco il mio path assoluto (io uso windows):
C:\Alfresco\tomcat\shared\classes\alfresco\extension
izio
Member II

Re: ottenere lo username dell'utente che esegue un task di un wf

Ascolta ma quale versione di alfresco usi???
Io ho fatto un up-grade alla versione 3.4b, quindi al momento utilizzo questa.
Scusami se persisto, ma siccome dovrei fare qualcosa del genere, avrei bisogni di maggiori dettagli.
Ti spiego:
Nella mia gestione documentale, devo implementare un workflow per dei documenti specifici (ad esempio documenti di progetto).Lo stato del workflow puo essere:
- redatto (da qualsiasi utente)
- verificato (da utenti con ruolo di di project manager)
- validato (da utenti con ruolo di project manager)
Io ho pensato di implementare un workflow ad hoc(orientato ai task), in modo tale che ad ogni step il task viene passato tra gli utenti.
La cosa che ho notato è che attraverso il workflow ad hoc si perde traccia degli utenti che modificano lo stato del workflow…permangono solo le informazioni riguardo chi ha avviato il workflow e chi completa il workflow.(quindi a tal proposito dovrebbe ritornarmi utile il tuo lavoro!!1 :-) )

Un ultima cosa…come faccio a limitare la visibilità sui documenti il cui stato non è "validato"???
Riformulando il tutto sarebbe la stessa cosa dire che gli utenti possono accedere solo ai documenti il cui stato è validato!

confido nel tuo aiuto!!!
grazie
izio
Member II

Re: ottenere lo username dell'utente che esegue un task di un wf

Ti sarei grato se mi illustrassi il procedimento per la definizione di un workflow personlaizzato!!!
Ancora tante grazie