监理公司管理系统 | 工程企业管理系统 | OA系统 | ERP系统 | 造价咨询管理系统 | 工程设计管理系统 | 甲方项目管理系统 | 签约案例 | 客户案例 | 在线试用
X 关闭

协同OA办公系统的短信接口实现过程

申请免费试用、咨询电话:400-8352-114

协同OA办公系统的短信接口
OA目前使用短信猫作为内置的短信发送设备,但往往客户本身已经采购了其他的短信服务商的产品,比如中国电信的企信通等等,如果要改用其他供应商的短信发送装置的话可以通过OA短信接口实现。厦门OA短信接口包含了sendSMS (msg)方法,客户开发人员只要用自己的业务逻辑实现这个方法,厦门泛普OA系统在需要发送短信的时候就会调用客户自己开发的发送方式。
另外,泛普OA提供了基于中间表的接口实现,客户可以直接使用。这个接口实现的原理是把要发送的短信数据按照和短信设备供应商约定的格式写道中间表中,由短信设备供应商定时去获取数据并发送(大多数短信设备供应商已经提供了通过中间表方式发送短信的功能。)
在理解了上面的原理之后,接下来讲解一下配置使用接口的方法。
1.       找到ecoloyg安装目录/WEB-INF/service/sms.xml,打开这个文件,里面的内容如下:
<module id="sms" version="1.0.0">
    <service-point id="smssender" interface="think.sms.SmsService">
        <invoke-factory>
            <construct class="think.sms.JdbcSmsService">
                <set property="type" value="sqlserver"/>
                <set property="host" value="192.168.0.204"/>
                <set property="port" value="1433"/>
                <set property="dbname" value="OA3802"/>
                <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>
需要关注的是红色部分的内容。这里逐一说明.
<set property="type" value="sqlserver"/>: 指定中间表所在数据库的类型,如果是oracle的话就改为value="oracle"
<set property="host" value="192.168.0.204"/>:  指定中间表所在数据库服务器的ip
<set property="port" value="1433"/>: 指定中间表所在数据库的端口,如果是oracle的话应改为1521
<set property="dbname" value="OA3802"/>: 指定中间表所在数据库名
<set property="username" value="sa"/>: 指定中间表所在数据库帐号
<set property="password" value="123"/>:指定中间表所在数据库密码
以上的配置和think.properties中的参数差不多,应该不难理解。
<set property="sql" value="insert into OutBox(ReceiverMobileNo,Msg,SendTime,IsChinese,ExpressLevel,Sender) values(?,?,getDate(),1,1,1)"/>: 指定往中间表插入数据使用的sql语句。例子中的这条sql是根据一个客户的需求写的,客户提供的中间表结构是:
表名:OutBox
字段:ReceiverMobileNo,   ----------------接受人
    Msg,               ----------------短信内容
    SendTime,          -----------------发送时间
    IsChinese,          -----------------是否中文
    ExpressLevel,       -----------------紧急程度
    Sender             ----------------发送人

实际上厦门泛普OA短信接口只需要用到接受人和短信内容两个字段,这两个字段的值不是固定的,由短信接口负责把数据传过来,因此用?号表示他们的值。其他字段的值不用关心,可以随便写死一些数据,这个例子里全部写的是1,发送时间是用sql server自带的函数getDate()获取的。

不妨这样理解,最简单的中间表可以是这样子的:
表名:someTable
字段:MobileNo,
      messageBody
2.       修改OA/WEB-INF/prop/think_rtx.properties中的内容为:
IsInitRTXOrg=true
IsDownLineNotify=true
#CurSmsServer=rtx
CurSmsServerIsValid=true
RTXServerPort=8036
RTXServerIP=
RTXServerOutIP=
也就是说只要把CurSmsServer=rtx用#号注释掉就可以了。
下面是两个建中间表的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
 )
3.       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下对应的sms.xml文件内容为:
<module id="sms" version="1.0.0">
    <service-point id="smssender" interface="think.sms.SmsService">
        <invoke-factory>
            <construct class="think.sms.JdbcSmsService">
                <set property="type" value="oracle"/>
                <set property="host" value="192.168.0.204"/>
                <set property="port" value="1521"/>
                <set property="dbname" value="think1"/>
                <set property="username" value="OA40002"/>
                <set property="password" value="OA"/>
                <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>
 


客户开发人员可以自己实现接口:
public class TestService implements SmsService{
   public boolean sendSMS(String smsId,String number,String msg){
   System.out.println("接受人:"+number);
   System.out.println("测试短信:"+msg);
   。。。
   return true;
   }
}
那么OA系统在发送短信时将会调用TestService中的sendSMS方法。
把这个实现部署到OA中,只需修改sms.xml就可以了,:
<module id="sms" version="1.0.0">
    <service-point id="smssender" interface="think.sms.SmsService">
        <invoke-factory>
            <construct class="TestService">
            </construct>
        </invoke-factory>
    </service-point>  
</module>

红色部分表示OA在发送短信是将调用TestService实现。

发布:2006-04-30 16:18    编辑:泛普软件 · admin    [打印此页]    [关闭]
厦门OA系统
联系方式

成都公司:成都市成华区建设南路160号1层9号

重庆公司:重庆市江北区红旗河沟华创商务大厦18楼

咨询:400-8352-114

加微信,免费获取试用系统

QQ在线咨询

泛普厦门OA软件其他应用

厦门OA软件 厦门OA新闻动态 厦门OA信息化 厦门OA快博 厦门OA行业资讯 厦门软件开发公司 厦门门禁系统 厦门物业管理软件 厦门仓库管理软件 厦门餐饮管理软件 厦门网站建设公司