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机器登录成功,其他机器登录失败。

  1. //C# 示例代码,针对RTX2006 
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.ComponentModel; 
  5. using System.Data; 
  6. using System.Drawing; 
  7. using System.Text; 
  8. using System.Windows.Forms; 
  9. using RTXServerApi; 
  10. using RTXClient; 
  11. using RTXCAPILib; 
  12. using System.Runtime.InteropServices; 
  13. namespace SessionKeyLogin 
  14.       public partial class Form1 : Form 
  15.     { 
  16.           public Form1() 
  17.     { 
  18.              InitializeComponent(); 
  19.      } 
  20.         private void button1_Click(object sender, EventArgs e) 
  21.     { 
  22.              RTXClient.RTXAPIClass ObjApi = new RTXAPIClass(); 
  23.              RTXCAPILib.IRTXCRoot RTXCRoot =(RTXCAPILib .IRTXCRoot) ObjApi.GetObject("KernalRoot"); 
  24.         try 
  25.     { 
  26.              string Account = textBox1.Text; 
  27.              string SessionKey = GetSessionKey(Account); 
  28.              RTXCRoot.LoginSessionKey("127.0.0.1", 8300, Account, SessionKey); 
  29.     } 
  30.              catch (COMException ee) 
  31.         { 
  32.     } 
  33.      } 
  34.         private string GetSessionKey(string Account) 
  35.     { 
  36.              RTXServerApi.RTXObjectClass RTXObj = new RTXObjectClass(); 
  37.              RTXServerApi.RTXCollectionClass RTXParams = new RTXCollectionClass(); 
  38.              RTXObj.Name = "SYSTOOLS"
  39.              RTXObj.ServerIP = "127.0.0.1"
  40.              RTXObj.ServerPort = 6000; 
  41.              RTXParams.Add("USERNAME", Account ); 
  42.              string SessionKey = (string)RTXObj.Call2(enumCommand_.PRO_SYS_GETSESSIONKEY, RTXParams); 
  43.              return SessionKey; 
  44.     } 
  45.       } 
  46. //Java示例代码,针对RTX2006 
  47. <%@ page contentType="text/html; charset=GBK" %> 
  48. <%@ page import="rtx.RTXSvrApi"%> 
  49. <% 
  50.     RTXSvrApi rtxApi = new RTXSvrApi(); 
  51.     String account=UserSession.user_login;//我是通过一个session类来获得当前用户登陆名称的 
  52.     String ip = rtxApi.getServerIP(); 
  53.     String key= rtxApi.GetSessionKey(account); //这个GetSessionKey的方法就在RTX SDK下面JAVA例子RTXSvrApi.java里面有 
  54. %> 
  55. <html> 
  56. <body οnlοad="RtxSycn();"
  57.     <OBJECT classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D id=RTXAX></OBJECT> 
  58. </body> 
  59. </html> 
  60. language="javascript"
  61. function RtxSycn(){ 
  62.     try
  63.         var key="<%=key%>";            //上面取到的sessionkey 
  64.         var account="<%=account%>";    //用户登陆名,当然在RTX里面也要有一个一样的用户名 
  65.         var ip="<%=ip%>"
  66.        var RTXCRoot = RTXAX.GetObject("KernalRoot");    //客户端SDK 
  67.   
  68.         RTXCRoot.LoginSessionKey(ip,8000,account,key); 
  69.        }catch(e){ 
  70.         alert("RTX未能成功登陆,请重试或与管理员联系!"); 
  71.        } 
  72. </script> 
  73. //VBScript示例代码,RTX2006与RTX3.61皆可用 
  74. <html> 
  75. <head> 
  76. <TITLE>腾讯通RTX Client SDK功能演示</TITLE> 
  77. language="vbscript" id="clientEventHandlersVBS"
  78. <!-- 
  79. '从服务端获取SessionKey 
  80. Function GetSessionKey()    
  81.       on error resume next 
  82.      Set ObjApi = createobject("Rtxserver.rtxapi"
  83.      Set objSMS = objAPI.GetObject("SYSTOOLS"
  84.      Set objProp = objAPI.GetObject("Property"
  85.      objProp.Value("USERNAME") = "herolin" 
  86.      on error resume next 
  87.      GetSessionKey = objSMS.Call2(&H2000, objProp) 
  88.       If Err.Description <> "" Then 
  89.           MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description 
  90.           Err.Clear ' Clear the error. 
  91.       End If 
  92.     
  93. End Function 
  94. '单点登录 
  95. Sub RTX_btnSessionKeyLogin_onclick   
  96.       on error resume next 
  97.       Set objProp = RTXAX.GetObject("Property")   
  98.      
  99.       objProp.Value("RTXUsername") = "herolin" 
  100.       objProp.Value("LoginSessionKey") = GetSessionKey() 
  101.       objProp.Value("ServerAddress") = "127.0.0.1" 
  102.       objProp.Value("ServerPort") = 8300    
  103.     
  104.       RTXAX.Call 2, objProp 
  105.       If Err.Number <> 0 Then 
  106.           MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description 
  107.           Err.Clear ' Clear the error. 
  108.       End If 
  109. end sub 
  110. --> 
  111. </script> 
  112. </head> 
  113. <body > 
  114.     <INPUT id="RTX_btnSessionKeyLogin"    type="button" value="vbscript登录" style="WIDTH: 100px; HEIGHT: 21px" size="18" name="RTX_btnSessionKeyLogin" > 
  115. <OBJECT id=RTXAX 
  116. data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA== 
  117. classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT> 
  118. </OBJECT> 
  119. </BODY> 
  120. </HTML> 
  121. 获取当前用户帐号: 
  122.        有些单位还想登录RTX时,OA自动登录。RTX3.61由于没有提供“获取当前用户帐号”接口,因此无法实现该功能。RTX2006提供了该接口,因此RTX2006可以实现。注意,RTX只提供获取当前登录RTX帐号接口,但没有提供获取登录帐号的密码功能。您获取到用户名之后,与OA进行身份验证的工作由您自己实现。(如果判断用户已经登录了RTX,可以不需身份验证就直接登录OA,这是最简单的方法)。下面是获取当前登录RTX用户帐号示例代码: 
  123. //VBScript获取当前用户帐号<html> 
  124. <html> 
  125. <head> 
  126. <TITLE>GetUserName</TITLE> 
  127. language="vbscript" id="clientEventHandlersVBS"
  128. <!-- 
  129. Sub RTX_btnSessionKeyLogin_onclick  
  130. Set objKernal = RTXAX.GetObject("KernalRoot")  
  131. Account = objKernal.Account 
  132. If Account = "" Then 
  133.      MsgBox "您未登录RTX" 
  134. Else 
  135.      MsgBox "当前登录的用户名: " & Account 
  136. End If 
  137. end sub 
  138. --> 
  139. </script> 
  140. </head> 
  141. <body > 
  142.     <INPUT id="RTX_btnSessionKeyLogin"    type="button" value="获取用户名" style="WIDTH: 100px; HEIGHT: 21px" size="18" name="RTX_btnSessionKeyLogin" > 
  143. <OBJECT id=RTXAX 
  144. data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA== 
  145. classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT> 
  146. </OBJECT> 
  147. </BODY> 
  148. </HTML> 
  149. //C#示例代码 
  150. using System; 
  151. using System.Collections.Generic; 
  152. using System.ComponentModel; 
  153. using System.Data; 
  154. using System.Drawing; 
  155. using System.Text; 
  156. using System.Windows.Forms; 
  157. using RTXClient; 
  158. using RTXCAPILib; 
  159. using System.Runtime.InteropServices; 
  160. namespace GetLoginAccount 
  161.       public partial class Form1 : Form 
  162.     { 
  163.           public Form1() 
  164.     { 
  165.              InitializeComponent(); 
  166.      } 
  167.         private void button1_Click(object sender, EventArgs e) 
  168.     { 
  169.              RTXClient.RTXAPIClass ObjApi = new RTXAPIClass(); 
  170.              RTXCAPILib.IRTXCRoot RTXCRoot = (RTXCAPILib.IRTXCRoot)ObjApi.GetObject("KernalRoot"); 
  171.         try 
  172.     { 
  173.              string Account = (string)RTXCRoot.Account; 
  174.              MessageBox.Show("当前登录的用户名:" + Account); 
  175.     } 
  176.              catch (COMException ee) 
  177.         { 
  178.     } 
  179.     } 
  180.       } 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值