|
IBM Lotus Sametime 8.5 Web 客户端
概述
Lotus Sametime 8.5 版本开始支持纯网页版的客户端,并且提供了灵活的网页版客户端的定制方式。这就让企业应用开发人员可以通过一些公共 API 将 Lotus Sametime 的即时聊天,会议等功能绑定到企业应用中,企业应用因此能使其用户具有实时沟通协作的能力。
公共 API 简介
Sametime Web 版公共 API 从架构上自底向上可以分为三个层次:REST API,基本功能模块以及 UI API。
REST API 是一些底层的与 Sametime 服务器交互数据的 API,这一层比较复杂并且不影响 Sametime Web 端的 UI 展现,不建议用户在这一层做任何修改。
REST API 上面一层就是由一些 Javascript 对象包装起来的基本功能模块,这些模块封装了 REST API 的低层调用,并构成了 Sametime UI 的基础,但不包含任何 UI 的展现。
UI API 是 Sametime 8.5 Web 版本的核心部件,它们实际上是由一系列的 Dojo 类组成。用户可以有选择性的引入部分 Dojo 组件来将 Sametime 8.5 的 Web 版本引入到各种 Web 应用中。
引入 Sametime Web 版的几个主要步骤
引入 Sametime Web 版主要是通过加载一些 Javascript 文件。清单 1 是一段示例的代码。
清单 1. 加载 Sametime Web 版
<script type="text/javascript" src="http://www.yoursametimeproxy.com:port /stbaseapi/baseComps.js"></script> <script type="text/javascript"> var stproxyConfig = { server: "http://www.yoursametimeproxy.com:portnumber" } // Dojo configuration: see Dojo Toolkit documentation var djConfig = { parseOnLoad: true }; </script> |
另外,为了保证 Sametime Web 版能正常显示,需要在 HTML 的 body 元素上加上一个 class=”tundra”,因为 Sametime Web 版是基于 Dojo toolkit 来构建的。
回页首
UI 定制的 API
UI widget 介绍
如果说之前的一些 API 介绍的是 Sametime 核心的功能,那么从这一部分开始就是直接操纵或者定制 Sametime UI 了。Sametime 8.5 Web 版 UI 是基于 Dojo 开发的,所有 Sametime 默认提供的 Web UI 组件都具有了 Dojo 组件可扩展的优点。用户可以通过初始化以下这些 Sametime Dojo 类来生成相应的 Sametime UI。
- sametime.WebClient
- sametime.Awareness
- sametime.QuickFind
- sametime.LiveName
- sametime.Chat
- sametime.GroupChat
- sametime.UserInfo
- sametime.BusinessCard
当然,一些额外的 Javascript 库以及 css 还需要在用户的页面上提前加载,如清单 3 所示。
清单 3. 加载 widget 所需资源
<link rel="stylesheet" type="text/css" href="/stwebclient/dojo_1.2.3/sametime/themes/ WebClientAll.css" /> <script type="text/javascript" src="/stbaseapi/baseComps.js"></script> <script type="text/javascript" src="/stwebclient/dojo_1.2.3/dojo/dojo.js"></script> <script type="text/javascript" src="/stwebclient/widgets.js"></script> |
这里以 sametime.Chat 为例来看该类是如何使用的。sametime.Chat 封装了一个聊天窗口的 UI 以及部分主要的窗口行为。用户可以使用 HTML 的方式来初始化该类,也可以用 Javascript 来创建该类的实例。
1. HTML 声明方式:
<div dojoType="sametime.Chat" userid="foo"></div> |
2. 用 Javascript 代码创建实例:
var client = new sametime.Chat({}); |
运行任意一种方式都可以得到如图 1 所示 UI。
图 1. Sametime Web 版聊天窗口示例
如何扩展 UI widget
对上述 UI widget 的扩展跟一般的 Dojo widget 扩展没有本质区别,都是需要对一些 Javascript 方法进行覆盖,或者在加载 widget 前修改部分参数。这里限于篇幅,我们来讨论几个具体的例子来看看在实战中如何扩展 UI widget。
配置 Sametime UI
全局对象 stproxyConfig 是用于修改用户需要的默认 Sametime Web UI 的。该对象中有几个属性非常有用:
- cssUrl:用户想加载的额外的 CSS 文件路径。
- jsUrl:用户想加载的额外的 Javascript 文件路径。
- plugins:定义当前 UI 可以加载的各个 plugin 及其是否启用。具体形式为:
plugins: { "mmpFile": false, "cmpTools": false, "lnmpRemove": false } |
其中 mmpFile 即为一个 plugin。Sametime 自带的所有 plugin 请查阅参考资料中的相关产品文档。
在聊天窗口中增加一个自定义的菜单
默认的聊天窗口上面有三个菜单,如图 1 所示,分别是 File, Tools, Help。分别对应的菜单 ID 是 stproxy_fileMenu,stproxy_toolsMenu,stproxy_helpMenu。通过以下两个步骤,用户可以很轻松的做到在其中某个菜单下增加新的菜单项:
1. 修改 stproxyConfig 对象,使之加载一个额外的 Javascript 文件,该文件将提供定制聊天窗口的 Javascript 代码
清单 4. 修改 stproxyConfig
<script type="text/javascript"> var stproxyConfig = {server:" http://www.yoursametimeproxy.com", jsUrl: "myChatWindow.js"} </script> |
2. 编辑 myChatWindow.js 的内容,将该菜单项加入到现有的 Tools (stproxy_toolsMen) 下面。
清单 5. myChatWindow 示例代码
stproxy.uiControl.addChatMenuPlugin({ id:"myMenuId", label: "my Menu Label", menuId: "stproxy_toolsMenu", isShowEntry: function(widgets) {}, onClick: function(mainWindow) {} }); |
用户可以根据自己的逻辑需要来加入 Javascript 代码在 isShowEntry 和 onClick 中。isShowEntry 将会判断是否需要显示该菜单项,onClick 方法将会在用户点击菜单项时触发。在这两个方法中,用户可以调用 Dojo 基础的一些 API。
把聊天窗口嵌在当前页面
当用户调用到 sametime.WebClient 时,Sametime 的默认行为是把聊天窗口在一个新的浏览器窗口展现出来,要想做到把聊天窗口嵌入到当前页面,用户需要把聊天窗口的打开方法重写掉。
1. 创建一个 Dojo 的 tab container 来包住用户想嵌入的聊天窗口
清单 6. tab container
<div dojoType="dojo.layout.TabContainer"> <div dojoType="dijit.layout.ContentPane"> <div dojoType="sametime.WebClient"></div> </div> </div> |
2. 将 stproxy.createChat 方法覆写,这段 Javascript 代码可以放在页面加载的过程中。
清单 7. 覆盖 createChat 方法
stproxy.createChat = function(partnerId) { var chat = new sametime.Chat({partnerId: partnerId}); var tab = new dijit.layout.ContentPane({ closable: true, title:stproxy.STProxy.getDisplayName(partnerId) }); tab.containerNode.appendChild(chat.domNode); tabContainer.addChild(tab); tabContainer.selectChild(tab); return chat; } |
参考资料
学习
- 阅读 使用 IBM Lotus Sametime 监控可用性、性能和基础架构以及其他要素。
- 阅读 IBM Lotus Sametime Server 故障诊断与排除。
- 参考 IBM Lotus Sametime wiki。
- 参考 IBM Lotus Sametime 主页。
- 在 Sametime 论坛中获得帮助。
- 访问 developerWorks Lotus 专区。
- 随时关注 developerWorks 技术活动和网络广播。
|
|
|