Rtx与OA集成问题

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

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


      使用该功能必须先把image和js两个文件夹拷进拷贝到您的Web应用工作目录下,如果您使用的是RTX3.61版本,可以在RTXServer安装目录/Apache/htdocs 拷贝这两个文件夹;如果您使用的是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里面有
%>
<html>
<body οnlοad="RtxSycn();">
    <OBJECT classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D id=RTXAX></OBJECT>
</body>
</html>
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未能成功登陆,请重试或与管理员联系!");
       }
}
</script>

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

<html>
<head>
<TITLE>腾讯通RTX Client SDK功能演示</TITLE>
language="vbscript" id="clientEventHandlersVBS">
<!--
'从服务端获取SessionKey
Function GetSessionKey()   
      on error resume next
     Set ObjApi = createobject("Rtxserver.rtxapi")
     Set objSMS = objAPI.GetObject("SYSTOOLS")
     Set objProp = objAPI.GetObject("Property")

     objProp.Value("USERNAME") = "herolin"

     on error resume next
     GetSessionKey = objSMS.Call2(&H2000, objProp)

      If Err.Description <> "" Then
          MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
          Err.Clear ' Clear the error.
      End If
   
End Function

'单点登录
Sub RTX_btnSessionKeyLogin_onclick  
      on error resume next
      Set objProp = RTXAX.GetObject("Property")  
    
      objProp.Value("RTXUsername") = "herolin"
      objProp.Value("LoginSessionKey") = GetSessionKey()
      objProp.Value("ServerAddress") = "127.0.0.1"
      objProp.Value("ServerPort") = 8300   
   
      RTXAX.Call 2, objProp

      If Err.Number <> 0 Then
          MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
          Err.Clear ' Clear the error.
      End If
end sub
-->
</script>
</head>
<body >
    <INPUT id="RTX_btnSessionKeyLogin"    type="button" value="vbscript登录" style="WIDTH: 100px; HEIGHT: 21px" size="18" name="RTX_btnSessionKeyLogin" >
<OBJECT id=RTXAX
data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA==
classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT>
</OBJECT>
</BODY>
</HTML>

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

//VBScript获取当前用户帐号<html>

<html>
<head>
<TITLE>GetUserName</TITLE>
language="vbscript" id="clientEventHandlersVBS">
<!--
Sub RTX_btnSessionKeyLogin_onclick 

Set objKernal = RTXAX.GetObject("KernalRoot") 
Account = objKernal.Account
If Account = "" Then
     MsgBox "您未登录RTX"
Else
     MsgBox "当前登录的用户名: " & Account
End If

end sub
-->
</script>
</head>
<body >
    <INPUT id="RTX_btnSessionKeyLogin"    type="button" value="获取用户名" style="WIDTH: 100px; HEIGHT: 21px" size="18" name="RTX_btnSessionKeyLogin" >
<OBJECT id=RTXAX
data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA==
classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT>
</OBJECT>
</BODY>
</HTML>

//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)
        {

    }
    }
      }
}
该文章转载自新席地网博客:http://www.newxd.com/article.asp?id=1268 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值