名易短信发送的功能。 二.实现方法步骤 实现方法分为两类:一类是使用中间表方式实现,另外一类是可自行编写接口代码方式来调用方法; 中间表实现方法:接口的原理很简单,就是名易OA办公软件名易OA系统只负责把需要发送的短信数据放到中间表里,由短信设备或客户自己把中间表里的数据发送出去。实际上大多数短信设备供应商已经实现了通过中间表方式发送短信。 接口对中间表的存放的位置、中间表名及字段名没有要求,因为往中间表插入数据的sql是在配置文件中指定的,但是有两点要注意 1.必须使用sqlserver或oracle数据库,其他的数据库暂时不支持。 2.必须有用于存放短信内容、短信接受人的字段。 使用说明: 在理解了上面的原理之后,我们可以继续了解配置使用接口的方法。 1.xml文件配置 文件位于ecoloygWEB-INFervicems.xml,打开这个文件,里面的内容如下: 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系统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
我们需要关注的是红色部分的内容。我逐一讲解一下. setproperty=typevalue=sqlserver:指定中间表所在数据库的类型,如果是oracle的话就改为value=oracle setproperty=hostvalue=192.168.0.204:指定中间表所在数据库服务器的ip setproperty=portvalue=1433:指定中间表所在数据库的端口,如果是oracle的话应改为1521 setproperty=dbnamevalue=名易OA办公软件名易OA系统3802:指定中间表所在数据库名 setproperty=usernamevalue=sa:指定中间表所在数据库帐号 setproperty=passwordvalue=123:指定中间表所在数据库密码 以上的配置和OA.properties中的参数差不多,应该不难理解。 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,getDate(),1,1,1):指定往中间表插入数据使用的sql语句。 表名:OutBox 字段:ReceiverMobileNo,----------------接受人 Msg,----------------短信内容 SendTime,-----------------发送时间 IsChinese,-----------------是否中文 ExpressLevel,-----------------紧急程度 Sender----------------发送人
实际上我们只需要用到接受人和短信内容两个字段,这两个字段的值不是固定的,由我们的接口负责把数据传过来,因此用?号表示他们的值。其他字段的值我们不关心,可以随便写死一些数据,这个例子里全部写的1,发送时间是用sqlserver自带的函数getDate()获取的。
我们可以这样理解,最简单的中间表可以是这样子的: 表名:someTable 字段:MobileNo, messageBody 2.短信设备配置文件修改 修改名易OA办公软件名易OA系统WEB-INFpropOA_rtx.properties中的内容为: #configfile #FriAug1311:30:56CST2004 IsInitRTXOrg=true IsDownLineNotify=true #CurSmsServer=rtx CurSmsServerIsValid=true RTXServerPort=8036 RTXServerIP= RTXServerOutIP=
也就是说只要把CurSmsServer=rtx用#号注释掉就可以了。 3.中间表之sql脚本样例 下面提供两个建中间表的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下对应的sms.xml文件内容为: 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系统40002 setproperty=passwordvalue=名易OA办公软件名易OA系统 setproperty=sqlvalue=insertintoOutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender)values(?,?,(selectsysdatefromdual),1,1,'1') construct invoke-factory ervice-point module
注意:每次配置后需要重启OA服务生效;