申请免费试用、咨询电话:400-8352-114
第五部分 泛普免费OA短信API接口
一. 泛普OA免费版接口说明
该接口用来实现调用各短信厂商提供的短信发送网关或者信息机实现泛普
OA系统短信发送的功能。
实现方法分为两类:一类是使用中间表方式实现,另外一类是可自行编写接口代码方式来调用方法;
中间表实现方法:接口的原理很简单,就是泛普OA系统只负责把需要发送的短信数据放到中间表里,由短信设备
供应商或客户自己把中间表里的数据发送出去。实际上大多数短信设备供应商已经实现了通过中间表方式发送短信。
接口对中间表的存放的位置、中间表名及字段名没有要求,因为往中间表插入数据的sql是在配置文件中指定的,但是有两点要注意
1. 必须使用sql server、oracle、mysql、db2数据库,其他的数据库暂时不支持。
2. 必须有用于存放短信内容、短信接受人的字段。
使用说明:
在理解了上面的原理之后,我们可以继续了解配置使用接口的方法。
1. xml文件配置
文件位于泛普OA系统/WEB-INF/service/sms.xml,打开这个文件,里面的内容如下:
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系统.sms.SmsService">
<invoke-factory>
<construct class="泛普OA系统.sms.JdbcSmsService">
<set property="type" value="sqlserver2000"/>
<set property="host" value="192.168.0.204"/>
<set property="port" value="1433"/>
<set property="dbname" value="泛普OA系统3802"/>
<set property="username" value="sa"/>
<set property="password" value="123"/>
<set property="sql" value="insert into OutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender) values(?,?,getDate(),1,1,1)"/>
</construct>
</invoke-factory>
</service-point>
</module>
我们需要关注的是红色部分的内容。我逐一讲解一下.
<set property="type" value="sqlserver2000"/>: 指定中间表所在数据库的类型,如果是oracle的话就改为value="oracle"
<set property="host" value="192.168.0.204"/>: 指定中间表所在数据库服务器的ip
<set property="port" value="1433"/>: 指定中间表所在数据库的端口,如果是oracle的话应改为1521
<set property="dbname" value="泛普OA系统3802"/>: 指定中间表所在数据库名
<set property="username" value="sa"/>: 指定中间表所在数据库帐号
<set property="password" value="123"/>:指定中间表所在数据库密码
以上的配置和泛普OA系统.properties中的参数差不多,应该不难理解。
<set property="sql" value="insert into OutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender) values(?,?,getDate(),1,1,1)"/>: 指定往中间表插入数据使用的sql语句。
表名:OutBox
字段:ReceiverMobileNo, ----------------接受人
Msg, ----------------短信内容
SendTime, -----------------发送时间
IsChinese, -----------------是否中文
ExpressLevel, -----------------紧急程度
Sender ----------------发送人
实际上我们只需要用到接受人和短信内容两个字段,这两个字段的值不是固定的,由我们的接口负责把数据传过来,因此用?号表示他们的值。其他字段的值我们不关心,可以随便写死一些数据,这个例子里全部写的1,发送时间是用sql server自带的函数getDate()获取的。
我们可以这样理解,最简单的中间表可以是这样子的:
表名:someTable
字段:MobileNo,
messageBody
修改泛普OA系统/WEB-INF/prop/泛普OA系统_rtx.properties中的内容为:
#config file
#Fri Aug 13 11:30:56 CST 2004
IsInitRTXOrg=true
IsDownLineNotify=true
CurSmsServer=cus
CurSmsServerIsValid=true
RTXServerPort=8036
RTXServerIP=
RTXServerOutIP=
也就是说只要把CurSmsServer的值修改为cus,代表使用第三方中间件发短信。
中间表之sql脚本样例
下面提供两个建中间表的sql脚本供参考:
1. for sqlserver
CREATE TABLE outbox (
ID int IDENTITY (1, 1) ,
ExpressLevel int ,
Sender varchar (50) ,
ReceiverMobileNo varchar (50),
Msg varchar (500) ,
SendTime datetime,
IsChinese bit
)
2. for oracle
create table OUTBOX
(
ID NUMBER not null,
EXPRESSLEVEL NUMBER,
SENDER VARCHAR2(50),
RECEIVERMOBILENO VARCHAR2(50) not null,
MSG VARCHAR2(500),
SENDTIME DATE not null,
ISCHINESE NUMBER not null
);
create sequence OUTBOX_ID_SEQ
minvalue 1
maxvalue 999999999
start with 141
increment by 1
cache 20;
CREATE OR REPLACE TRIGGER "SET_OUTBOX_ID" BEFORE
INSERT ON "OUTBOX"
FOR EACH ROW
DECLARE
NEXT_OUTBOX_ID NUMBER;
BEGIN
SELECT OUTBOX_ID_SEQ.NEXTVAL INTO NEXT_OUTBOX_ID FROM DUAL;
:NEW.ID := NEXT_OUTBOX_ID;
END;
oracle下对应的sms.xml文件内容为:
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系统.sms.SmsService">
<invoke-factory>
<construct class="泛普OA系统.sms.JdbcSmsService">
<set property="type" value="oracle"/>
<set property="host" value="192.168.0.204"/>
<set property="port" value="1521"/>
<set property="dbname" value="泛普OA系统1"/>
<set property="username" value="泛普OA系统40002"/>
<set property="password" value="泛普OA系统"/>
<set property="sql" value="insert into OutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender) values(?,?,(select sysdate from dual),1,1,'1')"/>
</construct>
</invoke-factory>
</service-point>
</module>
实际上使用中间表来和短信供应商集成只是我们通用接口的一部分,这种实现方式的缺点是短信供应商通常以定时扫描中间表的方式来把短信数据发送出去,短信发送的时间取决于扫描的频度,实时性稍差。
泛普OA系统的短信接口除了提供了写中间表的方式发送短信外,还提供了通过程序实现短信接口的方式发送短信。这种方式需要实现系统中的泛普OA系统.sms.SMSService接口
示例代码:
public class SendSMS implements SmsService{
public boolean sendSMS(String smsId,String number,String msg){
System.out.println("接受人:"+number);
System.out.println("测试短信:"+msg);
return true;
}
}
那么泛普OA系统系统在发送短信时将会调用SendSMS中的sendSMS方法。在sendSMS方法中可以根据实际情况去实现短信网关,或者信息机供应商提供的发送短信的具体方法。
通过该种方式发送短信,还需要修改sms.xml
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系统.sms.SmsService">
<invoke-factory>
<construct class=" SendSMS ">
</construct>
</invoke-factory>
</service-point>
</module>
黑体部分表示泛普OA系统在发送短信是将调用SendSMS这个类来实现。
注意:每次配置后需要重启OA服务方可生效;
4. 在5.0及以上版本可以直接在进行可视化的配置
通过顶部菜单【设置中心】【外部接口设置】【配置短信接口】即可进入配置界面,通过选择方式可以确定采用哪个方式来实现
第一类既是【通用接口】:通过中间表实现
第一类既是【自定义接口】:通过实现短信接口来实现
配置好之后还需在顶部菜单【设置中心】【参数设置】【系统设置】通过开关来控制到底采用哪种方式发送短信:RTX短信猫还是接口,配置界面如下:
注意:该配置,不需要重启OA服务即可生效