关闭

rxt客户端集成oa系统

标签: Tag
472人阅读 评论(0) 收藏 举报
分类:

其实OA中集成rtx主要就有三方面的内容,包括组织架构的同步、单点登录、以及由OA向rtx发送消息,rtx有一个java开发的sdk包,可以在官网直接下载,里面集成了对于rtx操作的各种接口,可以直接调用

1.组织架构的同步

同步过程有几点必须注意:

(1)在往rtx添加根部门时,根部门的id必须设置为"0";

(2)rtx在添加部门信息时部门的id不能用英文、一有英文的话就会导致错乱,如果自己的数据里的部门id有英文的话,在添加部门时就得过滤掉英文。

同步的思路就是:将oa中的部门按照从根部门开始一直往下循环并同时添加到rtx中,判断是否有子部门,如果有,同时添加,并递归查看是否有子部门,直到最后一级。

[java] view plaincopy
  1. /** 
  2.      *  
  3.      * 同步所有部门 
  4.      * 
  5.      */  
  6.     public void addAllDeps() {  
  7.         //获取所有根部门  
  8.         List<Department> topDepartments = departmentDao.getTopLevel();  
  9.         for (Department department : topDepartments) {  
  10.             //添加根部门  
  11.             System.out.println("根部门id:" + department.getId());  
  12.             System.out.println("根部门信息:" + department.getRemark());  
  13.             System.out.println("根部门名字:" + department.getName());  
  14.             String departmentId = department.getId().substring(1);  
  15.             addDept(departmentId, department.getRemark(), department.getName(), "0");  
  16.   
  17.             if (department.getChildren().size() != 0) {  
  18.                 getChildDeps(department);  
  19.             }  
  20.         }  
  21.     }  
[java] view plaincopy
  1. /** 
  2.      *  
  3.      * 根据父部门uuid来查找并添加所有子部门(递归) 
  4.      * 
  5.      */  
  6.     public void getChildDeps(Department department) {  
  7.         List<Department> childDepsList = department.getChildren();  
  8.         if (childDepsList.size() > 0) {  
  9.             for (Department childDep : childDepsList) {  
  10.                 String parentDepartmentId = department.getId().substring(1);  
  11.                 String childDepartmentId = childDep.getId().substring(1);  
  12.                 System.out.println(childDepartmentId + ";" + childDep.getRemark() + ";" + childDep.getName() + ";"  
  13.                         + parentDepartmentId);  
  14.                 addDept(childDepartmentId, childDep.getRemark(), childDep.getName(), parentDepartmentId);  
  15.   
  16.                 if (childDep.getChildren().size() != 0) {  
  17.                     getChildDeps(childDep);  
  18.                 }  
  19.   
  20.             }  
  21.         } else {  
  22.             System.out.println("部门" + department.getUuid() + "没有子部门");  
  23.         }  
  24.     }  
同步用户也是一样的道理

2.单点登录

思路:点击一个超链接的时候,会跳转到一个html页面,在这个页面进行单点登录的操作,由于我们不希望点击后还会出现一个新的页面,所以此时最好是使用一个隐藏的iframe,这样用户就看不见页面跳转的过程了。

操作单点登录的html页面:

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ page import="rtx.RTXSvrApi"%>   
  4. <%   
  5.   
  6.     RTXSvrApi rtxApi = new RTXSvrApi();   
  7.     String account = (String)request.getAttribute("loginName");//当前用户登录名  
  8.     String ip = rtxApi.getServerIP(); //服务器ip  
  9.     String keyrtxApi.getSessionKey(account); //获取sessionKey  
  10.     String rtxClientDownloadAddress = (String)request.getAttribute("rtxClientDownloadAddress");//rtx客户端下载地址  
  11.     System.out.println(account);  
  12.     System.out.println(ip);  
  13.     System.out.println(key);  
  14. %>   
  15.  <html>  
  16. <head>  
  17. </head>  
  18. <body text="#000000">  
  19. <html><head><script language="vbscript" id="clientEventHandlersVBS">  
  20. <!--  
  21. '单点登录  
  22. Sub Window_OnLoad()  
  23.     on error resume next  
  24.     Set objProp = RTXAX.GetObject("Property")     
  25.     objProp.Value("RTXUsername") = "<%=account%>"  
  26.     objProp.Value("LoginSessionKey") = "<%=key%>"  
  27.     objProp.Value("ServerAddress") = "<%=ip%>"  
  28.     objProp.Value("ServerPort") = 8000  
  29.   
  30.     lsRTXDownload"<%=rtxClientDownloadAddress%>"     
  31.   
  32.     RTXAX.Call 2, objProp  
  33.     If Err.Number <> 0 Then  
  34.        if Err.Number=438 then   
  35.          MsgBox "请下载安装RTX客户端软件"  
  36.          if lsRTXDownload<>"" Then Window.Open lsRTXDownload  
  37.        Else  
  38.            MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description  
  39.        End if  
  40.         Err.Clear   ' Clear the error.  
  41.     End If  
  42. End Sub  
  43. -->  
  44. </script></head><body>  
  45. <OBJECT classid="clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D" id=RTXAX style="display:none"></OBJECT>  
  46. </body></html>  
  47. </body>  
  48. </html>  
  49.    
jsp页面:

[html] view plaincopy
  1. <a  href="${ctx }/basicdata/rtx/singlesignon" target="rtx">即时通讯</a>  
  2. <iframe src="about:blank" name="rtx"  width=0 height=0 frameborder=0 ></iframe>   
使用以上的这个html页面就能够实现单点登录的功能,但是前提是:当前用户id,服务器ip以及sessionKey都能够获取的到,这就得在后台进行处理,然后跳转到这个页面的时候一起传过来在这边进行使用
3.往rtx发送消息

思路:消息的 发送功能实现之后,在发送时多添加一句代码:即rtx的调用发送消息的接口,按照参数进行设置即可

注意:

1、发送消息给rtx的时候调用rtx的接口的五个参数都不能为null,可以为空,只要有一个为null的话就会导致jvm发生错误。所以要加判断,如果得到的结果为null的话,就要转为空。

2、在服务端一定要记得安装RTX SDK服务,不然无法调用RTXSvrApi

3、对于RTX2012来说,setServerIP()指的是设置RTX服务器IP地址,而setServerPort()指的是设置RTX服务器SDK服务器端口(默认为6000),不是设置RTX服务器端口(默认为8000),如果将此方法误认为是设置RTX服务器端口的话,则在调用RTXSvrApi时会自动将System32文件夹或者是jdk的bin文件夹下的RtxServerApi.ini的端口设置改为8000,这样就会报错:错误代码:-992错误信息:无法连接到 RTX SDK SERVER,请确认 RTXSERVERAPI.INI 中的IP地址/端口是否配置正确。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:490次
    • 积分:6
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行