2012-11-25 26 views
8

Vorrei poter passare un elenco di utenti come candidati per un'attività. Gli utenti vengono recuperati da un elenco di dati e non disponibili come gruppo. Activiti: candidati Gli utenti sembrerebbero essere l'approccio giusto.Come posso passare un elenco di utenti candidati a un'attività di flusso di lavoro activiti in alfresco?

Supponendo che gli utenti siano stati ottenuti e impostati nella variabile, ipw_reviwers.

<serviceTask id="alfrescoScripttask1" name="Alfresco Script Task" activiti:class="org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate"> 
    <extensionElements> 
    <activiti:field name="script"> 
     <activiti:string>logger.log("IPW - setup task"); 
     execution.setVariable('ipw_reviwers', "tom, dick, harry");</activiti:string> 
    </activiti:field> 
    </extensionElements> 
</serviceTask> 

il seguente testo utilizza le variabili ipw_reviewers

<userTask id="adhocTask" name="Adhoc Task" activiti:candidateUsers="${ipw_reviewers}" activiti:formKey="wf:activitiReviewTask"> 
    <extensionElements> 
    <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
     <activiti:field name="script"> 
     <activiti:string>logger.log("IPW - create task"); 
     if (typeof bpm_workflowDueDate != 'undefined') task.setVariableLocal('bpm_dueDate', bpm_workflowDueDate); 
        if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;</activiti:string> 
     </activiti:field> 
    </activiti:taskListener> 
    </extensionElements> 
</userTask> 

nessuno è in grado di vedere o rivendicare il compito. Se nell'elenco è presente un solo utente, tale utente è in grado di rivendicare l'attività.

Se Activiti: candidateUsers è dichiarato come

activiti:candidateUsers="tom, dick, harry" 

poi tutti e tre gli utenti sono in grado di rivendicare il compito.

Un elenco di utenti può essere passato a activiti: candidatoUser in una variabile o è necessario utilizzare un approccio diverso?

+0

è la mia risposta che lavorano per voi? –

+0

Simile alla risposta più recente di user68910801 è anche possibile creare un elenco in JavaScript basato su Rhino (utilizzato in Alfresco). È un po 'più fastidioso da gestire poiché a) non si ha l'operazione 'Java.type()' (si usa invece 'Packages.java.util.ArrayList'), b) il tipo di stringa JavaScript in Rhino fa non è mappato a Java String, e c) un elenco viene gestito in modo implicito come un oggetto simile ad un array e alcuni dei suoi metodi (come add) potrebbero essere nascosti –

risposta

4

Avendo verificato che il problema era attivo activiti 5.10 da http://activiti.org e poi navigato attraverso la fonte di activiti dal repository git, ho cercato nei forum di activiti. Mi sono imbattuto in Quando si desidera disporre di più utenti candidati, sarà necessario utilizzare una variabile <String> variabile in questo forum http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit=candidateuser#p14187.

Non so come execution.setVariable una raccolta <String> da JavaScript (nessuna risposta?), Ma usando Groovy

List<String> users = [ 'tom', 'dick', 'harry'] as String[]; 
execution.setVariable('ipw_reviewers', users); 

permette questo compito

<userTask id="mytask" name="My Task" activiti:candidateUsers="${ipw_reviewers}"> 
</userTask> 

a lavorare, se lo desideri .

Per il momento in Alfresco, ho utilizzato javascript utilizzato per trovare l'elenco di utenti dagli elenchi di dati e li ho inseriti in una stringa delimitata da virgola in un'attività e l'ho seguita con un'attività di script in groovy che converte la stringa a una stringa < > pronta per l'uso nelle seguenti attività.

1

Se dai un'occhiata ai flussi di lavoro predefiniti in Alfresco, come review-pooled.bpmn20.xml, allora vedrai che sta usando l'elemento potentialOwner.

un frammento dal flusso di lavoro:

<potentialOwner> 
    <resourceAssignmentExpression> 
    <formalExpression>${bpm_groupAssignee.properties.authorityName}</formalExpression> 
    </resourceAssignmentExpression> 
</potentialOwner> 

Così è con l'aspetto bpm_groupAssignee per avviare questo.

<!-- Submit review to multiple people (as included in a group) --> 
     <type name="wf:submitGroupReviewTask"> 
     <parent></parent> 
     <mandatory-aspects> 
      <aspect>bpm:groupAssignee</aspect> 
     </mandatory-aspects> 
     </type> 

Nel tuo caso si potrebbe facilmente modificare il tag <formalExpression> alle proprie esigenze.

+0

Mi è occorso molto tempo per comprendere in minima parte i flussi di lavoro. Credo che l'espressione: espressione di candidati che Activiti Designer ha creato per me è un'estensione activiti che semplifica il potenziale potenziale del metodo. Passando la stringa $ {ipw_reviwers} in quanto l'espressione formale non ha funzionato per me, ma la tua risposta ha almeno sbloccato le vecchie celle grigie e spostato in avanti. –

+0

Felice di aver trovato la vera risposta al tuo problema. –

0

In Nashorn (JDK8) interprete javascript, per definire la lista e impostarla come variabile, seguente script di compito script funziona:

var ArrayList = Java.type('java.util.ArrayList'); 
var list = new ArrayList(); 
list.add('a'); 
list.add('b'); 
list.add('c'); 
execution.setVariable('list', list); 
+0

Si noti che con Alfresco + Activiti incorporato, ogni volta che si utilizza la classe 'org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate' si utilizza il motore di script di Rhino fornito con Alfresco. Di solito non si utilizza mai il motore Nashorn nel caso d'uso Alfresco se si utilizzano le classi fornite da Alfresco per l'integrazione Activiti. Solo quando si utilizza il valore predefinito '' o 'org.activiti.engine.impl.bpmn.listener.ScriptTaskListener' durante l'esecuzione su JDK 8 si utilizzerà Nashorn. –