OA集成腾讯RTX2012版

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

1.组织架构的同步

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

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

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

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

/**
	 * 
	 * 同步所有部门
	 *
	 */
	public void addAllDeps() {
		//获取所有根部门
		List<Department> topDepartments = departmentDao.getTopLevel();
		for (Department department : topDepartments) {
			//添加根部门
			System.out.println("根部门id:" + department.getId());
			System.out.println("根部门信息:" + department.getRemark());
			System.out.println("根部门名字:" + department.getName());
			String departmentId = department.getId().substring(1);
			addDept(departmentId, department.getRemark(), department.getName(), "0");

			if (department.getChildren().size() != 0) {
				getChildDeps(department);
			}
		}
	}
/**
	 * 
	 * 根据父部门uuid来查找并添加所有子部门(递归)
	 *
	 */
	public void getChildDeps(Department department) {
		List<Department> childDepsList = department.getChildren();
		if (childDepsList.size() > 0) {
			for (Department childDep : childDepsList) {
				String parentDepartmentId = department.getId().substring(1);
				String childDepartmentId = childDep.getId().substring(1);
				System.out.println(childDepartmentId + ";" + childDep.getRemark() + ";" + childDep.getName() + ";"
						+ parentDepartmentId);
				addDept(childDepartmentId, childDep.getRemark(), childDep.getName(), parentDepartmentId);

				if (childDep.getChildren().size() != 0) {
					getChildDeps(childDep);
				}

			}
		} else {
			System.out.println("部门" + department.getUuid() + "没有子部门");
		}
	}
同步用户也是一样的道理

2.单点登录

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

操作单点登录的html页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="rtx.RTXSvrApi"%> 
<% 

    RTXSvrApi rtxApi = new RTXSvrApi(); 
    String account = (String)request.getAttribute("loginName");//当前用户登录名
    String ip = rtxApi.getServerIP(); //服务器ip
    String key= rtxApi.getSessionKey(account); //获取sessionKey
    String rtxClientDownloadAddress = (String)request.getAttribute("rtxClientDownloadAddress");//rtx客户端下载地址
    System.out.println(account);
    System.out.println(ip);
    System.out.println(key);
%> 
 <html>
<head>
</head>
<body text="#000000">
<html><head><script language="vbscript" id="clientEventHandlersVBS">
<!--
'单点登录
Sub Window_OnLoad()
    on error resume next
    Set objProp = RTXAX.GetObject("Property")   
    objProp.Value("RTXUsername") = "<%=account%>"
    objProp.Value("LoginSessionKey") = "<%=key%>"
    objProp.Value("ServerAddress") = "<%=ip%>"
    objProp.Value("ServerPort") = 8000

    lsRTXDownload= "<%=rtxClientDownloadAddress%>"   

    RTXAX.Call 2, objProp
    If Err.Number <> 0 Then
	   if Err.Number=438 then 
	   	 MsgBox "请下载安装RTX客户端软件"
	   	 if lsRTXDownload<>"" Then Window.Open lsRTXDownload
	   Else
           MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
	   End if
        Err.Clear   ' Clear the error.
    End If
End Sub
-->
</script></head><body>
<OBJECT classid="clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D" id=RTXAX style="display:none"></OBJECT>
</body></html>
</body>
</html>
 
jsp页面:

<a  href="${ctx }/basicdata/rtx/singlesignon" target="rtx">即时通讯</a>
<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地址/端口是否配置正确。



你可能感兴趣的:(OA集成腾讯RTX2012版)