申請免費(fèi)試用、咨詢電話:400-8352-114
第五部分 泛普免費(fèi)OA短信API接口
一. 泛普OA免費(fèi)版接口說明
該接口用來實(shí)現(xiàn)調(diào)用各短信廠商提供的短信發(fā)送網(wǎng)關(guān)或者信息機(jī)實(shí)現(xiàn)泛普
OA系統(tǒng)短信發(fā)送的功能。
二.
泛普
OA軟件實(shí)現(xiàn)方法&步驟
實(shí)現(xiàn)方法分為兩類:一類是使用中間表方式實(shí)現(xiàn),另外一類是可自行編寫接口代碼方式來調(diào)用方法;
中間表實(shí)現(xiàn)方法:接口的原理很簡單,就是泛普OA系統(tǒng)只負(fù)責(zé)把需要發(fā)送的短信數(shù)據(jù)放到中間表里,由短信設(shè)備
供應(yīng)商或客戶自己把中間表里的數(shù)據(jù)發(fā)送出去。實(shí)際上大多數(shù)短信設(shè)備供應(yīng)商已經(jīng)實(shí)現(xiàn)了通過中間表方式發(fā)送短信。
接口對中間表的存放的位置、中間表名及字段名沒有要求,因為往中間表插入數(shù)據(jù)的sql是在配置文件中指定的,但是有兩點(diǎn)要注意
1. 必須使用sql server、oracle、mysql、db2數(shù)據(jù)庫,其他的數(shù)據(jù)庫暫時不支持。
2. 必須有用于存放短信內(nèi)容、短信接受人的字段。
使用說明:
在理解了上面的原理之后,我們可以繼續(xù)了解配置使用接口的方法。
1. xml文件配置
文件位于泛普OA系統(tǒng)/WEB-INF/service/sms.xml,打開這個文件,里面的內(nèi)容如下:
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系統(tǒng).sms.SmsService">
<invoke-factory>
<construct class="泛普OA系統(tǒng).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系統(tǒng)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>
我們需要關(guān)注的是紅色部分的內(nèi)容。我逐一講解一下.
<set property="type" value="sqlserver2000"/>: 指定中間表所在數(shù)據(jù)庫的類型,如果是oracle的話就改為value="oracle"
<set property="host" value="192.168.0.204"/>: 指定中間表所在數(shù)據(jù)庫服務(wù)器的ip
<set property="port" value="1433"/>: 指定中間表所在數(shù)據(jù)庫的端口,如果是oracle的話應(yīng)改為1521
<set property="dbname" value="泛普OA系統(tǒng)3802"/>: 指定中間表所在數(shù)據(jù)庫名
<set property="username" value="sa"/>: 指定中間表所在數(shù)據(jù)庫帳號
<set property="password" value="123"/>:指定中間表所在數(shù)據(jù)庫密碼
以上的配置和泛普OA系統(tǒng).properties中的參數(shù)差不多,應(yīng)該不難理解。
<set property="sql" value="insert into OutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender) values(?,?,getDate(),1,1,1)"/>: 指定往中間表插入數(shù)據(jù)使用的sql語句。
表名:OutBox
字段:ReceiverMobileNo, ----------------接受人
Msg, ----------------短信內(nèi)容
SendTime, -----------------發(fā)送時間
IsChinese, -----------------是否中文
ExpressLevel, -----------------緊急程度
Sender ----------------發(fā)送人
實(shí)際上我們只需要用到接受人和短信內(nèi)容兩個字段,這兩個字段的值不是固定的,由我們的接口負(fù)責(zé)把數(shù)據(jù)傳過來,因此用?號表示他們的值。其他字段的值我們不關(guān)心,可以隨便寫死一些數(shù)據(jù),這個例子里全部寫的1,發(fā)送時間是用sql server自帶的函數(shù)getDate()獲取的。
我們可以這樣理解,最簡單的中間表可以是這樣子的:
表名:someTable
字段:MobileNo,
messageBody
修改泛普OA系統(tǒng)/WEB-INF/prop/泛普OA系統(tǒng)_rtx.properties中的內(nèi)容為:
#config file
#Fri Aug 13 11:30:56 CST 2004
IsInitRTXOrg=true
IsDownLineNotify=true
CurSmsServer=cus
CurSmsServerIsValid=true
RTXServerPort=8036
RTXServerIP=
RTXServerOutIP=
也就是說只要把CurSmsServer的值修改為cus,代表使用第三方中間件發(fā)短信。
中間表之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下對應(yīng)的sms.xml文件內(nèi)容為:
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系統(tǒng).sms.SmsService">
<invoke-factory>
<construct class="泛普OA系統(tǒng).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系統(tǒng)1"/>
<set property="username" value="泛普OA系統(tǒng)40002"/>
<set property="password" value="泛普OA系統(tǒng)"/>
<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服務(wù)
方可生效;
實(shí)際上使用中間表來和短信供應(yīng)商集成只是我們通用接口的一部分,這種實(shí)現(xiàn)方式的缺點(diǎn)是短信供應(yīng)商通常以定時掃描中間表的方式來把短信數(shù)據(jù)發(fā)送出去,短信發(fā)送的時間取決于掃描的頻度,實(shí)時性稍差。
泛普OA系統(tǒng)的短信接口除了提供了寫中間表的方式發(fā)送短信外,還提供了通過程序?qū)崿F(xiàn)短信接口的方式發(fā)送短信。這種方式需要實(shí)現(xiàn)系統(tǒng)中的泛普OA系統(tǒng).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系統(tǒng)系統(tǒng)在發(fā)送短信時將會調(diào)用SendSMS中的sendSMS方法。在sendSMS方法中可以根據(jù)實(shí)際情況去實(shí)現(xiàn)短信網(wǎng)關(guān),或者信息機(jī)供應(yīng)商提供的發(fā)送短信的具體方法。
通過該種方式發(fā)送短信,還需要修改sms.xml
<module id="sms" version="1.0.0">
<service-point id="smssender" interface="泛普OA系統(tǒng).sms.SmsService">
<invoke-factory>
<construct class=" SendSMS ">
</construct>
</invoke-factory>
</service-point>
</module>
黑體部分表示泛普OA系統(tǒng)在發(fā)送短信是將調(diào)用SendSMS這個類來實(shí)現(xiàn)。
注意:每次配置后需要重啟OA服務(wù)方可生效;
4. 在5.0及以上版本可以直接在進(jìn)行可視化的配置
通過頂部菜單【設(shè)置中心】【外部接口設(shè)置】【配置短信接口】即可進(jìn)入配置界面,通過選擇方式可以確定采用哪個方式來實(shí)現(xiàn)
第一類既是【通用接口】:通過中間表實(shí)現(xiàn)
第一類既是【自定義接口】:通過實(shí)現(xiàn)短信接口來實(shí)現(xiàn)
配置好之后還需在頂部菜單【設(shè)置中心】【參數(shù)設(shè)置】【系統(tǒng)設(shè)置】通過開關(guān)來控制到底采用哪種方式發(fā)送短信:RTX短信貓還是接口,配置界面如下:
注意:該配置,不需要重啟OA服務(wù)即可生效