Workflow 如何将候选用户列表传递给alfresco中的activiti工作流任务?

Workflow 如何将候选用户列表传递给alfresco中的activiti工作流任务?,workflow,alfresco,activiti,Workflow,Alfresco,Activiti,我希望能够通过一个任务的候选用户列表。用户从数据列表中检索,不能作为组使用。Activiti:候选人似乎是正确的方法 假设用户已获得并设置在变量ipw_Reviewers中 logger.log(“IPW-设置任务”); execution.setVariable('ipw_Reviewers','tom,dick,harry'); 下面使用变量ipw_reviewers logger.log(“IPW-创建任务”); if(bpm_workflowDueDate的类型!=“未定义”)ta

我希望能够通过一个任务的候选用户列表。用户从数据列表中检索,不能作为组使用。Activiti:候选人似乎是正确的方法

假设用户已获得并设置在变量ipw_Reviewers中


logger.log(“IPW-设置任务”);
execution.setVariable('ipw_Reviewers','tom,dick,harry');
下面使用变量ipw_reviewers


logger.log(“IPW-创建任务”);
if(bpm_workflowDueDate的类型!=“未定义”)task.setVariableLocal(“bpm_dueDate”,bpm_workflowDueDate);
如果(bpm_workflowPriority的类型!=“未定义”)task.priority=bpm_workflowPriority;
没有人能够看到或声称该任务。如果列表中只有一个用户,则该用户可以声明该任务

如果活动:候选人被宣布为

activiti:candidateUsers="tom, dick, harry"
然后,所有三个用户都可以声明该任务


用户列表可以通过变量传递给activiti:candidateUsers吗?还是应该使用不同的方法?

如果您查看Alfresco中的默认工作流,如review-pooled.bpmn20.xml,那么您将看到它使用的是
潜在所有者
元素

工作流中的代码段:

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

${bpm_groupAssignee.properties.authorityName}
因此,它使用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>

bpm:groupAssignee

在您的情况下,您可以根据自己的需要轻松修改
标记。

确认问题存在于activiti 5.10,然后从git repo中搜索activiti的来源,我搜索了activiti论坛。我遇到了当你想拥有多个候选用户时,你必须在这个论坛上使用一个集合变量

我不知道如何使用groovy从javascript(有答案吗?)收集execution.setVariable

将用户=['tom','dick','harry']列为字符串[];
setVariable('ipw_审阅者',用户);
允许执行此任务


按要求工作

目前,在Alfresco中,我使用javascript从数据列表中查找用户列表,并在一个任务中将它们放在逗号分隔的字符串中,然后在groovy中使用脚本任务将字符串转换为列表,以便在以下任务中使用。

在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);

我的答案对您有用吗?与用户68910801的最新答案类似,您还可以使用基于Rhino的JavaScript(用于Alfresco)创建一个列表。处理起来有点烦人,因为a)您没有
Java.type()
操作(而是使用
Packages.Java.util.ArrayList
),b)Rhino中的JavaScript字符串类型没有映射到Java字符串,c)列表被隐式处理为类似数组的对象及其某些方法(如add)可能是hiddenIt花了我很长时间才最低限度地理解工作流程。我相信activiti Designer为我创建的activiti:candidateUsers表达式是一个activiti扩展,它简化了potentialOwner方法。将字符串${ipw_reviwers}作为正式表达式传递对我来说不起作用,但您的答案至少打开了旧的灰色单元格并使我前进了一步。很高兴您找到了问题的真正答案。请注意,使用Alfresco+Activiti嵌入,无论何时使用类
org.alfresco.repo.workflow.activiti.script.alfrescostriptdelegate
,您都在使用alfresco附带的Rhino脚本引擎。只要您使用Alfresco提供的类进行Activiti集成,您通常不会在Alfresco用例中使用Nashorn引擎。只有在JDK 8上运行时使用默认的
org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
时,才能使用Nashorn。