1、RTX腾讯通技术服务中心 RTX插件网 t1g RTX Server SDK Java语言开发指导 目 录 RTX SERVER SDK JAVA语言开发指导 1 一、功能说明 2 二、配置环境 2 三、文件说明 3 四、开发向导(以ECLIPSE为例) 3 五、接口说明 5 1.系统函数 5 2.扩展函数 7 六、RTX2011与RTX3.61 JAVA语言支持的差异 12 七、BUG解决 13 一、功能说明 RTX2011 Java SDK 可以实现以下六大功能: 1. 部门用户管理(数据同步),可以对RTX服务器的部门及用户进行操
2、作,通过该操作可以实现从其他系统同步用户数据到RTX服务器。 2. 单点登录,登录OA或ERP时RTX客户端自动登录,不需要输入密码。 3. 反向登录,登录RTX后打开OA或ERP不需要再次登录。 4. 待办事宜提醒,办公提醒,邮件到达提醒、公文到达提醒等。 5. 手机短信,向手机发送、接收短信,群发短信。 6. 状态推送,在网页上显示用户状态头像,并可以对在线用户发起会话。 二、配置环境 1. 在开发机器安装RTX2011 Server SDK包。 2. 进入Server SDK安装目录(默认路径:x:\Program Files\Tencent\RTXSSDK\),把该
3、目录下的dll文件及rtxServerApi.ini拷贝到系统的System32目录下(RTX2008Beta2之后的RTX版本安装时已经自动拷贝到该目录下),如果在网页调用java接口,需要另拷贝一份到JDK的bin目录下。 3. 进入RTX服务器安装目录下,用记事本打开SDKPorperty.xml文件,在里面增加开发机器地址(如下图所示),保存后重启RTX服务。 4. 拷贝Java目录(默认路径:x:\Program Files\Tencent\RTXSSDK\Demo Source\Server Sample\Java)下的RTXSvrApi.java及其他示例文件到您的工作
4、目录下。 三、文件说明 1. RTXSvrApi.java是一个类库,里面封装了很多方法,但没有main函数,因此该文件只能编译不能运行,主要是提供方法给外部调用。 2. RTXSvrApi.java 文件里面导入 SDKAPIJava.dll,该dll是在SDKAPIC.dll上面封装,SDK目录下的dll相互有联系,因此必须把这些dll拷贝到System32下,否则编译RTXSvrApi.java将出错,提示找不到SDKAPIC。 3. Java目录下的文件除了RTXSvrApi.java,其他的都是示例文件(请参看示例文件使用各种函数)。 4. RtxServerApi.in
5、i 文件用于设置服务器的IP地址及端口。 5. SDKPorperty.xml 文件用于SDK访问RTX服务器权限管理,只有这个文件添加的IP才能访问RTX服务器。 四、开发向导(以Eclipse为例) 1. 启动Eclipse ,创建一个空白的Java Project,如下图所示: 2. 在工程src添加一个名为rtx的package,并将RTXSvrApi.java拖进这个package,如下图所示: 注意:RTXSvrApi.java只能放进rtx下,rtx 不能有父package,否则会报错。 3. 把SetSvrIpPort.java拖到
6、src,自动生成一个(defalt package)并放在这个目录下,SvrIP填写正确的RTX服务器IP地址后按Ctrl+F11运行,如下图所示: 4. 把AddDept.Java拖到src,自动生成一个(defalt package)并放在这个目录下,按Ctrl+F11运行,如下图所示: 5. 进入RTX 用户管理器,就可以看到刚刚添加的部门,如下图所示: 五、接口说明 1.系统函数 语法:boolean Init() 功能:初始化类 参数:无 调用:Init() 说明:初始化RTXSvrApi,成功返回true,失败返
7、回false 语法:void UnInit() 功能:析构类 参数:无 调用:Init() 说明:析构RTXSvrApi 语法:int GetNewObject(String szObjectName) 功能:获取一个业务对象句柄 参数:szObjectName 业务对象名称 调用:GetNewObject(OBJNAME_RTXSYS) 说明:调用成功返回一个业务对象句柄 语法:int GetNewPropertys() 功能:获取属性集合句柄 参数:无 调用:GetNewPropertys() 说明:调用成功返回一
8、个属性合集的柄 语法:int ReleaseHandle(int iHandle) 功能:释放句柄 参数:iHandle 句柄 调用:ReleaseHandle(iHandle) //iHandle是一个句柄 说明:调用成功释放句柄 语法:int AddProperty(int iPropertyHandle, String szName, String szValue) 功能:向属性集合添加属性 参数:iPropertyHandle属性集合句柄,szName属性名,szValue属性值 调用:AddProperty(iProp, KEY_USER
9、NAME, UserName) 说明:调用成功向属性集合添加一个属性 语法:int GetPropertysCount(int iHandle) 功能:获取属性集合中属性总数 参数:iHandle属性集合句柄 调用:GetPropertysCount(iHandle) //iHandle为属性句柄 说明:调用成功返回属性集合中的属性总数 语法:int GetPropertysItem(int iHandle, int iIndex) 功能:通过索引获取属性集合中对应的属性 参数:iHandle属性集合句柄,iIndex索引值 调用:GetProp
10、ertysItem(iHandle, i) //iHandle为属性句柄,i为索引 说明:调用成功返回属性句柄 语法:int Call(int iObjectHandle, int iPropertyHandle, int iCmdID) 功能:调用SDK 参数:iObjectHandle业务对象句柄,iPropertyHandle属性集合句柄,iCmdID命令号 调用:Call(iObjectHandle, iPropertyHandle, iCmdID) 说明:调用成功返回一个结果句柄 语法:int GetResultPropertys(int iRe
11、sultHandle) 功能:从结果句柄得到一个属性集合句柄 参数:iResultHandle结果句柄 调用:GetResultPropertys(int iResultHandle) 说明:调用成功返回属性集合句柄 语法:String GetPropertyItemName(int iHandle) 功能:获取一个属性的名称 参数:iHandle属性句柄 调用:GetPropertyItemName(iHandle) 说明:调用成功返回属性句柄对应的属性名 语法:String GetPropertyItemValue(int iHa
12、ndle) 功能:获取一个属性的值 参数:iHandle属性句柄 调用:GetPropertyItemName(iHandle) 说明:调用成功返回属性句柄对应的属性值 语法:int GetResultInnerCode(int iHandle) 功能:获取内部错误代码 参数:iHandle返回结果句柄 调用:GetResultInnerCode(int iHandle) 说明:获取返回结果错误代码,返回0表示调用成功,返回其他表示出错 语法:String GetResultErrString(int iHandle) 功能:获取内部错误
13、信息 参数:iHandle返回结果句柄 调用:GetResultInnerCode(iHandle) 说明:返回错误描述 2.扩展函数 // 配置文件操作 语法:void setServerIP(String strIP) 功能:设置服务器IP 参数:strIP 为RTX服务器IP地址 调用:setServerIP(“127.0.0.1”) 说明:调用成功将设置System32下rtxServerApi.ini的host为指定的IP 地址 语法:void setServerPort(int iPort) 功能:设置服务器端口 参数:iP
14、ort为RTX服务器SDK服务器端口,默认为6000 调用:setServerPort(6000) 说明:调用成功将设置System32下rtxServerApi.ini的Port为指定的端口 语法:String getServerIP() 功能:获取服务器地址 参数:无 调用:getServerIP() 说明:调用成功将返回System32下rtxServerApi.ini的IP地址 语法:void getServerPort()) 功能:设置服务器端口 参数:无 调用:getServerIP() 说明:调用成功将设置System32下
15、rtxServerApi.ini的端口 // 部门数据操作 语法:int addDept(String deptId,String DetpInfo,String DeptName,String ParentDeptId ) 功能:添加部门 参数:deptId 部门ID、DetpInfo部门信息、DeptName部门名称、ParentDeptId父部门ID 调用:addDept (“1”,”测试部门信息”,”测试部门”,”0”) 说明:成功返回0,失败返回其他。 语法:setDept(String deptId,String DetpInfo,String D
16、eptName,String ParentDeptId ) 功能:修改部门 参数:deptId 部门ID、DetpInfo部门信息、DeptName部门名称、ParentDeptId父部门ID 调用:setDept (“1”,”测试部门信息”,”财务部”,”0”) 说明:成功返回0,失败返回其他。 语法:deleteDept(String deptId,String type) 功能:删除部门 参数:deptId 部门ID、type删除类型(0为不删除部门下用户,1为删除部门下用户) 调用:deleteDept (“1”,”1”) 说明:成功返回0,失败
17、返回其他。 语法:int deptIsExist(String deptId) 功能:查看部门是否存在 参数:deptId 部门ID 调用:deleteDept (“1”) 说明:成功返回0,失败返回其他。 语法:String[] getDeptUsers(String DeptID) 功能:获取部门下用户 参数:deptId 部门ID 调用:getDeptUsers (“1”) 说明:成功返回String[]的用户数组,失败返回null。 语法:String[]getChildDepts(String DeptID) 功能:获取
18、子部门列表 参数:deptId 部门ID 调用:getChildDepts (“0”) 说明:成功返回String[]的子部门ID数组,失败返回null。 //用户数据操作 语法:int addUser(String UserName, String DeptID, String ChsName, String Pwd ) 功能:添加用户 参数:UserName用户帐号、DeptID部门ID、ChsName用户姓名、ChsName密码 调用:addUser(“herolin”, “1”, “林坚华”, “123” ) 说明:返回0 表示成功,其他表示失败
19、 语法:int deleteUser(String UserName) 功能:删除用户 参数:UserName用户帐号 调用:deleteUser (“herolin”) 说明:返回0 表示成功,其他表示失败 语法:int userIsExist (String UserName) 功能:查看用户是否存在 参数:UserName用户帐号 调用:userIsExist (“herolin”) 说明:成功返回0,失败返回其他。 语法:String[][] GetUserSimpleInfo(String UserName) 功能:查看用户
20、简单资料 参数:UserName用户帐号 调用:GetUserSimpleInfo (“herolin” ) 说明:调用成功返回一个String类型的二维数组,失败返回null 语法:int SetUserSimpleInfo(String UserName,String ChsName,String email,String gender,String mobile,String phone,String pwd) 功能:设置用户简单资料 参数:UserName用户帐号、ChsName用户姓名、email邮箱地址、gender性别、mobile手机、pwd密码
21、 调用:SetUserSimpleInfo(“herolin”, “林坚华”, “sdksupport@”,”0”,”135101435x”, “0755-83765566-4”, “123”) 说明:成功返回0,失败返回其他。 语法:int SetUserSimpleInfoEx(String UserName, String DeptID, String ChsName,String email,String gender,String mobile,String phone,String pwd) 功能:设置用户简单资料 参数:UserName用户帐号、DeptI
22、D 部门ID、ChsName用户姓名、email邮箱地址、gender性别、mobile手机、pwd密码 调用:SetUserSimpleInfo(“herolin”, "2",“林坚华”, “sdksupport@”,”0”,”135101435x”, “0755-83765566-4”, “123”) 说明:成功返回0,失败返回其他。 语法:String[][]GetUserDetailInfo (String UserName) 功能:查看用户详细资料 参数:UserName用户帐号 调用:GetUserDetailInfo (“herolin” ) 说明
23、调用成功返回一个String类型的二维数组,失败返回null 语法:int setUserDetailInfo(String UserName,String ADDRESS,String AGE,String BIRTHDAY, String BLOODTYPE,String CITY,String COLLAGE,String CONSTELLATION,String COUNTRY,String FAX, String HOMEPAGE,String MEMO,String POSITION,String POSTCODE,String PROVINCE,String STREE
24、T, String PHONE,String MOBILE) 功能:设置用户详细资料 参数:UserName用户帐号、ADDRESS地址、AGE年龄、BIRTHDAY生日、BLOODTYPE血型、CITY城市、COLLAGE大学、CONSTELLATION星座、COUNTRY国家、FAX传真、HOMEPAGE个人主页、MEMO个人说明、POSITION职位、PROVINCE省份、STREET街道、PHONE电话、MOBILE手机 调用:setUserDetailInfo(“herolin”, “深圳市xx街道”, “23”, “19840201”, “1”,”深圳”, “深大”,
25、9”, “中国”, “0755-83765566-9”, “”, “没有个人说明”, “员工”, “510650”, “广东省”, “xx街”, “0755-83765566-4”, “1351014353x”) 说明:成功返回0,失败返回其他。 //SessionKey操作 语法:String getSessionKey(String UserName) 功能:获取SessionKey 参数:UserName用户帐号 调用:getSessionKey (“herolin”) 说明:成功返回String类型的SessionKey,失败返回null。 /
26、/消息提醒 语法:int sendNotify(String receivers,String title,String msg, String type,String delayTime) 功能:发送消息提醒 参数:receivers接收者、title标题、msg信息内容、type消息类型、delayTime显示时间 调用:sendNotify (“herolin”,”公司公文”,”xx同事升级xx部门总经理”,”0”,”0”) 说明:成功返回0,失败返回其他。 //发送短信 语法:int sendSms(String sender, String receiv
27、er, String smsInfo,int autoCut, int noTitle) 功能:发送手机短信 参数:sender发送者、receiver接收者、smsInfo短信内容、autoCut是否自动拆分、noTitle是否有标题 调用:sendSms(“herolin”, “13510143531”, “SDK短信测试”, “1”, “0”) 说明:成功返回0,失败返回其他。 //导入导出用户数据 语法:int exportXmldata () 功能:导出RTX用户数据为xml 参数:无 调用:exportXmldata () 说明:成功返
28、回String类弄的xml字符串,失败返回null。 语法:int importXmldata(String xmldata) 功能:导入xml用户数据到RTX服务器 参数:xmldata xml格式用户数据 调用:importXmldata(xmldata) //xmldata 为xml格式的RTX用户数据 说明:成功返回String类弄的xml字符串,失败返回null。 //查看用户在线状态 语法:int QueryUserState(String UserName) 功能:查看用户状态 参数:UserName用户帐号 调用:QueryUse
29、rState(“herolin”) 说明:返回0 离线、1在线、2离开、-984用户不存在,其他表示调用失败 //根据部门ID查部门名称 语法:String GetDeptName(String deptID) 功能:查部门名称 参数:deptID用户帐号 调用:GetDeptName(“2”) 说明:成功返回String类型的部门名称,失败返回null。 六、RTX2011与RTX3.61 Java语言支持的差异 1. RTX2011支持一个用户所属多个部门, 因此有可能出现用户所属部门ID为两个以上,所以通过SDK查看用户简单资料时,返回DeptID带
30、有 “;”,主要用于区分多个部门ID。 2. RTX 2011 Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件。 3. 在RTX3.61一般通过UIN(RTX号码)操作用户,RTX2011不支持UIN操作用户。 建议替代方案:通过用户名(RTX帐号)进行操作。 4. RTX3.61可以通过GetResultCode(int iHandle) 获取SDK调用返回结果,RTX2011已经不支持该命令。 建议替代方案:请用Get
31、ResultInnerCode(int iHandle)替代 5. RTX3.61可以通过GetResultString(int iResultHandle) 获取返回结果的描述,RTX2011已经不支持该命令。 建议替代方案:请用GetResultErrString(int iHandle)替代 6. RTX2011 Server SDK 不支持发送IM消息。 建议替代方案:通过发送消息提醒来代替IM消息。 7. RTX2011 Server SDK 不支持用户名与uin转换。 建议替代方案:通过查看用户简单资料实现。 8. RTX2011 Server SDK 不支持导入tx
32、t格式的用户数据。 建议替代方案:通过导入xml接口实现。 9. 2011已经去掉查看部门资料接口。 建议替代方案:查看部门资料这个接口实际上没有什么用,主要用于判断部门是否存在。在2011如果判断部门是否存在,先添加一个部门,如果提示存在,则该部门已存在;如果添加成功,表示这个部门不存在,然后把刚添加的部门删除。 七、BUG解决 1. RTX2010之前版本,如果RTX帐号为纯数字,接口内部默认为RTX号码进行操作,经常与开发人员预想不一样,下图是RTX服务器数据,调用userIsExsit传入14将提示用户不存在,必须传1008进行查询。 RTX2011解决了该问题,修改RTXSvrApi.java的userIsExist方法,增加下面一行代码,告诉接口传进去的是帐号,而不是RTX号码。






