「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
定义:
用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。
需求举例:
在某一个审批节点上,需要根据表单业务逻辑,动态分配下一个节点的审批用户。
比如,想在下图的节点部门经理处 ,根据表单的“部门”字段分配给对应的部门经理。即假如表单的部门字段是A,那就分配给A部门的部门经理去审批,而不要给B部门的部门经理审批
实现步骤
(1)在节点“部门经理”处,配置任务监听器。
这里的事件有四种可以选择:create、assignment、complete、delete
- create(创建) :当任务已经创建,并且所有任务参数都已经设置时触发。
- assignment(指派) :当任务已经指派给某人时触发。
- complete(完成) :当任务已经审批完成时触发,即审批人审批结束后。
- delete(删除) :在任务即将被删除前触发。
根据需求,我们是要在到达节点“部门经理”之前的时候,决定哪个部门经理审批,所以事件选择 create
(2)然后在上图那里选择在委托表达式,填写我们对于的任务监听器实现,这里填写${purchaseApplyListener}
(3)新建类:PurchaseApplyListener.java,代码如下,注意 @Component填写的值要跟委托表达式填写的一致
注意:下面代码只是简略示例,实际需要结合你自身的业务逻辑做修改
@Component(value="purchaseApplyListener")
public class PurchaseApplyListener implements TaskListener{
@Override
public void notify(DelegateTask delegateTask){
//TODO 实现你的任务监听器逻辑
List<String> users = new ArrayList<>();
users.add("admin"); //将admin加入审批
delegateTask.addCandidateUsers(users);//给该节点添加候选审批用户
}
}
注意:如果想要在某个节点A里通过代码动态分配审批人,就不要在Flowable UI里对应节点A那分配用户,不然任务监听器写的分配的用户逻辑不会生效。
进阶-任务监听器传参
问题:在Flowable UI的任务监听器里如何传一个固定值,然后被监听器接收?
(1)在下图的任务监听器中,新增一个参数,名称为dept,字符串为bumenjingli,接下来就是如何在监听器接收这个参数。
(2)在任务监听器代码,新增一个Expression类型的成员,为dept。
注意:名称必须得跟你ui界面起的名称一致,此为dept
(3)然后通过代码(String)dept.getValue(delegateTask),即可获得值。