Flowable 任务监听器实践使用

4,563 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

定义:

用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。

需求举例:

在某一个审批节点上,需要根据表单业务逻辑,动态分配下一个节点的审批用户。

比如,想在下图的节点部门经理处 ,根据表单的“部门”字段分配给对应的部门经理。即假如表单的部门字段是A,那就分配给A部门的部门经理去审批,而不要给B部门的部门经理审批

image.png

实现步骤

(1)在节点“部门经理”处,配置任务监听器。

这里的事件有四种可以选择:createassignmentcompletedelete

  • create(创建) :当任务已经创建,并且所有任务参数都已经设置时触发。
  • assignment(指派) :当任务已经指派给某人时触发。
  • complete(完成) :当任务已经审批完成时触发,即审批人审批结束后。
  • delete(删除) :在任务即将被删除前触发。

根据需求,我们是要在到达节点“部门经理”之前的时候,决定哪个部门经理审批,所以事件选择 create image.png

(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,接下来就是如何在监听器接收这个参数。

image.png

(2)在任务监听器代码,新增一个Expression类型的成员,为dept。

注意:名称必须得跟你ui界面起的名称一致,此为dept

image.png

(3)然后通过代码(String)dept.getValue(delegateTask),即可获得值。

image.png

参考

tkjohn.github.io/flowable-us…