名易短信發(fā)送的功能。 二.實(shí)現(xiàn)方法步驟 實(shí)現(xiàn)方法分為兩類:一類是使用中間表方式實(shí)現(xiàn),另外一類是可自行編寫(xiě)接口代碼方式來(lái)調(diào)用方法; 中間表實(shí)現(xiàn)方法:接口的原理很簡(jiǎn)單,就是名易OA辦公軟件名易OA系統(tǒng)只負(fù)責(zé)把需要發(fā)送的短信數(shù)據(jù)放到中間表里,由短信設(shè)備或客戶自己把中間表里的數(shù)據(jù)發(fā)送出去。實(shí)際上大多數(shù)短信設(shè)備供應(yīng)商已經(jīng)實(shí)現(xiàn)了通過(guò)中間表方式發(fā)送短信。 接口對(duì)中間表的存放的位置、中間表名及字段名沒(méi)有要求,因?yàn)橥虚g表插入數(shù)據(jù)的sql是在配置文件中指定的,但是有兩點(diǎn)要注意 1.必須使用sqlserver或oracle數(shù)據(jù)庫(kù),其他的數(shù)據(jù)庫(kù)暫時(shí)不支持。 2.必須有用于存放短信內(nèi)容、短信接受人的字段。 使用說(shuō)明: 在理解了上面的原理之后,我們可以繼續(xù)了解配置使用接口的方法。 1.xml文件配置 文件位于ecoloygWEB-INFervicems.xml,打開(kāi)這個(gè)文件,里面的內(nèi)容如下: moduleid=smsversion=1.0.0 service-pointid=smssenderinterface=OA.sms.SmsService invoke-factory constructclass=OA.sms.JdbcSmsService setproperty=typevalue=sqlserver setproperty=hostvalue=192.168.0.204 setproperty=portvalue=1433 setproperty=dbnamevalue=名易OA辦公軟件名易OA系統(tǒng)3802 setproperty=usernamevalue=sa setproperty=passwordvalue=123 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,getDate(),1,1,1) construct invoke-factory ervice-point module
我們需要關(guān)注的是紅色部分的內(nèi)容。我逐一講解一下. setproperty=typevalue=sqlserver:指定中間表所在數(shù)據(jù)庫(kù)的類型,如果是oracle的話就改為value=oracle setproperty=hostvalue=192.168.0.204:指定中間表所在數(shù)據(jù)庫(kù)服務(wù)器的ip setproperty=portvalue=1433:指定中間表所在數(shù)據(jù)庫(kù)的端口,如果是oracle的話應(yīng)改為1521 setproperty=dbnamevalue=名易OA辦公軟件名易OA系統(tǒng)3802:指定中間表所在數(shù)據(jù)庫(kù)名 setproperty=usernamevalue=sa:指定中間表所在數(shù)據(jù)庫(kù)帳號(hào) setproperty=passwordvalue=123:指定中間表所在數(shù)據(jù)庫(kù)密碼 以上的配置和OA.properties中的參數(shù)差不多,應(yīng)該不難理解。 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,getDate(),1,1,1):指定往中間表插入數(shù)據(jù)使用的sql語(yǔ)句。 表名:OutBox 字段:ReceiverMobileNo,----------------接受人 Msg,----------------短信內(nèi)容 SendTime,-----------------發(fā)送時(shí)間 IsChinese,-----------------是否中文 ExpressLevel,-----------------緊急程度 Sender----------------發(fā)送人
實(shí)際上我們只需要用到接受人和短信內(nèi)容兩個(gè)字段,這兩個(gè)字段的值不是固定的,由我們的接口負(fù)責(zé)把數(shù)據(jù)傳過(guò)來(lái),因此用?號(hào)表示他們的值。其他字段的值我們不關(guān)心,可以隨便寫(xiě)死一些數(shù)據(jù),這個(gè)例子里全部寫(xiě)的1,發(fā)送時(shí)間是用sqlserver自帶的函數(shù)getDate()獲取的。
我們可以這樣理解,最簡(jiǎn)單的中間表可以是這樣子的: 表名:someTable 字段:MobileNo, messageBody 2.短信設(shè)備配置文件修改 修改名易OA辦公軟件名易OA系統(tǒng)WEB-INFpropOA_rtx.properties中的內(nèi)容為: #configfile #FriAug1311:30:56CST2004 IsInitRTXOrg=true IsDownLineNotify=true #CurSmsServer=rtx CurSmsServerIsValid=true RTXServerPort=8036 RTXServerIP= RTXServerOutIP=
也就是說(shuō)只要把CurSmsServer=rtx用#號(hào)注釋掉就可以了。 3.中間表之sql腳本樣例 下面提供兩個(gè)建中間表的sql腳本供參考: 1.forsqlserver CREATETABLEoutbox( IDintIDENTITY(1,1), ExpressLevelint, Sendervarchar(50), ReceiverMobileNovarchar(50), Msgvarchar(500), SendTimedatetime, IsChinesebit )
2.fororacle createtableOUTBOX ( IDNUMBERnotnull, EXPRESSLEVELNUMBER, SENDERVARCHAR2(50), RECEIVERMOBILENOVARCHAR2(50)notnull, MSGVARCHAR2(500), SENDTIMEDATEnotnull, ISCHINESENUMBERnotnull ); createsequenceOUTBOX_ID_SEQ minvalue1 maxvalue999999999 startwith141 incrementby1 cache20; CREATEORREPLACETRIGGERSET_OUTBOX_IDBEFORE INSERTONOUTBOX FOREACHROW
DECLARE NEXT_OUTBOX_IDNUMBER; BEGIN SELECTOUTBOX_ID_SEQ.NEXTVALINTONEXT_OUTBOX_IDFROMDUAL; :NEW.ID:=NEXT_OUTBOX_ID; END;
oracle下對(duì)應(yīng)的sms.xml文件內(nèi)容為: moduleid=smsversion=1.0.0 service-pointid=smssenderinterface=OA.sms.SmsService invoke-factory constructclass=OA.sms.JdbcSmsService setproperty=typevalue=oracle setproperty=hostvalue=192.168.0.204 setproperty=portvalue=1521 setproperty=dbnamevalue=OA1 setproperty=usernamevalue=名易OA辦公軟件名易OA系統(tǒng)40002 setproperty=passwordvalue=名易OA辦公軟件名易OA系統(tǒng) setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,(selectsysdatefromdual),1,1,'1') construct invoke-factory ervice-point module
注意:每次配置后需要重啟OA服務(wù)生效;