一、核心配置类
package com.magus.project.flow.config;
import com.google.common.collect.Maps;
import com.magus.project.flow.listener.ProcessStartedListener;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.api.delegate.event.FlowableEventListener;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.flowable.spring.boot.EngineConfigurationConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* @Description flowable全局监听器配置类
* @author: lxk
* @Date 2020年6月17日14:44:33
*/
@Configuration
public class FlowableListenerConfig {
/**
* 任务节点前置监听
* flowable监听级别参照 {@link FlowableEngineEventType} org.flowable.common.engine.api.delegate.event
*/
private static final String CUSTOMER_LISTENER_PROCESS_STARTED = "PROCESS_STARTED";
/**
* 任务节点前置监听
* 自己建立监听类实现FlowableEventListener接口
*/
private final ProcessStartedListener taskBeforeListener;
@Autowired
public FlowableListenerConfig(ProcessStartedListener taskBeforeListener) {
this.taskBeforeListener = taskBeforeListener;
}
/**
* 将自定义监听器纳入flowable监听
*
* @param
* @return org.flowable.spring.boot.EngineConfigurationConfigurer<org.flowable.spring.SpringProcessEngineConfiguration>
*/
@Bean
public EngineConfigurationConfigurer<SpringProcessEngineConfiguration> globalListenerConfigurer() {
return engineConfiguration -> {
engineConfiguration.setTypedEventListeners(this.customFlowableListeners());
};
}
/**
* 监听类配置 {@link FlowableEngineEventType} flowable监听器级别
*
* @param
* @return java.util.Map<java.lang.String, java.util.List < org.flowable.common.engine.api.delegate.event.FlowableEventListener>>
*/
private Map<String, List<FlowableEventListener>> customFlowableListeners() {
Map<String, List<FlowableEventListener>> listenerMap = Maps.newHashMap();
listenerMap.put(CUSTOMER_LISTENER_PROCESS_STARTED, new ArrayList<>(Collections.singletonList(taskBeforeListener)));
return listenerMap;
}
}
二、监听器
package com.magus.project.flow.listener;
import com.magus.framework.core.springbean.SpringContextUtils;
import com.magus.project.flow.constants.Constant;
import com.magus.project.flow.webBean.FormRelevant;
import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.api.delegate.event.FlowableEvent;
import org.flowable.common.engine.api.delegate.event.FlowableEventListener;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.event.impl.FlowableProcessEventImpl;
import org.springframework.stereotype.Component;
/**
* 流程实例开始,监听处理类
* @author: lxk
* @create: 2020年6月17日14:47:52
**/
@Slf4j
@Component
public class ProcessStartedListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
log.error("----------前置监听器{},执行开始----------");
FlowableProcessEventImpl eventImpl = (FlowableProcessEventImpl) event;
RuntimeService runtimeService = SpringContextUtils.getBean(RuntimeService.class);
runtimeService.setVariable(eventImpl.getExecutionId(), Constant.PROCESS_FORM_SKIP_EBABLE, true);
//获取流程启动是设置的变量对象
FormRelevant formRelevant = (FormRelevant) runtimeService.getVariable(eventImpl.getExecutionId(), Constant.PROCESS_FORM_RELEVANT_KEY);
log.error("----------前置监听器{},执行结束----------");
}
@Override
public boolean isFailOnException() {
return false;
}
@Override
public boolean isFireOnTransactionLifecycleEvent() {
return false;
}
@Override
public String getOnTransaction() {
return null;
}
}