项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频讲解地址 https://www.bilibili.com/video/av79328344
监听器
任务监听器 针对userTask节点
事件监听器 针对任意节点
由于实际情况下我们会在节点会动态调用业务系统的接口去改变业务单据的状态或者做一些业务处理。如果每次都去新建一个监听器这样势必就非常的繁琐也不好维护,那么我们该如何做才能达到动态调用的效果呢?接下来小学生一步步的实现这个统一的功能。
一、定义统一的任务监听器
@Scope
@Component(value = "taskBusinessCallListener")
public class TaskBusinessCallListener extends BusinessCallListener implements TaskListener {/*** rest接口*/private FixedValue restUrl;/*** 参数 多个的话用分号隔开 实例 userCode:00004737;status:1*/private FixedValue params;@Overridepublic void notify(DelegateTask delegateTask) {String processInstanceId = delegateTask.getProcessInstanceId();String restUrlStr = null, paramsStr = null;if (restUrl != null) {restUrlStr = restUrl.getExpressionText();}if (params != null) {paramsStr = params.getExpressionText();}//执行回调//TODO 临时处理restUrlStr = "http://127.0.0.1:8989/rest/leave/updateLeaveStatus";paramsStr = "status:1";this.callBack(processInstanceId, restUrlStr, paramsStr);}
}
FixedValue restUrl 介绍我们配置的field字段,表示要请求的resturl,这里注意接收字段一定要用FixedValue才能接收到。
二、调用接口
public void callBack(String pocessInstanceId, String restUrl, String params) {String paramsJson = null;try {Map<String, Object> paramMap = new HashMap<String, Object>();ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(pocessInstanceId).singleResult();paramMap.put("businessKey", processInstance.getBusinessKey());this.setParams(params, paramMap);paramsJson = JsonUtils.toJson(paramMap);//执行dubbo方法logger.info("开始调用业务系统接口" + restUrl + ",业务参数:" + paramsJson);restTemplate.postForObject(restUrl, paramsJson, String.class);} catch (Exception e) {logger.error("调用业务系统的方法失败", e);}
三、配置监听