欢迎光临
我们一直在努力

Rtx与OA集成问题

本文主要介绍OA—RTX常见功能集成,其中包括RTXName控件、SessionKey登录、Web获取当前登录用户帐号、用户名密码登录、发送消息提醒等功能,以及开发这些功能常见问题。
RTXName控件:
标准的ActiveX控件,让二次开发人员可以快速高效的完成基于Web应用的RTX集成。使用RTXName.dll、rtxint.js、browinfo.js 就可以轻松实现Web Application 的RTX集成。
例: Rtx与OA集成问题
一行代码即可完成Web集成。RAP是Helper函数(是“RTX Add Presence”的缩写), 是一个用Jscript封装好的函数,您只需要在Web应用中引用我们提供的Js文件即可,代码和下面的类似:
language="JScript.Encode" src="js/browinfo.js">
language="JScript.Encode" src="js/rtxint.js">

——RTXName在Web页面上的示例:

使用该功能必须先把image和js两个文件夹拷进拷贝到您的Web应用工作目录下,如果您使用的是RTX3.61版本,可以在RTXServer安装目录Apachehtdocs 拷贝这两个文件夹;如果您使用的是RTX2006版本,请到RTXServer安装目录webroot 拷贝这两个文件夹。
经常有开发人员反馈把鼠标移至某个人的头像时,不会弹出下拉菜单,出现该问题一般有两种原因:1. 被发起人为自己,例如:share登录RTX,share把鼠标移至WEB的share上面,是不会弹出下拉菜单,因为自己不能对自己发起会话。2. 没有把browinfo.js、rtxint.js引用进来,请确认是否成功引入。3. 开发人员反馈RTX2006的RTXName.dll控件失败,使用RTX3.61该文件覆盖之后正常,我们测试没有发现该问题,如果排除以上两种情况,可以试试用3.61的dll覆盖。
WEB上RTX头像状态图标无法即时更新,这个浏览器自身原因,IE把当前的图片(离线)保存在内存里面,刷新网页就可以显示正常。IE显示状态由两部分组成 blank.gif文件和 Rap()函数,Rap是控件里面的一个函数,因此可以实时更新状态,但blank.gif是一个图片文件,IE无法实时更新(其实QQ也是这样)。所以当某个人在线时,可能页面上显示的图标是灰色,当鼠标移动图标上方时,显示出来的图标是彩色。该问题后续我们寻找更好的解决方法。
SessionKey登录:
很多单位希望在登录OA成功之后,RTX自动登录,这是可以实现的,先在OA服务器上安装Server SDK API包,下面是登录流程图:

看完这个图之后,您应该明白单点登录需要写两个程序:一个后台程序和一个前台程序。后台程序负责中转SessionKey作用,该程序放在OA服务器上(OA服务器需安装Server SDK API ),如下示例代码的GetSessionKey()函数。前台程序则是通过浏览器调用客户端SessionKey登录接口,登录RTX。我们示例程序为了演示方便,把后台程序和前台程序写在一起,您在实际开发中注意分开。否则将出现只能在安装SSDK API机器登录成功,其他机器登录失败。

// C# 示例代码,针对RTX2006

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RTXServerApi;
using RTXClient;
using RTXCAPILib;
using System.Runtime.InteropServices;

namespace SessionKeyLogin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
RTXClient.RTXAPIClass ObjApi = new RTXAPIClass();
RTXCAPILib.IRTXCRoot RTXCRoot =(RTXCAPILib .IRTXCRoot) ObjApi.GetObject("KernalRoot");

try
{
string Account = textBox1.Text;
string SessionKey = GetSessionKey(Account);

RTXCRoot.LoginSessionKey("127.0.0.1", 8300, Account, SessionKey);
}
catch (COMException ee)
{

}
}

private string GetSessionKey(string Account)
{
RTXServerApi.RTXObjectClass RTXObj = new RTXObjectClass();
RTXServerApi.RTXCollectionClass RTXParams = new RTXCollectionClass();

RTXObj.Name = "SYSTOOLS";
RTXObj.ServerIP = "127.0.0.1";
RTXObj.ServerPort = 6000;
RTXParams.Add("USERNAME", Account );

string SessionKey = (string)RTXObj.Call2(enumCommand_.PRO_SYS_GETSESSIONKEY, RTXParams);

return SessionKey;
}
}
}
//Java示例代码,针对RTX2006

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="rtx.RTXSvrApi"%>
<% RTXSvrApi rtxApi = new RTXSvrApi(); String account=UserSession.user_login;//我是通过一个session类来获得当前用户登陆名称的 String ip = rtxApi.getServerIP(); String key= rtxApi.GetSessionKey(account); //这个GetSessionKey的方法就在RTX SDK下面JAVA例子RTXSvrApi.java里面有 %>





language="javascript">
function RtxSycn(){
try{
var key="<%=key%>"; //上面取到的sessionkey
var account="<%=account%>"; //用户登陆名,当然在RTX里面也要有一个一样的用户名
var ip="<%=ip%>";

var RTXCRoot = RTXAX.GetObject("KernalRoot"); //客户端SDK

RTXCRoot.LoginSessionKey(ip,8000,account,key);

}catch(e){
alert("RTX未能成功登陆,请重试或与管理员联系!");
}
}

//VBScript示例代码,RTX2006与RTX3.61皆可用



腾讯通RTX Client SDK功能演示
language="vbscript" id="clientEventHandlersVBS">








获取当前用户帐号:
有些单位还想登录RTX时,OA自动登录。RTX3.61由于没有提供“获取当前用户帐号”接口,因此无法实现该功能。RTX2006提供了该接口,因此RTX2006可以实现。注意,RTX只提供获取当前登录RTX帐号接口,但没有提供获取登录帐号的密码功能。您获取到用户名之后,与OA进行身份验证的工作由您自己实现。(如果判断用户已经登录了RTX,可以不需身份验证就直接登录OA,这是最简单的方法)。下面是获取当前登录RTX用户帐号示例代码:

//VBScript获取当前用户帐号



GetUserName
language="vbscript" id="clientEventHandlersVBS">








//C#示例代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RTXClient;
using RTXCAPILib;
using System.Runtime.InteropServices;

namespace GetLoginAccount
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
RTXClient.RTXAPIClass ObjApi = new RTXAPIClass();
RTXCAPILib.IRTXCRoot RTXCRoot = (RTXCAPILib.IRTXCRoot)ObjApi.GetObject("KernalRoot");

try
{
string Account = (string)RTXCRoot.Account;
MessageBox.Show("当前登录的用户名:" + Account);
}
catch (COMException ee)
{

}
}
}
}

赞(0) 打赏
未经允许不得转载:刘旭的人个博客 » Rtx与OA集成问题
分享到: 更多 (0)
标签:

评论 抢沙发

评论前必须登录!

 

QQ :13945502电话:13913571631

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮