WebcatEE 帮助文档
本文档的目标用户是 JAVA 开发人员。
本文档描述如何进行消息通知扩展。
版本要求:1.2.8+
不稳定接口,2.4.5+ 版本已移除该接口。低版本建议直接删除所有 listener 和 notify 配置,并基于 WorkOrderEventListener 自行实现发送通知。
消息通知
当用户提交提交工单时,系统会向拥有审核权限的用户发送消息通知。WebcatEE 默认的实现仅仅会发送邮件通知,若要实现自定义的消息通知,可通过 WebcatEE 提供的接口进行扩展。
消息通知扩展是 WebcatEE 提供的默认实现,应用方也可以不使用该实现,基于事件监听自己实现通知发送。
该接口暂不稳定,不建议基于该接口扩展,建议使用监听器自行扩展。
1. 开发消息通知实现类,实现类必须实现 com.skin.webcat.api.notify.WorkOrderNotifyService 接口,接口定义参见下方附录;
2. 注入消息通知实现类,~/WEB-INF/webcat/application.xml,示例:
<?xml version="1.0" encoding="utf-8"?>
<webcatee>
<!-- 该监听器是必须的, 如果不注册将不会发送邮件 -->
<listener class="com.skin.webcat.api.order.DefaultOrderEventListener"/>
<notify>
<!-- 发送渠道允许定义多个, WebcatEE 在发送通知时会依次调用, 即: 审核者可以同时收到多个渠道的通知。 -->
<!-- 消息通知是在用户提交工单之后异步发送,不会影响主线程。实现类自己控制发送失败时自动重试,WebcatEE 不提供自动重试机制。 -->
<channel class="com.skin.webcat.api.notify.WorkOrderMailNotifyService"/>
</notify>
</webcatee>
附录
public interface WorkOrderNotifyService {
/**
* 用于记录发送日志
* @return String
*/
String getChannelName();
/**
* 返回值为审核者ID和发送结果的Map, 系统会根据返回结果记录发送日志
* @param user
* @param workOrder
* @return Map<Long, ReturnValue<String>>
*/
Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DatabaseOrder workOrder);
/**
* @param user
* @param workOrder
* @return Map<Long, ReturnValue<String>>
*/
Map<Long, ReturnValue<String>> send(User user, List<User> auditors, TableOrder workOrder);
/**
* @param user
* @param workOrder
* @return Map<Long, ReturnValue<String>>
*/
Map<Long, ReturnValue<String>> send(User user, List<User> auditors, BaseChangeOrder workOrder);
/**
* @param user
* @param workOrder
* @return Map<Long, ReturnValue<String>>
*/
Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DataChangeOrder workOrder);
/**
* @param user
* @param workOrder
* @return Map<Long, ReturnValue<String>>
*/
Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DataExportOrder workOrder);
}
示例
public WorkOrderMailNotifyService implements WorkOrderNotifyService {
/**
* @return String
*/
@Override
public String getChannelName() {
return "mail";
}
/**
* @param user
* @param databaseOrder
* @return ReturnValue<String>
*/
@Override
public Map<Long, ReturnValue<String>> send(User user, List<User> auditors, DatabaseOrder databaseOrder) {
try {
// 发送邮件
String address = this.getMailAddress(auditors);
String subject = "[WebcatEE] - " + databaseOrder.getOrderName();
String content = "...";
MailService.send(address, subject, content);
// 发送成功
return ...
}
catch(Exception e) {
// 发送失败
logger.error(e.getMessage(), e);
return ...
}
}
// 其他方法
...
}