2012-11-25 8 views
8

Ich möchte in der Lage sein, eine Liste von Benutzern als Kandidaten für eine Aufgabe zu übergeben. Die Benutzer werden aus einer Datenliste abgerufen und sind nicht als Gruppe verfügbar. Activiti: candidateUsers scheint der richtige Ansatz zu sein.Wie übermittle ich eine Liste der Kandidatenbenutzer an einen Aktivitäts-Workflow-Task in Alfresco?

Angenommen, die Benutzer wurden in der Variablen ipw_reviwers ermittelt und eingestellt.

<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> 

Die folgenden verwendet die Variable 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> 

Niemand die Aufgabe, zu sehen oder zu behaupten vermag. Wenn nur ein Benutzer in der Liste vorhanden ist, kann dieser Benutzer die Aufgabe beanspruchen.

Wenn Activiti: candidateUsers als

activiti:candidateUsers="tom, dick, harry" 

deklariert wird dann alle drei Benutzer sind in der Lage, die Aufgabe zu erreichen.

Kann eine Liste der Benutzer an activiti: candidateUsers in einer Variablen übergeben werden oder sollte ein anderer Ansatz verwendet werden?

+0

ist meine Antwort zu arbeiten? –

+0

Ähnlich wie bei der letzten Antwort von user68910801 können Sie auch eine Liste in Rhino-basiertem JavaScript (in Alfresco verwendet) erstellen. Es ist nur ein bisschen nerviger zu handhaben, da a) Sie nicht die 'Java.type()' Operation haben (stattdessen verwenden Sie 'Packages.java.util.ArrayList'), b) den JavaScript String Typ in Rhino nicht zu Java String zugeordnet, und c) eine Liste wird implizit wie ein Array-ähnliches Objekt behandelt und einige ihrer Methoden (wie Add) können ausgeblendet werden –

Antwort

4

Nachdem bestätigt wurde, dass das Problem activiti 5.10 von http://activiti.org existierte und dann durch die Quelle von activiti vom git Repo durchforstet wurde, suchte ich die activiti Foren. Ich bin auf gestoßen Wenn Sie mehrere Kandidaten Benutzer haben möchten, müssen Sie eine Sammlung <String> Variable in diesem Forum http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit=candidateuser#p14187 verwenden.

Ich weiß nicht, wie eine Sammlung <String> von Javascript execution.setVariable (keine Antworten?), Aber groovy

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

mit ermöglicht diese Aufgabe

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

wie gewünscht zu arbeiten .

Zur Zeit in Alfresco, habe ich Javascript verwendet, um die Liste der Benutzer aus den Datenlisten zu finden und sie in einem Komma getrennte Zeichenfolge in einer Aufgabe und folgte ihm mit einer Skriptaufgabe in groovy, die die Zeichenfolge konvertiert zu einer Liste <String> bereit für den Einsatz in den folgenden Aufgaben.

1

Wenn Sie sich die Standard-Workflows in Alfresco ansehen, wie z. B. review-poold.bpmn20.xml, dann sehen Sie, dass das Element potentialOwner verwendet wird.

ein Ausschnitt aus dem Workflow:

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

So ist es den bpm_groupAssignee Aspekt mit diesem zu initiieren.

<!-- 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> 

In Ihrem Fall könnte man leicht den <formalExpression>-Tag auf Ihre Bedürfnisse ändern.

+0

Es hat mich lange gedauert, die Abläufe minimal zu verstehen. Ich glaube der activiti: candidateUser Ausdruck, den Activiti Designer für mich kreiert hat, ist eine activiti-Erweiterung, die die potentialOwner-Methode vereinfacht. Das Übergeben der Zeichenfolge $ {ipw_reviwers} als formaler Ausdruck funktionierte bei mir nicht, aber Ihre Antwort löste zumindest die alten grauen Zellen und brachte mich vorwärts. –

+0

Schön, dass Sie die richtige Antwort für Ihr Problem gefunden haben. –

0

In Nashorn (JDK8) Java-Script-Engine, für die Liste definieren und es als eine Variable, folgende Skript von Skript-Task arbeitet Einstellung:

für Sie
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

Beachten Sie, dass Sie bei Alfresco + Activiti, wenn Sie die Klasse 'org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate' verwenden, die Rhino-Skript-Engine verwenden, die mit Alfresco ausgeliefert wird. Normalerweise verwenden Sie die Nashorn-Engine im Alfresco-Anwendungsfall nie, solange Sie die von Alfresco bereitgestellten Klassen für die Activiti-Integration verwenden. Nur wenn Sie den Standardnamen ' 'oder' org.activiti.engine.impl.bpmn.listener.ScriptTaskListener' während der Ausführung von JDK 8 verwenden, verwenden Sie Nashorn. –

Verwandte Themen