我需要构建一个工作流,允许管理员在工作流的第一个任务中从两个不同的组中选择两个受让人。我可以在一种形式中使用两个受让人控件吗?如何?

最佳答案

你需要:

  • 在任务内容模型中,将 2 个受让人定义为您的任务类型的 2 个单独关联。
        <type name="my:starttask">
        <parent>bpm:startTask</parent>
          <associations>
            <association name="my:firstassignee">
                <title>firstassignee</title>
                <source>
                    <mandatory>false</mandatory>
                    <many>false</many>
                </source>
                <target>
                    <class>cm:person</class>
                    <mandatory>false</mandatory>
                    <many>false</many>
                </target>
            </association>
            <association name="my:secondassignee">
                <title>secondassignee</title>
                <source>
                    <mandatory>false</mandatory>
                    <many>false</many>
                </source>
                <target>
                    <class>cm:person</class>
                    <mandatory>false</mandatory>
                    <many>false</many>
                </target>
            </association>
        </associations>
       </type>
    
  • 在您的共享配置自定义中,将 2 个关联定义为权限控制:
          <config condition="activiti$myworkflow" evaluator="string-compare">
            <forms>
             <form>
            <field-visibility>
                <show id="my:firstassignee" />
                <show id="my:secondassignee" />
             </field-visibility>
            <appearance>
                <field set="actors" id="my:firstassignee" >
                    <control template="/org/alfresco/components/form/controls/authority.ftl">
    
                    </control>
                </field>
    
                <field set="actors" id="my:secondassignee">
                    <control template="/org/alfresco/components/form/controls/authority.ftl">
    
                    </control>
                </field>
    
  • 在您的 bpm20 文件中,在您的流程中定义两个 ActivitiScriptNode 变量,并为具有两个 cm:person 关联的 usertask/starttask 定义一个 ExecutionListener。该执行监听器应该获取输入的值并将它们放入流程范围的变量中,如下所示:
      <extensionElements>
        <activiti:taskListener class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener" event="complete">
          <activiti:field name="script">
            <activiti:string>
               execution.setVariable('firstActivitiScriptNodeVar', task.getVariable('my_firstassignee'));
               execution.setVariable('secondActivitiScriptNodeVar', task.getVariable('my_secondassignee'));
            </activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    
  • 然后将此代码添加到您要分配给输入的用户的 UserTasks 中,如下所示:
    <humanPerformer>
                <resourceAssignmentExpression>
                    <formalExpression>${firstActivitiScriptNodeVar.properties.userName}</formalExpression>
                </resourceAssignmentExpression>
    </humanPerformer>
    
  • 关于jakarta-ee - Alfresco Workflow 表单中的多个受理人控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34612055/

    10-10 07:51