8

我希望能够将用户列表作为任务的候选人传递。用户是从数据列表中检索的,不能作为组使用。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 还是应该使用不同的方法?

4

3 回答 3

5

从http://activiti.org确认问题存在于 activiti 5.10之后,然后从 git repo 中搜索了 activiti 的来源,我搜索了 activiti 论坛。我遇到了当您想要拥有多个候选用户时,您必须在此论坛上使用 Collection<String> 变量http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit=候选用户#p14187

我不知道如何从javascript中执行.setVariable a Collection<String> (任何答案?)但使用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 中执行一个脚本任务,将字符串转换为 List< String> 准备在以下任务中使用。

于 2012-12-02T13:07:53.493 回答
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>标签。

于 2012-11-26T08:43:37.273 回答
1

在 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);
于 2017-06-20T06:14:04.460 回答