执行监听器
可以在流程执行中发生特定的事件时,执行外部Java代码或计算表达式。需要实现org.flowable.engine.delegate.ExecutionListener
接口。可以被捕获的事件有:
1、流程实例的启动和结束。
2、流程执行转移。
3、活动的启动和结束。
4、网关的启动和结束。
5、中间事件的启动和结束。
6、启动事件的结束,和结束事件的启动。
public class MyExecutionListener implements ExecutionListener {
//流程设计器添加的参数
private Expression param;
@Override
public void notify(DelegateExecution execution) throws FlowableException{
}
}
执行监听器
-
event(事件)(必填):触发任务监听器的任务事件类型。可用的事件有:
-
create(创建):当任务已经创建,并且所有任务参数都已经设置时触发。
-
assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。这顺序看起来不太自然,但是有实际原因的:当收到create事件时,我们通常希望能看到任务的所有参数,包括办理人。
-
complete(完成):当任务已经完成,从运行时数据中删除前触发。
-
delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发。
-
-
class:需要调用的委托类。这个类必须实现
org.flowable.engine.delegate.TaskListener
接口。
public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("MyTaskListener");
}
}
事件监听器
-
对事件监听器的唯一要求,是要实现
org.flowable.engine.delegate.event.FlowableEventListener
接口。下面是一个监听器实现的例子,它将接收的所有事件打印至标准输出,并对作业执行相关的事件特别处理: -
isFailOnException()
方法决定了当事件分发后,onEvent(..)
方法抛出异常时的行为。若返回false
,忽略异常;若返回true
,异常不会被忽略而会被上抛,使当前执行的命令失败。如果事件是API调用(或其他事务操作,例如作业执行)的一部分,事务将被回滚。如果事件监听器中并不是重要的业务操作,建议返回false
。Flowable提供了少量基础实现,以简化常用的事件监听器使用场景。它们可以被用作监听器的示例或基类:
-
org.flowable.engine.delegate.event.BaseEntityEventListener: 事件监听器基类,可用来监听实体(entity)相关事件,特定或所有实体的事件都可以。它隐藏了类型检测,提供了4个需要覆盖的方法:
onCreate(..)
,onUpdate(..)
与onDelete(..)
在实体创建、更新及删除时调用;对所有其他实体相关事件,onEntityEvent(..)
会被调用。 -
支持的事件类型
下表列出引擎中的所有事件类型。每种类型对应
org.flowable.engine.common.api.delegate.event.FlowableEventType
中的一个枚举值。
@Component
public class ProcessEndListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
}
@Override
public boolean isFailOnException() {
return false;
}
/**
* @return true则配置,false在事务内触发
*/
@Override
public boolean isFireOnTransactionLifecycleEvent() {
return true;
}
@Override
public String getOnTransaction() {
//事务提交后触发
return TransactionState.COMMITTED.name();
}
}