协同OA的短信接口 OA目前使用短信猫作为内置的短信发送设备,但往往客户本身已经采购了其他的短信服务商的产品,比如中国电信的企信通等等,如果要改用其他的短信发送装置的话可以通过OA短信接口实现。厦门OA短信接口包含了sendSMS(msg)方法,客户开发人员只要用自己的业务逻辑实现这个方法,厦门名易在需要发送短信的时候就会调用客户自己开发的发送方式。 另外,名易OA提供了基于中间表的接口实现,客户可以直接使用。这个接口实现的原理是把要发送的短信数据按照和短信设备供应商约定的格式写道中间表中,由短信设备供应商定时去获取数据并发送(大多数短信设备供应商已经提供了通过中间表方式发送短信的功能。) 在理解了上面的原理之后,接下来讲解一下配置使用接口的方法。 1.找到ecoloyg安装目录WEB-INFervicems.xml,打开这个文件,里面的内容如下: 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 需要关注的是红色部分的内容。这里逐一说明. setproperty=typevalue=sqlserver:指定中间表所在数据库的类型,如果是oracle的话就改为value=oracle setproperty=hostvalue=192.168.0.204:指定中间表所在数据库服务器的ip setproperty=portvalue=1433:指定中间表所在数据库的端口,如果是oracle的话应改为1521 setproperty=dbnamevalue=OA3802:指定中间表所在数据库名 setproperty=usernamevalue=sa:指定中间表所在数据库帐号 setproperty=passwordvalue=123:指定中间表所在数据库密码 以上的配置和think.properties中的参数差不多,应该不难理解。 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,getDate(),1,1,1):指定往中间表插入数据使用的sql语句。例子中的这条sql是根据一个客户的需求写的,客户提供的中间表结构是: 表名:OutBox 字段:ReceiverMobileNo,----------------接受人 Msg,----------------短信内容 SendTime,-----------------发送时间 IsChinese,-----------------是否中文 ExpressLevel,-----------------紧急程度 Sender----------------发送人 实际上厦门名易OA短信接口只需要用到接受人和短信内容两个字段,这两个字段的值不是固定的,由短信接口负责把数据传过来,因此用?号表示他们的值。其他字段的值不用关心,可以随便写死一些数据,这个例子里全部写的是1,发送时间是用sqlserver自带的函数getDate()获取的。 不妨这样理解,最简单的中间表可以是这样子的: 表名:someTable 字段:MobileNo, messageBody 2.修改OAWEB-INFpropthink_rtx.properties中的内容为: IsInitRTXOrg=true IsDownLineNotify=true #CurSmsServer=rtx CurSmsServerIsValid=true RTXServerPort=8036 RTXServerIP= RTXServerOutIP= 也就是说只要把CurSmsServer=rtx用#号注释掉就可以了。 下面是两个建中间表的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下对应的sms.xml文件内容为: 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 客户开发人员可以自己实现接口: publicclassTestServiceimplementsSmsService{ publicbooleansendSMS(StringsmsId,Stringnumber,Stringmsg){ System.out.println(接受人:+number); System.out.println(测试短信:+msg); 。。。 returntrue; } } 那么OA系统在发送短信时将会调用TestService中的sendSMS方法。 把这个实现部署到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在发送短信是将调用TestService实现。
信息发布:广州名易软件有限公司 http://www.myidp.net
|