|
協(xié)同OA的短信接口 OA目前使用短信貓作為內(nèi)置的短信發(fā)送設(shè)備,但往往客戶本身已經(jīng)采購(gòu)了其他的短信服務(wù)商的產(chǎn)品,比如中國(guó)電信的企信通等等,如果要改用其他的短信發(fā)送裝置的話可以通過(guò)OA短信接口實(shí)現(xiàn)。廈門OA短信接口包含了sendSMS(msg)方法,客戶開發(fā)人員只要用自己的業(yè)務(wù)邏輯實(shí)現(xiàn)這個(gè)方法,廈門名易在需要發(fā)送短信的時(shí)候就會(huì)調(diào)用客戶自己開發(fā)的發(fā)送方式。 另外,名易OA提供了基于中間表的接口實(shí)現(xiàn),客戶可以直接使用。這個(gè)接口實(shí)現(xiàn)的原理是把要發(fā)送的短信數(shù)據(jù)按照和短信設(shè)備供應(yīng)商約定的格式寫道中間表中,由短信設(shè)備供應(yīng)商定時(shí)去獲取數(shù)據(jù)并發(fā)送(大多數(shù)短信設(shè)備供應(yīng)商已經(jīng)提供了通過(guò)中間表方式發(fā)送短信的功能。) 在理解了上面的原理之后,接下來(lái)講解一下配置使用接口的方法。 1.找到ecoloyg安裝目錄WEB-INFervicems.xml,打開這個(gè)文件,里面的內(nèi)容如下: moduleid=smsversion=1.0.0 service-pointid=smssenderinterface=think.sms.SmsService invoke-factory constructclass=think.sms.JdbcSmsService setproperty=typevalue=sqlserver setproperty=hostvalue=192.168.0.204 setproperty=portvalue=1433 setproperty=dbnamevalue=OA3802 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)容。這里逐一說(shuō)明. 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=OA3802:指定中間表所在數(shù)據(jù)庫(kù)名 setproperty=usernamevalue=sa:指定中間表所在數(shù)據(jù)庫(kù)帳號(hào) setproperty=passwordvalue=123:指定中間表所在數(shù)據(jù)庫(kù)密碼 以上的配置和think.properties中的參數(shù)差不多,應(yīng)該不難理解。 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,getDate(),1,1,1):指定往中間表插入數(shù)據(jù)使用的sql語(yǔ)句。例子中的這條sql是根據(jù)一個(gè)客戶的需求寫的,客戶提供的中間表結(jié)構(gòu)是: 表名:OutBox 字段:ReceiverMobileNo,----------------接受人 Msg,----------------短信內(nèi)容 SendTime,-----------------發(fā)送時(shí)間 IsChinese,-----------------是否中文 ExpressLevel,-----------------緊急程度 Sender----------------發(fā)送人 實(shí)際上廈門名易OA短信接口只需要用到接受人和短信內(nèi)容兩個(gè)字段,這兩個(gè)字段的值不是固定的,由短信接口負(fù)責(zé)把數(shù)據(jù)傳過(guò)來(lái),因此用?號(hào)表示他們的值。其他字段的值不用關(guān)心,可以隨便寫死一些數(shù)據(jù),這個(gè)例子里全部寫的是1,發(fā)送時(shí)間是用sqlserver自帶的函數(shù)getDate()獲取的。 不妨這樣理解,最簡(jiǎn)單的中間表可以是這樣子的: 表名:someTable 字段:MobileNo, messageBody 2.修改OAWEB-INFpropthink_rtx.properties中的內(nèi)容為: IsInitRTXOrg=true IsDownLineNotify=true #CurSmsServer=rtx CurSmsServerIsValid=true RTXServerPort=8036 RTXServerIP= RTXServerOutIP= 也就是說(shuō)只要把CurSmsServer=rtx用#號(hào)注釋掉就可以了。 下面是兩個(gè)建中間表的sql腳本供參考: 1.forsqlserver CREATETABLEoutbox( IDintIDENTITY(1,1), ExpressLevelint, Sendervarchar(50), ReceiverMobileNovarchar(50), Msgvarchar(500), SendTimedatetime, IsChinesebit ) 3.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=think.sms.SmsService invoke-factory constructclass=think.sms.JdbcSmsService setproperty=typevalue=oracle setproperty=hostvalue=192.168.0.204 setproperty=portvalue=1521 setproperty=dbnamevalue=think1 setproperty=usernamevalue=OA40002 setproperty=passwordvalue=OA setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,(selectsysdatefromdual),1,1,'1') construct invoke-factory ervice-point module 客戶開發(fā)人員可以自己實(shí)現(xiàn)接口: publicclassTestServiceimplementsSmsService{ publicbooleansendSMS(StringsmsId,Stringnumber,Stringmsg){ System.out.println(接受人:+number); System.out.println(測(cè)試短信:+msg); 。。。 returntrue; } } 那么OA系統(tǒng)在發(fā)送短信時(shí)將會(huì)調(diào)用TestService中的sendSMS方法。 把這個(gè)實(shí)現(xiàn)部署到OA中,只需修改sms.xml就可以了,: moduleid=smsversion=1.0.0 service-pointid=smssenderinterface=think.sms.SmsService invoke-factory constructclass=TestService construct invoke-factory ervice-point module 紅色部分表示OA在發(fā)送短信是將調(diào)用TestService實(shí)現(xiàn)。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|