前段时间做了不少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”,事实上这个示例已经完成了大部分功能了。
- 相关阅读:
- ·高定制性 CISCO 2911/K9北京低价出售
//net.zol.com.cn/559/5591881.html - ·6槽位灵活定制 华为S7706交换机大卖
//net.zol.com.cn/556/5567483.html - ·随需而变 锐捷凭深度定制与互联网客户共赢
//net.zol.com.cn/556/5565682.html - ·高度定制能力 华为S7703交换机大卖
//net.zol.com.cn/551/5517721.html - ·华为构筑开发者生态圈 受益的都有谁?
//net.zol.com.cn/548/5486123.html


超稳定的双2.5G口高端路由性价比之王 中
解决家庭WiFi难题的救星 中兴巡天路由图
焕新出发 锐捷网络战略全面升级
锐捷+腾讯“威胁情报”战略合作发布会
2022年中小企业精选产品/方案评选
2021年华为全场景智慧生活新品发布会