WCM产品很多功能会使用到短信发送功能,比如:在工作流流转过程中,通过短信通知相应的人员;WCM用户直接通过消息(包括站内消息、短信消息)进行协作沟通等。
由于发送短信需要购买短信网关,而且是收费的,并且不同厂商的短信网关接口也不一样,所以WCM产品自身只是提供了发送短信的接口抽象,项目在具体实现发送短信功能时,需要实现该接口来达到真正发送短信的目的。
以下将以示例介绍如何在WCM中集成短信发送功能。
由于发送短信需要购买短信网关,而短信网关提供商会提供发送短信的示意代码,所以需要和用户沟通如何获取短信网关及相关资料,这个用户那边自己一般会购买。
如引言中的说明,WCM很多功能已经使用到了短信接口,但真正发送短信是一个空的方法实现,所以本步骤中,需要项目实现WCM的接口,在里面调用网关厂商的代码。
2.2.1 撰写ISendWorker接口实现的类
撰写一个新的类,如:MySMSSendWorker,该类需要实现WCM的接口ISendWorker;新类的名称和包的名称可以根据自己的需求进行定义。笔者新建生成空的类名为MySMSSendWorker,代码如下:
package com.trs.components.common.message;
import com.trs.cms.auth.persistent.User;
public class MySMSSendWorker implements ISendWorker {
public void send(Message message, User receiver) {
// TODO Auto-generated method stub
}
}用户的发送代码需要在send中完成。
2.2.2 实现ISendWorker的send方法
在新撰写的类中实现send方法,send方法的参数说明如下:
Message:com.trs.components.common.message.Message
含有用户发送消息的许多信息,常用到的有:
getCrUserName():获得当前用户的用户名
getTitle():获得当前消息的标题
getBody():获得当前消息的内容
User:com.trs.cms.auth.persistent.User
含有短信接收人的相关信息,此处常用的函数有:
getMobile():获取消息接收者的手机号。
通过上面两个参数能够获取用户发送短信所需的一切信息。笔者的试例代码如下,用户在使用时需按照服务提供上提供的接口进行编码。
public void send(Message _currMessage, User _currReceiver) {
//CMySms 为用户接口,不同接口中的函数有所不同,请根据情况使用
UserSMS mySMS = new UserSMS();
//获取发短信的人
mySMS.setFrom(_currMessage.getCrUserName());
try {
//获取并设置短信接收人
mySMS.setTo(_currReceiver.getMobile());
//获取并设置短信内容
mySMS.setContent(_currMessage.getTitle() + ":"
+ _currMessage.getBody());
//短信发送
mySMS.send();
} catch (CMyException e) {
logger.error(I18NMessage.get(SMSSendWorker.class,
"SMSSendWorker.label1", "发送手机短信失败!"), e);
}
}2.2.3 调整配置文件
修改配置文件【configfiles rsconfigdomaincom.trs.components.common.messageeans.xml】中的字段使WCM调用用户自定义的类。
修改方法如下:

将所圈地方修改成用户自定义的类的路径。笔者的包为com.trs.components.common.message,类名为MySMSSendWorker ,因此笔者此处改为com.trs.components.common.message.MySMSSendWorker。
2.3 部署测试
将写好的类及配置文件应用到WCM的Tomcat环境中,测试工作流或在线消息等功能的短信发送功能。