工作流程:为 bpm:assignee 设置默认值
Workflow: Setting default value for bpm:assignee
当我开始我的工作流程时,我想要将其分配给某人的选项。如果没人选,我想默认分配给发起者。
这是否可以在不创建扩展 bpm:assignee 的新模型的情况下实现?如果没有,该扩展将如何完成?
我相信 Jeff Potts 的这个回答是相关的:
注意:我使用的是社区版 4.2
编辑:Stefan 的回答为我提供了绝大部分答案,但似乎我以某种方式错误地引用了关联的值。背景:我从来没有使用过联想,这可能只是我未能从类型和方面理解它们的区别。
来自我的模型:
<type name="deliveryTicketWorkflow:start">
<parent>bpm:startTask</parent>
<properties>
</properties>
<associations />
<overrides />
<mandatory-aspects>
<aspect>deliveryTicketWorkflow:pmAspect</aspect>
<aspect>deliveryTicketWorkflow:requestDetailsAspect</aspect>
</mandatory-aspects>
</type>
<aspect name="deliveryTicketWorkflow:pmAspect">
<associations>
<association name="deliveryTicketWorkflow:assignedPM">
<source>
<mandatory>false</mandatory>
<many>false</many>
</source>
<target>
<class>cm:person</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
我的配置将其用作:
<config condition="activiti$deliveryTicketWorkflow" evaluator="string-compare">
<forms>
<form>
<field-visibility>
...
<show id="deliveryTicketWorkflow:assignedPM" />
...
</field-visibility>
<appearance>
...
<field id="deliveryTicketWorkflow:assignedPM" label-id="Project Manager" />
...
</appearance>
</form>
</forms>
</config>
我对 deliveryTicketworkflow:start 的配置是相同的。这成功地显示了这个人 select 或者,在没有强制要求的情况下,正好像 Stefan 所说的那样 100%。
在我的 bpmn 工作流定义中,我在开始事件的执行监听器中有这些片段:
if(!execution.getVariable("deliveryTicketWorkflow_assignedPM")){
execution.setVariable("deliveryTicketWorkflow_assignedPM", initiator);
}
...
deliveryTicket.properties["dtdlm:projectManager"] = execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.firstName + " " + execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.lastName;
当工作流程是 运行 并且我 select 某人作为 PM 时,最后一行(获取 PM 的名字和姓氏的地方)returns 的值为"deliveryTicketWorkflow_assignedPM" 未定义。当它留空时,一切正常,但工作流程描述的一般信息部分仍然将项目经理列为 (None)。
您确实可以自定义人员选择器,正如 jeff 所描述的,但这需要相当多的编码工作。
或者,您可以使用工作流执行侦听器来启动事件,并使用它将 bpm_assignee 变量设置为发起者,以防它在表单中为空:
给你bpmn20添加监听器:
<activiti:executionListener event="start" class="com.mycomp.Executionlistener"></activiti:executionListener>
在您的第一个用户任务中,在您的工作流启动表单中定义关联 属性 的受让人。
<userTask id="firsttask" name="firsttask" activiti:assignee="${mymodel.myassoc.properties.userName}" >
同时将此关联添加到您的启动任务内容模型中。
com.mycomp.Executionlistener 中的代码如下所示:
public void notify(DelegateExecution execution) throws Exception {
if (execution.getVariable("mymodel_myassoc") == null ){
ActivitiScriptNode userScriptNode= (ActivitiScriptNode) execution.getVariable("initiator");
execution.setVariable("mymodel_myassoc",userScriptNode);
}
}
当我开始我的工作流程时,我想要将其分配给某人的选项。如果没人选,我想默认分配给发起者。
这是否可以在不创建扩展 bpm:assignee 的新模型的情况下实现?如果没有,该扩展将如何完成?
我相信 Jeff Potts 的这个回答是相关的:
注意:我使用的是社区版 4.2
编辑:Stefan 的回答为我提供了绝大部分答案,但似乎我以某种方式错误地引用了关联的值。背景:我从来没有使用过联想,这可能只是我未能从类型和方面理解它们的区别。
来自我的模型:
<type name="deliveryTicketWorkflow:start">
<parent>bpm:startTask</parent>
<properties>
</properties>
<associations />
<overrides />
<mandatory-aspects>
<aspect>deliveryTicketWorkflow:pmAspect</aspect>
<aspect>deliveryTicketWorkflow:requestDetailsAspect</aspect>
</mandatory-aspects>
</type>
<aspect name="deliveryTicketWorkflow:pmAspect">
<associations>
<association name="deliveryTicketWorkflow:assignedPM">
<source>
<mandatory>false</mandatory>
<many>false</many>
</source>
<target>
<class>cm:person</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
我的配置将其用作:
<config condition="activiti$deliveryTicketWorkflow" evaluator="string-compare">
<forms>
<form>
<field-visibility>
...
<show id="deliveryTicketWorkflow:assignedPM" />
...
</field-visibility>
<appearance>
...
<field id="deliveryTicketWorkflow:assignedPM" label-id="Project Manager" />
...
</appearance>
</form>
</forms>
</config>
我对 deliveryTicketworkflow:start 的配置是相同的。这成功地显示了这个人 select 或者,在没有强制要求的情况下,正好像 Stefan 所说的那样 100%。
在我的 bpmn 工作流定义中,我在开始事件的执行监听器中有这些片段:
if(!execution.getVariable("deliveryTicketWorkflow_assignedPM")){
execution.setVariable("deliveryTicketWorkflow_assignedPM", initiator);
}
...
deliveryTicket.properties["dtdlm:projectManager"] = execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.firstName + " " + execution.getVariable("deliveryTicketWorkflow_assignedPM").properties.lastName;
当工作流程是 运行 并且我 select 某人作为 PM 时,最后一行(获取 PM 的名字和姓氏的地方)returns 的值为"deliveryTicketWorkflow_assignedPM" 未定义。当它留空时,一切正常,但工作流程描述的一般信息部分仍然将项目经理列为 (None)。
您确实可以自定义人员选择器,正如 jeff 所描述的,但这需要相当多的编码工作。
或者,您可以使用工作流执行侦听器来启动事件,并使用它将 bpm_assignee 变量设置为发起者,以防它在表单中为空:
给你bpmn20添加监听器:
<activiti:executionListener event="start" class="com.mycomp.Executionlistener"></activiti:executionListener>
在您的第一个用户任务中,在您的工作流启动表单中定义关联 属性 的受让人。
<userTask id="firsttask" name="firsttask" activiti:assignee="${mymodel.myassoc.properties.userName}" >
同时将此关联添加到您的启动任务内容模型中。
com.mycomp.Executionlistener 中的代码如下所示:
public void notify(DelegateExecution execution) throws Exception {
if (execution.getVariable("mymodel_myassoc") == null ){
ActivitiScriptNode userScriptNode= (ActivitiScriptNode) execution.getVariable("initiator");
execution.setVariable("mymodel_myassoc",userScriptNode);
}
}