一步一步学习OCS2007(一)--如何定制在线状态?(转自:http://www.cnblogs.com/invinboy )
 OCS 2007(即Microsoft Office Communicators Server 2007) 是微软2007年推出的一款非常重要的即时通讯软件,她汇集了多方即时通讯、多方语音聊天、多方视频会议等众多功能,同时还提供了强大的二次开发接口,以便用户进一步去扩展、去开拓。
  下面,我将逐惭就OCS2007二次开发过程中的一些体会,感受表达出来,与读者共享。
  今天的主题是,用户如何自定义在线状态
  在OCS2007中,主要有三种基础状态:Online、Busy、Do Not Disturb ,这些状态是根据Availability 属性决定自定义的状态显示哪一个图标。定制自定义状态的核心是:(1)配置自定义状态的XML文件;(2)配置文件在注册表中进行注册。下面将一步一步地介绍如何进行这一扩展。

  一、定义XML配置文件,如下例:

<?xml version="1.0" encoding="utf-8" ?>
<customStates>
<customState ID="1" availability="online">
<activity LCID="2052"> 下雪啦!</activity>
</customState>
<customState ID="2" availability="do-not-disturb">
<activity LCID="2052">会议中......</activity>
</customState>
<customState ID="3" availability="busy">
<activity LCID="2052">OCS2007 研究中......</activity>
</customState>
</customStates>

</customStates>

  二、在IIS中发布该XML文件,在IIS中创建一个网站或者一个虚拟目录,然后将该XML文件放入此虚拟目录中应该就可以了(确认:在IIS中选中这个XML文件,右键,在浏览器中浏览,看是否能在IE中正确打开,如果这个地址需要发布出去共多人使用,别人不能使用时,请将此地址加入IE的信任站点中即可)。如图:

  IIS发布方式可以有HTTP、HTTPS这两种方式(如果为HTTPS,则必须将该站点加入IE的信任站点列表中)。
说明:发布方式还可以通过文件共享的方式,但不推荐这种方式。

  三、在注册表注册配置文件:打开注册表,找到HKLM\software\Policies\Microsoft\Communicator 创建一字符串项CustomStateURL其值就是在IIS中发布的XML文件的URL,比如:http://localhost/OcsConfig/CustomStateURL.XML,如图:

  

  四、退出OCS2007客户端,重新登录,令人心动的功能是不是就出来了呢。

  最后说明两点:
  1、OCS2007中,最多可以定义四种自定义状态。
  2、每种自定义状态的最大长度不能超过64个字符。
  3、在XML文件中的LCID,它是用来标识不同语言版本的OC,英语美国:1033;中国大陆:2052;中国香港:3076。
4、XML文件配置项是大小写敏感的,其中availability这个属性,我试验过了,如果写成Availability 将不能生效。其它属性没有检验过。

一步一步学习OCS2007(二)--如何定制web 标签页?

 前面我们体验了如何定制OCS2007的在线状态,不知道大家有没有去实践过,今天我与大家一道来分享另一个课题:如何在OC 2007中定制web 标签页?
  在OC2007中,在联系人窗口的下方,我们可以添加一系列web 页,将业务系统中重要的、常用的功能集成到OC平台上,致使在OC中可以解决很复杂的业务问题,在业务系统中,也可以方便地进行即时通讯,以达到优势互补之目的。如下图所示:

下面我们将一步一步地学习,怎么来实现这一功能:
  
  一、定义XML配置文件,web 标签页的所有属性,比如说标签图标的URL、名称、tooltip 提示、web 页面的地址、传递的参数等,都必须通过一个XML文件来加以定,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<tabdata>
<tab>
<p_w_picpath>http://localhost/BNSolution/WebTest/RESOURCE/IMAGE/away.png</p_w_picpath>
<name>System</name>
<tooltip>常用系统</tooltip>
<contenturl>http://localhost/BNSolution/WebTest/OCS/WebForm1.aspx</contenturl>
<userid>true</userid>
<contactid>true</contactid>
<accessibility>inside</accessibility>
</tab>
<tab>
<p_w_picpath>http://localhost/BNSolution/WebTest/RESOURCE/IMAGE/2.png</p_w_picpath>
<name>System</name>
<tooltip>信息中心</tooltip>
<contenturl>http://localhost/BNSolution/WebTest/OCS/HTMLPage1.htm</contenturl>
<userid>true</userid>
<contactid>true</contactid>
<accessibility>inside</accessibility>
</tab>
</tabdata>
   XML文件中,各元素的详细说明如下: XML 元素
描述
是否必须
tabdata
Contains 0 or more tab elements. The aximum number of tab elements is 32.

No

tab
Contains p_w_picpath, name, tooltip, contenturl, userid, contactid, and accessibility elements.

No

p_w_picpath
标签图片的URL.

No

name
标签的友好名称,用于标识XML结点,将不显示。

Yes

tooltip
鼠标悬停在标签上时的提示信息。.

No

contenturl
web 标签页面的URL。

Yes

userid (“true” | “false”)
展现标签页面时,是否带上usrid 参数(当前用户SIP:URI)。缺省:false

No

contactid
(“true” | “false”)

展现标签页面时,是否带上联系人的 contactid 参数(联系人的SIP:URI)。
缺省:false

No

accessibility (
“inside” |
“outside” |
“both”)

用户在企业内部或者外部登录时,该标签是否显示:
inside :仅在内部登录时显示;
outside:仅在外部登录时显示;
both:都显示

No

  二、发布XML文件,发布方式有:
  HTTP:
  HTTPS: 确认要在IE浏览器中可正确访问,如果不能访问,请将该站点加入IE的信任站点列表中。
  文件共享:其书写规则为: [url=file:///c:/intput/wwwroot/OcsConfig/Tab/tabURL.xml]file:///c:/intput/wwwroot/OcsConfig/Tab/tabURL.xml[/url]  

 三、注册XML文件,打开注册表编辑器,找到HKEY_LOCAL_MACHINE\software\Policies\Microsoft\Communicator ,创建一字符串项TabURL 其值就是上面发布的XML文件的URL,比如:http://localhost/OcsConfig/TabURL.XML。
  也可编辑一个reg 文件,直接导入即可:[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Communicator]
"TabURL"=[url=file://server//comshare//Presence.xml]"[/url]http://localhost/OcsConfig/TabURL.XML[url=file://server//comshare//Presence.xml]"[/url]

  四、重新登录OC,看一看漂亮的女神,终于揭开她神秘的面纱,是不是能和我们一见忠情啊!

   在OC2007中,通过定制web 标签页,才算打开它二次开发的大门,开始踏上二次开发的慢慢征途。这些标签页,基本上没有什么限制,无论asp、ASP.net 、Microsoft SharePoint Services Web parts、Microsoft ActiveX
controls 还是  scripted applications,都可以正确的运行。所以说,尽可能地发挥你丰富的想象力,把OC与应用系统很好地集成起来,不怕做不到,只怕想不到。

  最后补充说明几个问题:
  1、在OC2007中,最多可以创建 32个tab 标签页,否则将不能生成。其实也用不了那么多,小小的一块天地,捡重点,捡实用的东东放上就可以了,现在楼市火爆,地盘值钱,方寸大小的屏幕,也价值不菲啊,所以就更要合理运用了。

  2、标签图片(即:XML文件中的p_w_picpath 图片),必须为*.png 格式的图片。图片的大小为 16 X 16 或者 32 X 32 ,如果图片格式或者图片大小不符合规范,则显示缺省图标。

  3、如果需要将当前用户或者被选中的联系人,传递给标签中的web 页面,我们可以有下面两种办法:、
  (1)、在XML文件中,设置 userid =true  contactid =true,这样当前用户或者联系人的SIP:URI 就会作为页面参数传递给web 页面,比如:
contenturl=http://moc.corp.contoso.com/corpnews.html 当前用户为sip:mallen@contoso.com ,加载web 页面时的URL则为:http://moc.corp.contoso.com/corpnews.html ?usrid=sip:mallen@contoso.com

(2)如果需要将当前选中的联系人、联系人分组信息传到web 页面,有一个脚本函数可以使用    
    OnSelectionChange(contacts, groups, distribution_groups)
  今天就写到这里了,其实,这里面还有很多很炫的功能,希望能和大家一起讨论,下一堂课,将讲述如何扩展OC2007的菜单功能,敬请关注。
一步一步学习OC2007(三)--定制菜单命令
 在前面的两篇文章中,我们讲了如何定制联系人的在线状态,如何定制web 标签页,是不是对OC2007 的魔力有所感触了呢?其实,这只是一个引言,一道开胃菜而已,后面还有更多的大餐等着你呢?今天,我们就一起来谈谈,如何定制OC2007的菜单命令?
  OC2007中,有三种类型的菜单:
  工具栏菜单(The Tools menu)
  会话窗口的动作菜单(The Actions menu off the Conversation window)
  联系人窗口右键菜单(The right-click menu off the Contact List)

在这些菜单列表中,都可以扩充我们的自定义菜单项。
  在OC2007 中,扩展菜单项,比扩展web 标签页,要容易一些,只要在注册表中定义清楚菜单项的各项属性就可以正常运行。如下代码所示:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Communicator\SessionManager\Apps\{27877e66-615c-4582-ab88-0cb2ca05d951}]
"Name"="发送短信"
"ExtensibleMenu"="ConversationWindowRightClick;MainWindowActions;MainWindowRightClick;ConversationWindowActions;ConversationWindowContextual"
"Path"="E:\\群发邮件\\SendNote\\SendNote.exe %user-id% %contact-id%"
"ApplicationInstallPath"="E:\\群发邮件\\SendNote\\SendNote.exe"
"SessionType"=dword:00000000
"ApplicationType"=dword:00000000

各注册键说明如下:
Name
Type
Data
Name
REG_SZ
菜单命令名称
ApplicationType
DWORD
应用程序类型:0:可执行文件;1:协议
ApplicationInstallPath
REG_SZ
ApplicationType = 0 时,应用程序的完整路径
Path
REG_SZ
应用程序的完整路径及其参数,缺省参数 %user-id% 和%contact-id%.
SessionType
DWORD
会话类型。
0:本地会话,应用程序只在本地启动。
1:双方会话(缺省)
2:多方会话

ExtensibleMenu
REG_SZ
应用程序将会在哪些菜单上显示:
MainWindowActions
MainWindowRightClick
ConversationWindowActions
ConversationWindowContextual
ConversationWindowRightClick

缺省MainWindowRightClickConversationWindowContextual 
多个菜单项目之间用分号(“;”)分隔。

菜单说明

键名称(Key) 说明MainWindowActions主窗口菜单的[工具]工菜单下MainWindowRightClickOC主窗口联系人[右键]菜单ConversationWindowActions对话窗口菜单的[操作]菜单下ConversationWindowContextual对话窗口的[发送文件]菜单ConversationWindowRightClick对话窗口,联系人列表[右键]菜单定义完成后,重启OC,就可以达到如图所示的效果了。

一步一步学习OC2007(四)--扩展帮助菜单

在OC2007中扩展帮助菜单,也是OC护展中最简单的一项,只要在注册表中注册以下两项就可以了:

  HelpMenuText :帮助菜单名称。
  
HelpMenuURL :帮助内容页面的URL。

注册代码如下:   

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Communicator]
"HelpMenuText"="发送短信帮助"
"HelpMenuURL"=http://localhost/SendNoteHelp/index.htm

 
  重启OC,就可以看到我们的帮助菜单条了,

一步一步学习OC2007(五)--OC与 Web 应用系统的集成

  通过前面几课的学习,大家可能对OC的强大功能有所了解了吧,她的即时通信、她的语音聊天、她的视频会议、她的分组、她的联系人查找等等等,都是其它IM工具所无法比拟的,再加之她的二次开发接口,更是锦上添花。
  前面几课,无论是web 标签页的扩展、OC状态的自定义,还是菜单功能的扩展,都是针对于OC进行扩充与完善。试想,如果一个论坛与OC进行集成,在线人员一栏,就不是一些干涩文字,直接用OC的在线状态显示出来,如果想与之交流,就直接可以用OC进行交流了,如下图所示:

与电话联系表的集成,此时可以直接与对方通过OC 交流,即方便又适用。

与文章管理系统的集成,如果读者看了这篇文章后,有什么感想、有什么心得、或者有什么不同的见解,都可以立即与作者、与审核人员进行OC沟通,再不用另外查找他的通信方式。而且,也不必把对方加入联系人中,就可以直接通信。

怎么实现呢,其实很简单,请参照下面的代码就,依样画葫芦就可以了。

  1. <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebTest.WebForm1" %>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  3. <HTML>
  4. <HEAD>
  5. <title>WebForm1</title>
  6. <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  7. <meta name="CODE_LANGUAGE" Content="C#">
  8. <meta name="vs_defaultClientScript" content="JavaScript">
  9. <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  10. <SCRIPT language='javascript' src='owsbrows.js'></SCRIPT>
  11. <SCRIPT language='javascript' src='ows.js'></SCRIPT>
  12. </HEAD>
  13. <body MS_POSITIONING="GridLayout">
  14. <form id="Form1" method="post" runat="server">
  15. <FONT face="宋体">
  16. <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 88px; WIDTH: 424px; POSITION: absolute; TOP: 136px; HEIGHT: 24px"
  17. cellSpacing="1" cellPadding="1" width="424" border="1">
  18. <TR>
  19. <TD>
  20. <table cellpadding="0" cellspacing="0">
  21. <tr>
  22. <td style="PADDING-RIGHT: 3px"><img border="0" valign="middle" height="12" width="12" src="../Resource/../Resource/p_w_picpath/blank.gif"
  23. onload="IMNRC('goumh@domain.com.cn');" id="{95100999-a43f-4db3-bc74-a74fad6473a7}" Sortable="1">
  24. <td style="PADDING-TOP: 1px" class="ms-vb">苟茂华(Goumh)
  25. </td>
  26. </tr>
  27. </table>
  28. </TD>
  29. </TR>
  30. </TABLE>
  31. </FONT>
  32. </form>
  33. </body>
  34. </HTML>

如果想与DataGrid 绑定,也非常简单
C#代码

  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Web;
  7. using System.Web.SessionState;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.HtmlControls;
  11. namespace WebTest
  12. {
  13. /// <summary>
  14. /// msn1 的摘要说明。
  15. /// </summary>
  16. public class msn1 : BN.Web .UI .BNPage
  17. {
  18. protected BN.Web.UI.WebControls.BNDataGrid BNDataGrid1;
  19. protected BN.Web.UI.WebControls.BNDropDownList BNDropDownList1;
  20. protected System.Web.UI.WebControls.Label Label1;
  21. protected BN.Web.UI.WebControls.BNDataGrid BNDataGrid2;
  22. protected System.Web.UI.WebControls.DataGrid DataGrid1;
  23. BN.Data.DBTrans  Sqlca =  BN.Data.DBTrans.GetDBCInstance ("server=d1-hgh;database=HumanResource;uid=sa;pwd=29jDF?XvTt");
  24. private void Page_Load(object sender, System.EventArgs e)
  25. {
  26. // 在此处放置用户代码以初始化页面
  27. if (this.IsPostBack )
  28. return ;
  29. DataTable dt ;
  30. string strSql = "select distinct lngShopID,strShopName from dbo.View_Employee_Right ";
  31. dt = this.Sqlca .GetDataTable (strSql);
  32. this.BNDropDownList1 .DataBind (dt,"strShopName","lngShopID");
  33. this.DataGridBind();
  34. }
  35. Web 窗体设计器生成的代码
  36. private void BNDataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  37. {
  38. System.Web .UI .WebControls .Image  img ;
  39. img = (System.Web .UI .WebControls .Image)e.Item .FindControl ("Image1");
  40. string s = e.Item .Cells [1].Text + "@domain.com.cn";
  41. if (img != null)
  42. img.Attributes .Add ("onload","IMNRC('"+s+"');");
  43. }
  44. private void DataGridBind()
  45. {
  46. string strSql = "select lngShopID,strShopName,strEmployeeName,strOperatorName from dbo.View_Employee_Right where lngShopID = " + this.BNDropDownList1 .Value ;
  47. DataTable dt = this.Sqlca .GetDataTable (strSql);
  48. //            this.BNDataGrid1 .DataBind (dt);
  49. this.DataGrid1.DataSource = dt.DefaultView ;
  50. this.DataGrid1 .DataBind ();
  51. }
  52. private void BNDropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
  53. {
  54. this.DataGridBind ();
  55. }
  56. private void Handle()
  57. {
  58. }
  59. }
  60. }

Aspx 代码

  1. <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebTest.WebForm1" %>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  3. <HTML>
  4. <HEAD>
  5. <title>WebForm1</title>
  6. <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  7. <meta name="CODE_LANGUAGE" Content="C#">
  8. <meta name="vs_defaultClientScript" content="JavaScript">
  9. <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  10. <SCRIPT language='javascript' src='owsbrows.js'></SCRIPT>
  11. <SCRIPT language='javascript' src='ows.js'></SCRIPT>
  12. </HEAD>
  13. <body MS_POSITIONING="GridLayout">
  14. <form id="Form1" method="post" runat="server">
  15. <FONT face="宋体">
  16. <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 160px; POSITION: absolute; TOP: 56px"
  17. runat="server" AutoGenerateColumns="False">
  18. <Columns>
  19. <asp:BoundColumn DataField="strOperatorName" HeaderText="strOperatorName">
  20. <HeaderStyle Wrap="False"></HeaderStyle>
  21. <ItemStyle Wrap="False"></ItemStyle>
  22. </asp:BoundColumn>
  23. <asp:TemplateColumn>
  24. <HeaderStyle Wrap="False"></HeaderStyle>
  25. <ItemStyle Wrap="False"></ItemStyle>
  26. <ItemTemplate>
  27. <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="300" border="0">
  28. <TR>
  29. <TD>
  30. <asp:Label id=strName runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.strEmployeeName") %>'>
  31. </asp:Label>
  32. <asp:Image id="Image1" runat="server" ImageUrl="../Resource/p_w_picpath/blank.gif" Sortable="1"></asp:Image></TD>
  33. <TD><FONT face="宋体"></FONT></TD>
  34. </TR>
  35. </TABLE>
  36. </ItemTemplate>
  37. </asp:TemplateColumn>
  38. </Columns>
  39. </asp:DataGrid>
  40. </FONT>
  41. </form>
  42. </body>
  43. </HTML>

就这样,短短的几行代码,就会让你的系统,大放异彩。试一试吧,你会有意想不到的收获。

转载于:https://blog.51cto.com/kongkong7777/775710

学习OCS客户端定制相关推荐

  1. Tencent APIJSON 零代码、全功能、强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构

    项目介绍 零代码.全功能.强安全 ORM 库 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构. A JSON Transmission Protocol and an ORM ...

  2. (五)开源IT资产管理系统--分发OCS客户端

    OCS客户端分发可以通过两种方式实现: 1)部署工具安装OCS Inventory NG Agent Deployment Tool 2)打包工具OCSPackager配合AD进行分发 OCS Inv ...

  3. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  4. webService学习4:客户端调用服务端的代码

    1 服务器端sayHello变化了一点,代码如下 @WebService public class HelloWSImpl implements HelloWS {public String sayH ...

  5. 学习云客户端安装流程

    学习云客户端安装流程 通过网盘链接下载好文件后,通过接下来的三部来完成安装操作 安装客户端 解压镜像文件 配置BIOS 虚拟化与安全启动 下面是两个配置的链接,可以先配置起来,也可以安装完再配置 wi ...

  6. 【国产数据库】GBase学习⑤ - gsql 客户端连接工具

    [国产数据库]GBase学习⑤ - gsql 客户端连接工具 gsql介绍 gsql使用方式 DBeaver客户端工具配置 gsql介绍 GBase 8c 客户端工具是gsql.类似于MySQL的my ...

  7. openfire学习4---android客户端聊天开发之聊天功能开发

    前面我们已经把服务器搭建完成,并且在客户端实现了登录了. 和我们使用的QQ一样,想一想,登录成功之后呢?肯定是要有一个好友列表,通过这个列表,我们可以选择我们需要聊天的好友. 这里我们先研究下 xmp ...

  8. Android HIDL 介绍学习之客户端调用

    应上一篇文章Android HIDL 介绍学习_Super Jang的博客-CSDN博客_安卓hidl读者的要求,本文更新客户端调用方法. hidl的客户端调用相比服务端的实现要简单很多,本次我们通过 ...

  9. Angular Universal 学习笔记 - 客户端渲染和服务器端渲染的区别

    https://github.com/angular/universal Universal 的命名由来: We believe that using the word "universal ...

最新文章

  1. 快速获取OpenCV库(Lib)文件下的所有文件的目录名~
  2. 房地产企业大量海外融资,或将来资不抵债,被收购
  3. boost::hana::reverse_fold用法的测试程序
  4. 如何用python创建文件_怎么用python建立一个txt文档,并输入内容-百度经验
  5. 为什么越来越多员工反感公司办年会?
  6. python判断set里是否包含值_【python】判断值是否在list和set的对比以及set的实现原理...
  7. 【HDOJ】3459 Rubik 2×2×2
  8. keras.layers.Conv2D 与tf.layers.Conv2D 的兼容性: AttributeError: ‘tuple‘ object has no attribute ‘layer‘
  9. 55个高质量的Magento主题,助你构建电子商务站点
  10. 2.冒泡排序----还是不懂,先记录下来
  11. 软件质量保证与测试(一)
  12. 区块链(BlockChain)基础概念
  13. json对象转map集合(json转map最快的方法)
  14. 新手初用mybatis
  15. 开新林哲自曝:打造二手车全球经营
  16. 陷波滤波器——周期性降噪
  17. linux 定时执行任务 at atq atrm命令的使用
  18. 网络安全入门:什么是防火墙,防火墙有哪些功能
  19. 21年icpc沈阳站记录
  20. 使用代理服务器导致电脑无法打开网页解决办法

热门文章

  1. NOI2002 贪吃的九头龙
  2. 05-Windows Server 2012 R2 会话远程桌面-标准部署-RD连接代理高可用性(RemoteApp)
  3. 对话中小企业信息化甲乙方(2)
  4. python输出日期的模版_python按日期区间生成markdown日记模板
  5. python编程怎么建立工程_教你如何用Python脚本快速创建项目
  6. openLDAP的编译安装以及配置
  7. 软件工程第二次结对作业
  8. Vue js 的生命周期(看了就懂)
  9. 安装软件the error code is 2203解决方法
  10. 移动端数据java后台接收