我需要构建一个工作流程,允许管理员在工作流程的第一个任务中从两个不同的组中选择两个受理人。我可以在一种形式中使用两个受让人控件吗?怎么样?
答案 0 :(得分:5)
你需要:
在任务内容模型中,将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>