我希望能够将用户列表作为任务的候选者传递。用户从数据列表中检索,不作为组提供。 Activiti:candidateUsers似乎是正确的方法。
假设已经获得用户并将其设置在变量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>
以下使用变量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>
没有人能够看到或要求完成任务。如果列表中只有一个用户,则该用户可以声明该任务。
如果activiti:candidateUsers被声明为
activiti:candidateUsers="tom, dick, harry"
然后所有三个用户都可以声明任务。
可以将用户列表传递给activiti:candidateUsers在变量中还是应该使用不同的方法?
答案 0 :(得分:4)
确认问题存在于来自http://activiti.org的activiti 5.10,然后通过git repo搜索来自activiti的来源,我搜索了activiti论坛。我遇到了当你想拥有多个候选用户时,你必须使用Collection&lt; String&gt;变量在此论坛上http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit=candidateuser#p14187。
我不知道如何执行.setVariable一个Collection&lt; String&gt;来自javascript(任何答案?)但使用groovy
List<String> users = [ 'tom', 'dick', 'harry'] as String[];
execution.setVariable('ipw_reviewers', users);
允许此任务
<userTask id="mytask" name="My Task" activiti:candidateUsers="${ipw_reviewers}">
</userTask>
按要求工作。
暂时在Alfresco中,我使用了使用过的javascript从数据列表中查找用户列表,并将它们放在一个任务中以逗号分隔的字符串中,然后在groovy中使用脚本任务将其转换为列表&lt; String&gt;准备好用于以下任务。
答案 1 :(得分:1)
如果您查看Alfresco中的默认工作流程,例如review-pooled.bpmn20.xml,那么您将看到它正在使用potentialOwner
元素。
工作流程的摘录:
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>${bpm_groupAssignee.properties.authorityName}</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
所以它使用bpm_groupAssignee方面来启动它。
<!-- 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>
在您的情况下,您可以轻松修改<formalExpression>
标记以满足您的需求。
答案 2 :(得分:0)
在Nashorn(JDK8)java脚本引擎中,用于定义列表并将其设置为变量,遵循脚本任务的脚本:
var ArrayList = Java.type('java.util.ArrayList');
var list = new ArrayList();
list.add('a');
list.add('b');
list.add('c');
execution.setVariable('list', list);