【问题标题】:How do I pass a list of candidate users to an activiti workflow task in alfresco?如何将候选用户列表传递给 alfresco 中的 activiti 工作流任务?
【发布时间】:2012-11-25 18:49:25
【问题描述】:

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

【问题讨论】:

  • 我的回答对你有用吗?
  • 与 user68910801 的最新回答类似,您也可以在基于 Rhino 的 JavaScript(在 Alfresco 中使用)中创建一个列表。处理起来有点烦人,因为 a) 您没有 Java.type() 操作(而是使用 Packages.java.util.ArrayList),b) Rhino 中的 JavaScript 字符串类型不映射到 Java 字符串,以及 c) a list 像数组对象一样被隐式处理,它的一些方法(如 add)可能被隐藏

标签: workflow alfresco activiti


【解决方案1】:

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

我不知道如何从 javascript 中执行.setVariable a Collection(有答案吗?),但使用 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

【讨论】:

    【解决方案2】:

    如果您查看 Alfresco 中的默认工作流程,例如 review-pooled.bpmn20.xml,那么您会发现它使用了 potentialOwner 元素。

    工作流程中的一个 sn-p:

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

    在您的情况下,您可以根据需要轻松修改 &lt;formalExpression&gt; 标签。

    【讨论】:

    • 我花了很长时间才基本了解工作流程。我相信 Activiti Designer 为我创建的 activiti:candidateUsers 表达式是一个 activiti 扩展,它简化了 potentialOwner 方法。将字符串 ${ipw_reviwers} 作为正式表达式传递对我不起作用,但您的回答至少解锁了旧的灰色单元格并让我前进。
    • 很高兴您找到了问题的真正答案。
    【解决方案3】:

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

    【讨论】:

    • 请注意,嵌入 Alfresco + Activiti 时,无论何时使用 org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate 类,您都在使用 Alfresco 附带的 Rhino 脚本引擎。只要您使用 Alfresco 提供的类进行 Activiti 集成,您通常就不会在 Alfresco 用例中使用 Nashorn 引擎。只有在 JDK 8 上运行时使用默认的 &lt;scriptTask&gt;org.activiti.engine.impl.bpmn.listener.ScriptTaskListener 时,才会使用 Nashorn。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多