Office Communicator 2007定制开发展示

作者:柴晓伟

2008年10月14日

前段时间做了不少 Office Communicator 2007的定制开发,主要内容包括组织人员树、聊天记录以及与其它通讯方式的结合(比如手机短信和邮件)。组织人员树仿佛是国内办公领域亘古不变的需求,而 Office Communicator 2007默认并不支持多级分组,所以只能定制开发。
第一版,我使用了普通的 ASP.NET页面作为组织结构树的宿主,并将其添加到 Office Communicator 2007的标签页中,该组织结构支持向单个用户、用户组以及多个用户发送消息。效果如下:

组织结构树中显示人员的 Office Communicator状态是依靠 Office中的 NameCtrl完成的,具体方法请参见《使用NameCtrl为网页集成Office Communicator状态信息》。

但不知道是 NameCtrl的 bug,还是 Office Communication Server 2007的限制,总会随机地出现某些用户的状态始终无法返回的情况,于是我使用 ActiveX开发了第二版,效果如下:

第二版很大程度上参考了微软的 “Microsoft Office Communicator 2007 Presence Controls ”,人员的状态信息本来也已经实现,可是仍然像第一版一样不太稳定,于是以上截图中并不包含人员的状态信息。
在第一版中,与其他通讯方式的结合是通过浏览器弹出窗口来完成的,而第二版采用了 ActiveX技术后,弹出 WinForm窗体已是不可能,于是仿照流行的网页 “遮罩对话框 ”效果实现了一种位于控件内的对话框。
这个对话框可以在其内部显示任何用户控件,并在显示的同时禁用 ActiveX的其它部分,而且它还公开了对话框关闭事件,以便点击用户控件的某一按钮(比如 “发送 ”)时关闭对话框。这个对话框的效果如下:

总结一下两种方式的优劣吧。

对于纯 ASP.NET来说,是很复杂的,因为它是纯 B/S架构,用 UCMA等 API来订阅用户的状态显然不现实,而 NameCtrl又会出现状态无法返回的问题(当然,这个也有可能是我这边的个别现象)。抛开用户状态,想要获得很好的用户体验,开发人员不得不采用 JavaScript来控制组织人员树和一些行为,而 Office Communicator 2007对标签页中的 HTML内容是有一定限制的,这会让开发人员的排错非常痛苦。
对于 ActiveX来说,完全可以使用 API来订阅状态,而不用担心页面刷新的问题,而且组织人员树这种控件也非常容易实现。但因为它是客户端应用程序,所以与其它系统的集成可能需要借助 Web Services来完成,这样做虽然增加了少许不便,但也使得应用程序不再紧密耦合,所以这也是我个人推荐的方法。

源码涉及到商业机密,就不提供了,有需求的朋友可以参考 “Microsoft Office Communicator 2007 Presence Controls ”,事实上这个示例已经完成了大部分功能了。

 

 

下一篇:(柴晓伟)Visual Studio 2010 Tools for SharePoint