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环境中,测试工作流或在线消息等功能的短信发送功能。