阅读更多
RTX Server SDK Java语言开发指导
一、功能说明
RTX2010 Java SDK 可以实现以下五大功能:
1. 部门用户管理(数据同步),可以对RTX服务器的部门及用户进行操作,通过该操作可以实现从其他系统同步用户数据到RTX服务器。
2. 单点登录,登录OA或ERP时RTX客户端自动登录,不需要输入密码。
3. 待办事宜提醒,办公提醒,邮件到达提醒、公文到达提醒等。
4. 手机短信,向手机发送、接收短信,群发短信。
5. 状态推送,在网页上显示用户状态头像,并可以对在线用户发起会话。
二、配置环境
1、服务器端环境配置
安装rtxserver2010formal.exe到服务器端,在用户管理》组织架构》xx单位中添加两个用户。
2、客户端环境配置
1. 在开发机器(测试)安装RTX2010 Server SDK包。
2. 进入Server SDK安装目录(默认路径:x:\Program Files\Tencent\RTXSSDK\),把该目录下的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及其他示例文件到您的工作目录下。
三、文件说明
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.ini 文件用于设置服务器的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拖到src,自动生成一个(defalt package)并放在这个目录下,SvrIP填写正确的RTX服务器IP地址后按Ctrl+F11运行,如下图所示:
4. 把AddDept.Java拖到src,自动生成一个(defalt package)并放在这个目录下,按Ctrl+F11运行,如下图所示:
5. 进入RTX 用户管理器,就可以看到刚刚添加的部门,如下图所示:
五、接口说明
1.系统函数
语法:boolean Init()
功能:初始化类
参数:无
调用:Init()
说明:初始化RTXSvrApi,成功返回true,失败返回false
语法:void UnInit()
功能:析构类
参数:无
调用:Init()
说明:析构RTXSvrApi
语法:int GetNewObject(String szObjectName)
功能:获取一个业务对象句柄
参数:szObjectName 业务对象名称
调用:GetNewObject(OBJNAME_RTXSYS)
说明:调用成功返回一个业务对象句柄
语法:int GetNewPropertys()
功能:获取属性集合句柄
参数:无
调用:GetNewPropertys()
说明:调用成功返回一个属性合集的柄
语法:int ReleaseHandle(int iHandle)
功能:释放句柄
参数:iHandle 句柄
调用:ReleaseHandle(iHandle) //iHandle是一个句柄
说明:调用成功释放句柄
语法:int AddProperty(int iPropertyHandle, String szName, String szValue)
功能:向属性集合添加属性
参数:iPropertyHandle属性集合句柄,szName属性名,szValue属性值
调用:AddProperty(iProp, KEY_USERNAME, UserName)
说明:调用成功向属性集合添加一个属性
语法:int GetPropertysCount(int iHandle)
功能:获取属性集合中属性总数
参数:iHandle属性集合句柄
调用:GetPropertysCount(iHandle) //iHandle为属性句柄
说明:调用成功返回属性集合中的属性总数
语法:int GetPropertysItem(int iHandle, int iIndex)
功能:通过索引获取属性集合中对应的属性
参数:iHandle属性集合句柄,iIndex索引值
调用:GetPropertysItem(iHandle, i) //iHandle为属性句柄,i为索引
说明:调用成功返回属性句柄
语法:int Call(int iObjectHandle, int iPropertyHandle, int iCmdID)
功能:调用SDK
参数:iObjectHandle业务对象句柄,iPropertyHandle属性集合句柄,iCmdID命令号
调用:Call(iObjectHandle, iPropertyHandle, iCmdID)
说明:调用成功返回一个结果句柄
语法:int GetResultPropertys(int iResultHandle)
功能:从结果句柄得到一个属性集合句柄
参数:iResultHandle结果句柄
调用:GetResultPropertys(int iResultHandle)
说明:调用成功返回属性集合句柄
语法:String GetPropertyItemName(int iHandle)
功能:获取一个属性的名称
参数:iHandle属性句柄
调用:GetPropertyItemName(iHandle)
说明:调用成功返回属性句柄对应的属性名
语法:String GetPropertyItemValue(int iHandle)
功能:获取一个属性的值
参数:iHandle属性句柄
调用:GetPropertyItemName(iHandle)
说明:调用成功返回属性句柄对应的属性值
语法:int GetResultInnerCode(int iHandle)
功能:获取内部错误代码
参数:iHandle返回结果句柄
调用:GetResultInnerCode(int iHandle)
说明:获取返回结果错误代码,返回0表示调用成功,返回其他表示出错
语法:String GetResultErrString(int iHandle)
功能:获取内部错误信息
参数: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)
功能:设置服务器端口
参数:iPort为RTX服务器SDK服务器端口,默认为6000
调用:setServerPort(6000)
说明:调用成功将设置System32下rtxServerApi.ini的Port为指定的端口
语法:String getServerIP()
功能:获取服务器地址
参数:无
调用:getServerIP()
说明:调用成功将返回System32下rtxServerApi.ini的IP地址
语法:void getServerPort())
功能:设置服务器端口
参数:无
调用:getServerIP()
说明:调用成功将设置System32下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 DeptName,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,失败返回其他。
语法:int deptIsExist(String deptId)
功能:查看部门是否存在
参数:deptId 部门ID
调用:deleteDept (“1”)
说明:成功返回0,失败返回其他。
语法:String[] getDeptUsers(String DeptID)
功能:获取部门下用户
参数:deptId 部门ID
调用:getDeptUsers (“1”)
说明:成功返回String[]的用户数组,失败返回null。
语法:String[]getChildDepts(String DeptID)
功能:获取子部门列表
参数: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 表示成功,其他表示失败
语法:int deleteUser(String UserName)
功能:删除用户
参数:UserName用户帐号
调用:deleteUser (“herolin”)
说明:返回0 表示成功,其他表示失败
语法:int userIsExist (String UserName)
功能:查看用户是否存在
参数:UserName用户帐号
调用:userIsExist (“herolin”)
说明:成功返回0,失败返回其他。
语法:String[][] GetUserSimpleInfo(String UserName)
功能:查看用户简单资料
参数: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密码
调用:SetUserSimpleInfo(“herolin”, “林坚华”, “
[email protected]”,”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用户帐号、DeptID 部门ID、ChsName用户姓名、email邮箱地址、gender性别、mobile手机、pwd密码
调用:SetUserSimpleInfo(“herolin”, "2",“林坚华”, “
[email protected]”,”0”,”135101435x”, “0755-83765566-4”, “123”)
说明:成功返回0,失败返回其他。
语法:String[][]GetUserDetailInfo (String UserName)
功能:查看用户详细资料
参数:UserName用户帐号
调用:GetUserDetailInfo (“herolin” )
说明:调用成功返回一个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 STREET, 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”,”深圳”, “深大”, “9”, “中国”, “0755-83765566-9”, “www.qq.com”, “没有个人说明”, “员工”, “510650”, “广东省”, “xx街”, “0755-83765566-4”, “1351014353x”)
说明:成功返回0,失败返回其他。
//SessionKey操作
语法:String getSessionKey(String UserName)
功能:获取SessionKey
参数:UserName用户帐号
调用:getSessionKey (“herolin”)
说明:成功返回String类型的SessionKey,失败返回null。
//消息提醒
语法: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 receiver, String smsInfo,int autoCut, int noTitle)
功能:发送手机短信
参数:sender发送者、receiver接收者、smsInfo短信内容、autoCut是否自动拆分、noTitle是否有标题
调用:sendSms(“herolin”, “13510143531”, “SDK短信测试”, “1”, “0”)
说明:成功返回0,失败返回其他。
//导入导出用户数据
语法:int exportXmldata ()
功能:导出RTX用户数据为xml
参数:无
调用:exportXmldata ()
说明:成功返回String类弄的xml字符串,失败返回null。
语法:int importXmldata(String xmldata)
功能:导入xml用户数据到RTX服务器
参数:xmldata xml格式用户数据
调用:importXmldata(xmldata) //xmldata 为xml格式的RTX用户数据
说明:成功返回String类弄的xml字符串,失败返回null。
//查看用户在线状态
语法:int QueryUserState(String UserName)
功能:查看用户状态
参数:UserName用户帐号
调用:QueryUserState(“herolin”)
说明:返回0 离线、1在线、2离开、-984用户不存在,其他表示调用失败
//根据部门ID查部门名称
语法:String GetDeptName(String deptID)
功能:查部门名称
参数:deptID用户帐号
调用:GetDeptName(“2”)
说明:成功返回String类型的部门名称,失败返回null。
六、RTX2010与RTX3.61 Java语言支持的差异
1. RTX2010支持一个用户所属多个部门, 因此有可能出现用户所属部门ID为两个以上,所以通过SDK查看用户简单资料时,返回DeptID带有 “;”,主要用于区分多个部门ID。
2. RTX 2010 Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件。
3. 在RTX3.61一般通过UIN(RTX号码)操作用户,RTX2010不支持UIN操作用户。
建议替代方案:通过用户名(RTX帐号)进行操作。
4. RTX3.61可以通过GetResultCode(int iHandle) 获取SDK调用返回结果,RTX2010已经不支持该命令。
建议替代方案:请用GetResultInnerCode(int iHandle)替代
5. RTX3.61可以通过GetResultString(int iResultHandle) 获取返回结果的描述,RTX2010已经不支持该命令。
建议替代方案:请用GetResultErrString(int iHandle)替代
6. RTX2010 Server SDK 不支持发送IM消息。
建议替代方案:通过发送消息提醒来代替IM消息。
7. RTX2010 Server SDK 不支持用户名与uin转换。
建议替代方案:通过查看用户简单资料实现。
8. RTX2010 Server SDK 不支持导入txt格式的用户数据。
建议替代方案:通过导入xml接口实现。
9. 2010已经去掉查看部门资料接口。
建议替代方案:查看部门资料这个接口实际上没有什么用,主要用于判断部门是否存在。在2010如果判断部门是否存在,先添加一个部门,如果提示存在,则该部门已存在;如果添加成功,表示这个部门不存在,然后把刚添加的部门删除。
七、BUG解决
1. RTX2010之前版本,如果RTX帐号为纯数字,接口内部默认为RTX号码进行操作,经常与开发人员预想不一样,下图是RTX服务器数据,调用userIsExsit传入14将提示用户不存在,必须传1008进行查询。
RTX2010解决了该问题,修改RTXSvrApi.java的userIsExist方法,增加下面一行代码,告诉接口传进去的是帐号,而不是RTX号码。