一步一步学习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>
IIS发布方式可以有HTTP、HTTPS这两种方式(如果为HTTPS,则必须将该站点加入IE的信任站点列表中)。
说明:发布方式还可以通过文件共享的方式,但不推荐这种方式。
最后说明两点:
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配置文件
</tabdata>
XML文件中,各元素的详细说明如下:
(“true” | “false”)
缺省:false
“inside” |
“outside” |
“both”)
inside :仅在内部登录时显示;
outside:仅在外部登录时显示;
both:都显示
HTTP:
HTTPS: 确认要在IE浏览器中可正确访问,如果不能访问,请将该站点加入IE的信任站点列表中。
文件共享:其书写规则为: [url=file:///c:/intput/wwwroot/OcsConfig/Tab/tabURL.xml]file:///c:/intput/wwwroot/OcsConfig/Tab/
三、注册XML文件
也可编辑一个reg 文件,直接导入即可:
在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 页面,比如:
(2)如果需要将当前选中的联系人、联系人分组信息传到web 页面,有一个脚本函数可以使用
今天就写到这里了,其实,这里面还有很多很炫的功能,希望能和大家一起讨论,下一堂课,将讲述
一步一步学习OC2007(三)--定制菜单命令
在前面的两篇文章中,我们讲了如何定制联系人的在线状态,如何定制web 标签页,是不是对OC2007 的魔力有所感触了呢?其实,这只是一个引言,一道开胃菜而已,后面还有更多的大餐等着你呢?今天,我们就一起来谈谈,如何定制OC2007的菜单命令?
OC2007中,有三种类型的菜单:
工具栏菜单(
会话窗口的动作菜单(The
联系人窗口右键菜单(The right-click menu off the Contact List)
在这些菜单列表中,都可以扩充我们的自定义菜单项。
在OC2007 中,扩展菜单项,比扩展web 标签页,要容易一些,只要在注册表中定义清楚菜单项的各项属性就可以正常运行。如下代码所示:
各注册键说明如下:
REG_SZ
菜单命令名称
应用程序类型:0:可执行文件;1:协议
REG_SZ
当
REG_SZ
应用程序的完整路径及其参数,缺省参数 %user-id% 和%contact-id%.
DWORD
会话类型。
0:本地会话,应用程序只在本地启动。
1:双方会话(缺省)
2:多方会话
REG_SZ
应用程序将会在哪些菜单上显示:
MainWindowRightClick
ConversationWindowActions
ConversationWindowContextual
ConversationWindowRightClick
缺省
多个菜单项目之间用分号(“;”)分隔。
菜单说明
一步一步学习OC2007(四)--扩展帮助菜单
在OC2007中扩展帮助菜单,也是OC护展中最简单的一项,只要在注册表中注册以下两项就可以了:
注册代码如下:
重启OC,就可以看到我们的帮助菜单条了,
通过前面几课的学习,大家可能对OC的强大功能有所了解了吧,她的即时通信、她的语音聊天、她的视频会议、她的分组、她的联系人查找等等等,都是其它IM工具所无法比拟的,再加之她的二次开发接口,更是锦上添花。
前面几课,无论是web 标签页的扩展、OC状态的自定义,还是菜单功能的扩展,都是针对于OC进行扩充与完善。试想,如果一个论坛与OC进行集成,在线人员一栏,就不是一些干涩文字,直接用OC的在线状态显示出来,如果想与之交流,就直接可以用OC进行交流了,如下图所示:
与电话联系表的集成,此时可以直接与对方通过OC 交流,即方便又适用。
与文章管理系统的集成,如果读者看了这篇文章后,有什么感想、有什么心得、或者有什么不同的见解,都可以立即与作者、与审核人员进行OC沟通,再不用另外查找他的通信方式。而且,也不必把对方加入联系人中,就可以直接通信。
怎么实现呢,其实很简单,请参照下面的代码就,依样画葫芦就可以了。
- <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebTest.WebForm1" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
- <HTML>
- <HEAD>
- <title>WebForm1</title>
- <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
- <meta name="CODE_LANGUAGE" Content="C#">
- <meta name="vs_defaultClientScript" content="JavaScript">
- <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
- <SCRIPT language='javascript' src='owsbrows.js'></SCRIPT>
- <SCRIPT language='javascript' src='ows.js'></SCRIPT>
- </HEAD>
- <body MS_POSITIONING="GridLayout">
- <form id="Form1" method="post" runat="server">
- <FONT face="宋体">
- <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 88px; WIDTH: 424px; POSITION: absolute; TOP: 136px; HEIGHT: 24px"
- cellSpacing="1" cellPadding="1" width="424" border="1">
- <TR>
- <TD>
- <table cellpadding="0" cellspacing="0">
- <tr>
- <td style="PADDING-RIGHT: 3px"><img border="0" valign="middle" height="12" width="12" src="../Resource/../Resource/p_w_picpath/blank.gif"
- onload="IMNRC('goumh@domain.com.cn');" id="{95100999-a43f-4db3-bc74-a74fad6473a7}" Sortable="1">
- <td style="PADDING-TOP: 1px" class="ms-vb">苟茂华(Goumh)
- </td>
- </tr>
- </table>
- </TD>
- </TR>
- </TABLE>
- </FONT>
- </form>
- </body>
- </HTML>
如果想与DataGrid 绑定,也非常简单
C#代码
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- namespace WebTest
- {
- /// <summary>
- /// msn1 的摘要说明。
- /// </summary>
- public class msn1 : BN.Web .UI .BNPage
- {
- protected BN.Web.UI.WebControls.BNDataGrid BNDataGrid1;
- protected BN.Web.UI.WebControls.BNDropDownList BNDropDownList1;
- protected System.Web.UI.WebControls.Label Label1;
- protected BN.Web.UI.WebControls.BNDataGrid BNDataGrid2;
- protected System.Web.UI.WebControls.DataGrid DataGrid1;
- BN.Data.DBTrans Sqlca = BN.Data.DBTrans.GetDBCInstance ("server=d1-hgh;database=HumanResource;uid=sa;pwd=29jDF?XvTt");
- private void Page_Load(object sender, System.EventArgs e)
- {
- // 在此处放置用户代码以初始化页面
- if (this.IsPostBack )
- return ;
- DataTable dt ;
- string strSql = "select distinct lngShopID,strShopName from dbo.View_Employee_Right ";
- dt = this.Sqlca .GetDataTable (strSql);
- this.BNDropDownList1 .DataBind (dt,"strShopName","lngShopID");
- this.DataGridBind();
- }
- Web 窗体设计器生成的代码
- private void BNDataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
- {
- System.Web .UI .WebControls .Image img ;
- img = (System.Web .UI .WebControls .Image)e.Item .FindControl ("Image1");
- string s = e.Item .Cells [1].Text + "@domain.com.cn";
- if (img != null)
- img.Attributes .Add ("onload","IMNRC('"+s+"');");
- }
- private void DataGridBind()
- {
- string strSql = "select lngShopID,strShopName,strEmployeeName,strOperatorName from dbo.View_Employee_Right where lngShopID = " + this.BNDropDownList1 .Value ;
- DataTable dt = this.Sqlca .GetDataTable (strSql);
- // this.BNDataGrid1 .DataBind (dt);
- this.DataGrid1.DataSource = dt.DefaultView ;
- this.DataGrid1 .DataBind ();
- }
- private void BNDropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
- {
- this.DataGridBind ();
- }
- private void Handle()
- {
- }
- }
- }
Aspx 代码
- <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebTest.WebForm1" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
- <HTML>
- <HEAD>
- <title>WebForm1</title>
- <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
- <meta name="CODE_LANGUAGE" Content="C#">
- <meta name="vs_defaultClientScript" content="JavaScript">
- <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
- <SCRIPT language='javascript' src='owsbrows.js'></SCRIPT>
- <SCRIPT language='javascript' src='ows.js'></SCRIPT>
- </HEAD>
- <body MS_POSITIONING="GridLayout">
- <form id="Form1" method="post" runat="server">
- <FONT face="宋体">
- <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 160px; POSITION: absolute; TOP: 56px"
- runat="server" AutoGenerateColumns="False">
- <Columns>
- <asp:BoundColumn DataField="strOperatorName" HeaderText="strOperatorName">
- <HeaderStyle Wrap="False"></HeaderStyle>
- <ItemStyle Wrap="False"></ItemStyle>
- </asp:BoundColumn>
- <asp:TemplateColumn>
- <HeaderStyle Wrap="False"></HeaderStyle>
- <ItemStyle Wrap="False"></ItemStyle>
- <ItemTemplate>
- <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="300" border="0">
- <TR>
- <TD>
- <asp:Label id=strName runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.strEmployeeName") %>'>
- </asp:Label>
- <asp:Image id="Image1" runat="server" ImageUrl="../Resource/p_w_picpath/blank.gif" Sortable="1"></asp:Image></TD>
- <TD><FONT face="宋体"></FONT></TD>
- </TR>
- </TABLE>
- </ItemTemplate>
- </asp:TemplateColumn>
- </Columns>
- </asp:DataGrid>
- </FONT>
- </form>
- </body>
- </HTML>
就这样,短短的几行代码,就会让你的系统,大放异彩。试一试吧,你会有意想不到的收获。