我如何通过候选用户的列表在露天的Activiti的工作流任务?(How do I pass a li

2019-08-03 04:37发布

我希望能够通过用户的列表作为一个任务的候选人。 用户从数据表中检索,并不能作为一个组。 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在一个变量或应采用不同的方法来使用?

Answer 1:

已经证实,这个问题从存在Activiti的5.10 http://activiti.org ,然后通过从混帐回购协议的Activiti源拖网,我搜索了Activiti的论坛。 我碰到当你想有多个候选用户来到你将不得不使用一个Collection <String>的变量在这个论坛http://forums.activiti.org/en/viewtopic.php?f=6&t=3635&p=14187&hilit= candidateuser#p14187 。

我不知道如何从javascript execution.setVariable一个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>

根据需要工作。

对于时间在露天之中,我已经使用使用JavaScript来找到数据列表中的用户列表,并把他们安置在一个逗号分隔的字符串中的一项任务,并在Groovy脚本任务,该字符串转换为一个List <跟着它String>的准备下面的任务使用。



Answer 2:

如果您在露天内默认的工作流,如审核,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>标记您的需求。



Answer 3:

在犀牛(JDK8)JavaScript引擎,用于定义列表并将其设置为可变的,下面的脚本任务工作的脚本:

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


文章来源: How do I pass a list of candidate users to an activiti workflow task in alfresco?