扩展 IBM Lotus Notes V8 侧栏和工具栏

IBM Lotus Notes V8 的新架构为扩展和定制用户体验提供了很多新方法。本文着眼于该环境中的两个位置,侧栏和工具栏,并讨论如何通过使用 Eclipse 插件来添加功能。

Brian Leonard, Lotus 客户机开发人员, IBM

Brian Leonard 是一名 Lotus Notes 客户机开发人员。在 IBM Lotus Notes V8 中,他从事搜索、电子邮件显示、显示图片的装载、拼写检查和可扩展性等方面的工作。他想长高一点,但是没法找到合适的 “扩展点”。



2007 年 5 月 11 日

IBM Lotus Notes V8 有了一个全新的面目,在很多方面都有所更新。其中用户体验的更新也许是最值得注意的更新。Lotus Notes V8 使用户使用起来非常方便。如果您是一名应用程序开发人员或管理员,并且有兴趣帮助用户提高生产率,那么可以利用 Lotus Notes 中这些巧妙变化中的一项变化:用以前从未有过的方法定制用户体验。

由于 Lotus Notes 采用了新的架构,这些变化得以实现。尤其是,Lotus Notes 现在构建在一些被设计为可扩展的平台之上,并从中受益。其中的核心则是开源的 Eclipse 平台。Eclipse 充当一种黏合剂,使得很多组件可以无缝地协作,同时又相互独立,便于定制。

IBM Lotus Expeditor V6.1 是一种新的平台,使用它可以方便、轻松地将应用程序交付到用户桌面。Lotus Expeditor 扩展了 Eclipse,同时又为 Eclipse 技术增添了很多特性。这些特性包括智能供应(intelligent provisioning)和可配置用户界面(configurable user interface)。此外,Lotus Expeditor 还是 IBM Lotus Sametime V7.5 和即将到来的 Lotus Notes V8 客户机的基础,如图 1 所示。

图 1. IBM Lotus 客户机架构
IBM Lotus 客户机架构

这种结构使您可以将开发对准 Lotus Expeditor 平台,这个平台可以在已有的 IBM Lotus Notes V8 Beta 中和今年晚些时候将发布的 Lotus Notes V8 中使用。今后,这些组件可以在 Lotus Sametime 和 Lotus Expeditor 独立产品中不加修改地重用。此外,企业只需创建一次应用程序和工具,然后可以在很多环境中轻松地供应这些应用程序和工具。

本文着眼于被添加到 Lotus Notes 客户机中的两个用户界面组件:SideNote 和 QuickNote。这两个应用程序都允许用户在客户机的侧栏或工具栏中添写注释。本文解释如何通过 Eclipse 插件向这些位置构建您自己的组件。

设置

首先,需要安装 Lotus Notes V8 beta 软件

然后,还需要设置 Eclipse,Eclipse 也是可以免费下载的。这里需要设置 Eclipse,以便使用 Lotus Notes 环境。教程 “How to develop Eclipse Components in an Eclipse IDE for Composite Applications in Lotus Notes” 提供了这方面的 说明

启动 Eclipse IDE,并通过以下步骤设置目标平台:

  1. 选择 Window - Preferences。
  2. 展开 Plug-in Development。
  3. 选择 Target Platform。
  4. 在 Location edit control 控件中,输入 c:\notes\framework\eclipse。
  5. 单击 Reload 按钮,然后单击 OK。

接着,创建一个附加安装的 JRE:

  1. 选择 Window - Preferences。
  2. 展开 Java。
  3. 选择 Installed JREs。
  4. 单击 Add。
  5. 对于 JRE name,输入 Notes JRE 作为名称。
  6. 输入 c:\notes\framework\rcp\eclipse\plugins\com.ibm.rcp.j2se.win32.x86_1.5.0.<version number> 作为 JRE Home Directory。(注意:这一步会将 JAR 文件填充到弹出框中较低的部位。)

接下来,通过以下步骤创建一个新的运行时配置:

  1. 选择 Run - Run,然后选择 Eclipse Application。
  2. 单击右键,选择 New。
  3. 输入一个名称(例如 Notes)。
  4. 在 Program to Run 下,选择 Run a product,然后选择 com.ibm.notes.branding.notes。
  5. 在 Runtime JRE 中,选择 Notes JRE。
  6. 在 Arguments 附签中,在 Program arguments 文本框中输入以下内容:
    -personality com.ibm.rcp.platform.personality
    -product com.ibm.notes.branding.notes
    -debug
    -console

在 VM arguments 文本框中输入以下参数(注意:这些参数都来自 <install>\rcp\eclipse\plugins\com.ibm.rcp.base_<version>\rcpinstall.properties。)
-Xshareclasses
-Drcp.home=${rcp.home}
-Dcom.ibm.rcp.install.id=${install_id}
-Drcp.install.config=user
-Dosgi.install.area=${rcp.home}\eclipse
-Dcom.ibm.pvc.osgiagent.core.logfileloc=${rcp.home}\rcp
-Dcom.ibm.pvc.webcontainer.port=0
-Declipse.pluginCustomization=${rcp.home}\rcp\plugin_customization.ini
-Declipse.registry.nulltoken=true
-Djava.protocol.handler.pkgs=com.ibm.net.ssl.www.protocol
-Djava.util.logging.config.class=com.ibm.rcp.core.internal.logger.boot.LoggerConfig
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook
-Dosgi.framework.extensions=com.ibm.rcp.core.logger.frameworkhook
-Xbootclasspath/a:${rcp.home}\rcp\eclipse\plugins\com.ibm.rcp.base_${rcp.base_version}\rcpbootcp.jar;

接下来,通过以下步骤完成运行时配置:

  1. 单击 Variables,单击 Edit Variables,然后单击 New。
  2. 输入 rcp.home 作为名称。
  3. 在 value 栏输入 Notes 的安装路径(即 c:\notes\Framework),然后单击 OK。
  4. 单击 Variables,单击 Edit Variables,然后单击 New。
  5. 输入 rcp.base_version 作为名称。
  6. 在 value 栏输入 com.ibm.rcp.base 插件的版本(即 6.1.0.0-20061004),然后单击 OK。
  7. 单击 Variables,单击 Edit Variables,然后单击 New。
  8. 输入 install_id 作为名称。
  9. 在 value 栏输入随机数(即 1149682348828),然后单击 OK。例如,如果 Notes 的路径为 C:\Documents and Settings\bleonard\IBM\RCP\1149682348828,那么随机数为 1149682348828。
  10. 单击 OK,然后单击 Cancel,以选择变量对话框(如果单击 OK 来选择变量,那么它将把变量添加到插入点)。

为了从 IDE 中启用 Notes 安全性,需要对两行代码解除注释。在 <notes install location>\framework\shared\eclipse\plugins\com.ibm.notes.branding_3.0.0.<version number>\notes_plugin_customization.ini 中,通过去掉前面的 # 字符,对以下两行代码解除注释:

#com.ibm.rcp.security.auth/loginEnabled=true
#com.ibm.rcp.security.auth/loginConfigName=NOTES

现在,选择 Run/Debug,启动 Lotus Notes。选择 Run - Run 或者 Debug - Debug。

最后,下载本文附带的代码,并将它解压到一个新文件夹中。为了将它导入到 Eclipse 中,需要导入已有的项目。

  1. 选择 File - Import。
  2. 选择 General - Existing Projects into Workplace,单击 Next。
  3. 浏览并选择之前将代码解压到的那个文件夹,单击 OK。界面应该类似于图 2。
  4. 单击 Finish 完成导入过程。
图 2. 将项目导入到 Eclipse 中
将项目导入到 Eclipse 中

扩展 IBM Lotus Notes

Lotus Notes 构建在 Eclipse Rich Client Platform (RCP) 和 IBM Lotus Expeditor 基础上。通过创建 Eclipse 插件,并使用 Lotus Expeditor 中的供应功能部署创建的插件,可以扩展 Lotus Expeditor。

插件是提供一块功能的组件。任何给定的插件都可以定义它所依赖的其它插件,从而允许粒度组件化和代码重用。通过扩展点(extension point),一个插件还可以为它所依赖的其它插件添加新的功能。

扩展点的概念是理解 Eclipse 工作原理的关键。组件可以通过扩展点定义用于其它插件的约定,以构成功能。构成功能的插件通过 XML 定义特定的值,从而履行这个约定。这些值可以是字符串格式的关键数据,也可以是实现关键接口的 Java 类文件的名称。例如,Eclipse 平台可以定义一个用于将菜单项添加到菜单中的扩展点。构成该功能的插件提供顶级菜单的 ID,显示给用户的名称,以及定义当用户单击菜单项时执行的动作的 Java 类的名称。要了解关于扩展点和 Eclipse 框架的更多信息,请访问 Eclipse Web 站点

为了扩展 Lotus Notes,可以使用相同的机制。在以下小节中,我们描述用于为侧栏和工具栏提供功能的扩展点。侧栏和工具栏只是可以使用这种方法进行扩展的很多组件中的两种组件,这里通过它们来阐释一下概念,并为向 Lotus Notes 客户机中更有趣的两个位置添加功能提供模板。


应用程序用例

在工作过程中,您很可能需要临时存放一些零碎的文本。有很多方法可以解决这一需求。例如,可以在桌面创建文本文件,然后在其中粘贴要存储的信息。但是,您可能会忘记删除这些文件,无意中多出一些随意命名的文本文件,把桌面搞得很乱。

接下来讨论的应用程序采用两种不同的方法来解决这个问题。

SideNote 位于侧栏中,完全由一个大的文本区组成。通过它可以粘贴或输入文本,如果不删除的话,这些文本将一直存在。而且,这种数据可以跨客户机会话保存,所以总是可用的。当需要在某个地方粘贴很快要引用到的零碎信息时,SideNote 是理想的工具。

QuickNote 可以从工具栏中执行类似的功能。单击 QuickNote 按钮会显示一个文本小窗口,可以在其中输入文本。这种文本可以保存到硬盘上的一个文件夹中。之后,可以将此文件夹中的这个文本文档和其它文本文档重新装载到这个窗口中。QuickNote 可以充当经常需要快速访问的更长久的文本或信息的剪贴簿。


SideNote 侧栏应用程序

Lotus Notes 侧栏为应用程序贡献了一个令人激动的方法。如图 3 所示,它提供了大量的屏幕操作区域以及持续的可用性。

图 3. SideNote 应用程序
SideNote 应用程序

您可以放大、缩小和悬浮侧栏应用程序,还可以同时使用多个侧栏。例如,IBM Lotus Notes V8 提供了用于 Lotus Sametime 联系人、当天日程安排、提要阅读器应用程序和查看活动安排的侧栏组件。通过实现扩展点约定,可以将自己的组件添加到这个位置。

SideNote 实现了这个约定,它将一个文本框添加到侧栏。当用户关闭 SideNote 时,这个应用程序还会收到通知。SideNote 利用这个时机将文本保存到硬盘上的文件中。当再次创建 SideNote 时,它重新显示该文本。

最后,通过一组扩展点,Eclipse 开发人员可以将菜单选项添加到任何侧栏应用程序中。SideNote 包括两个菜单选项,一个是 Save as file,另一个是 Load from file,如图 4 所示。

图 4. SideNote 菜单选项
SideNote 菜单选项

侧栏扩展点

让我们看看如何将 SideNote 添加到 Lotus Notes 侧边栏。如果查看 Eclipse 集成开发环境(IDE)中的 com.ibm.lotuslabs.ui.sidenote 插件,就可以看到它的关键组件。这些组件有:

  • Plugin.xml,定义它所实现的扩展点
  • MANIFEST.MF,定义依赖关系
  • Java 源文件,实现应用程序和动作

首先要理解的是 IViewPart 的概念,IViewPart 是由 Eclipse 定义的一个界面,大致相当于屏幕上的一个矩形。在 Eclipse 中,IViewParts 占据了您所能看到的界面的很大一部分。例如,图 5 中标出的区域都是 IViewParts。

图 5. Eclipse 客户机中的 IViewParts
Eclipse 客户机中的 IViewParts

在 Lotus Notes 中,也使用这些部分。虽然我们将 SideNote 称作侧栏中的一个应用程序,但它实际上是一个 IViewPart。具体地说,我们创建了如图 6 所示的 SideNoteViewPart。

图 6. SideNote 插件代码
SideNote 插件代码

这个 Java 类知道如何构建应用程序。其中定义了一个约定,即当该部件被创建时,会调用 createPartControl 方法。在本例中,可以使用一个文本控件填充可用区域。通过传入标志,创建滚动条,并告诉文本换行。在 Eclipse 中,很多可视化组件都是使用一种称作 Standard Widget Toolkit (SWT) 的技术创建的。正是 SWT 使得这一切来得如此容易,并且是跨平台的。还可以侦听特殊的组合键。例如,当用户按下 Ctrl + A 时,可以选择所有文本。最后,当执行 dispose 操作时,告诉文本控件保存其状态。在 Eclipse 中,当需要去掉或关闭一个可视元素时,就调用 dispose。

创建一个应用程序之后,需要告诉平台关于该应用程序的一些信息。这可以通过 plugin.xml 中的 org.eclipse.ui.views 扩展点来实现,如图 7 所示。

图 7. SideNote 视图扩展点
SideNote 视图扩展点

为视图提供一个 ID,这里可以使用类名,因为它通常是惟一的。

现在,您已经声明了功能,接下来可以使用另一个扩展点将它放入到用户体验中。将功能单元与 UI 布局分开,这是 Eclipse 中的普遍风格。Lotus Expeditor 平台定义用于将视图放入侧栏的扩展点。实现 com.ibm.rcp.ui.shelfViews 扩展点,并将它指向 SideNote 视图,如图 8 所示。shelfViews 扩展点中包括以下字段和值:

  • id: com.ibm.lotuslabs.sidenote.SideNoteViewPart
  • view: com.ibm.lotuslabs.sidenote.SideNoteViewPart
  • region: TOP
  • showTitle: true
图 8. SideNote
SideNote

该工具现在已经在 Lotus Notes 侧栏中。


SideNote 动作

接下来,我们来看看添加到 SideNote 菜单中的动作:将当前文本保存到文件中,以及从一个文件中装载文本。

在 plugin.xml 中,您实现了一个 final 扩展点。这一次,可以使用 org.eclipse.ui.viewActions 扩展点将某些动作与特定视图部件相关联。这个扩展点不仅允许扩展您所创建的视图,而且允许扩展对您所添加的东西毫不知情的视图。也就是说,可以为 Lotus Notes 中已有的侧栏添加动作,以扩展那些组件的功能。图 9 展示了 SideNote 插件如何添加这些动作。在 viewActions 扩展点中包括以下字段和值:

  • id: com.ibm.lotuslabs.ui.sidenote.actions
  • targetID: com.ibm.lotuslabs.ui.sidenote.SideNoteViewPart
图 9. SideNote viewActions 扩展点
SideNote viewActions 扩展点

通过将 targetID 设置为另一个视图的 ID,可以为那个应用程序添加动作。例如,使用来自 Lotus Notes 中的 Lotus Sametime 视图的 ID 可以随意扩展那个组件。

现在它们已经建立了关联,接下来定义动作,如图 10 所示。在 viewActions 扩展点中包括以下字段和值:

  • class: com.ibm.lotuslabs.ui.sidenote.internal.actions.SaveAsFile
  • enablesFor: *
  • id: com.ibm.lotuslabs.ui.sidenote.internal.actions.1.SaveAsFile
  • label: Save As File
  • menubarPath: additions
  • tooltip: Save Side Note text as file
图 10. SideNote 新增的动作
SideNote 新增的动作

这些扩展点定义动作的标签,并将平台指向当从菜单中选择动作时所运行的代码。在这个例子中,扩展点的约定要求类为一个 IViewActionDelegate。这个接口中最重要的部分是 run() 方法,该方法执行动作。实现这些动作的关键是 SideNoteViewPart 中的 getText() 和 setText() 方法。用于保存和装载的 run() 方法使用这两个方法来执行被请求的动作。

例如,SaveAsFile 类获取文本,让用户选择一个文件,并将文本写到那个文件中,如清单 1 所示。

清单 1. 将文本写到文件中
	 SideNoteViewPart part; 
	 public void run(IAction arg0) { 
		 if(part!=null) { 
			 final String text = part.getText(); 
			 FileDialog dialog = new FileDialog(PlatformUI.getWorkbench(). 
			 getDisplay().getActiveShell(), SWT.SAVE); 
			 dialog.setText("Save Side Note as:"); 
			 dialog.setFilterExtensions(new String[] { "*.txt", "*.*" }); 
			 final String path = dialog.open(); 
			 if(path!=null) { 
				 // new job to write to file 
				 Job write = new Job("Saving Side Note") { 
					 protected IStatus run(IProgressMonitor arg0) { 
						 writeToFile(path, text); 
						 return Status.OK_STATUS; 
					 } 
				 }; 
				 write.schedule(); 
			 } 
			 part.setFocus(); 
		 } 
	 }

QuickNote 工具栏应用程序

工具栏是另一个可以扩展 Lotus Notes 的地方。QuickNote 工具栏有一个按钮用于显示一个小型文本框,在这个文本框中可以编写注释,如图 11 所示。

图 11. QuickNote 工具栏
QuickNote 工具栏

输入文本之后,可以将文本保存到指定用于注释的一个文件夹中。然后,通过单击图 12 所示的下拉图标,可以重新装载这些文本。

图 12. QuickNote 菜单
QuickNote 菜单

com.ibm.lotuslabs.ui.toolbars.quicknote 插件扩展 QuickNote 应用程序。注意,这依赖于 com.ibm.lotuslabs.ui 插件,所以两者都应该在 Eclipse 工作区中。基本 UI 插件被独立出来,以便可以为多个特性提供功能。在这个例子中,QuickNote 使用这个插件中的简单的文本框。


工具栏扩展点

和侧栏应用程序一样,这里还是通过扩展点将工具栏应用程序添加到用户界面中。这一次是使用 com.ibm.rcp.ui.controlSets 扩展点。如图 13 中的菜单所示,这个扩展点允许插件为多个地方添加功能 —— Lotus Notes 客户机中的工具栏、状态栏和控件。

图 13. QuickNote controlSets 扩展点
QuickNote controlSets 扩展点

为了在客户机靠近顶端的工具栏中或者在靠近底端的状态栏中留出空间,添加一个 toolBar 项或 statusLine 项。在这个例子中,创建一个 toolBar 组件。为了填充那个空间,创建一个控件,并将它与工具栏的 ID 相关联,如图 14 所示。具体来说,控件元素中的 toolbarPath(com.ibm.lotuslabs.quicknote.bar)与 toolBar 元素中的 ID 相匹配。

图 14. QuickNote 控件扩展点
QuickNote 控件扩展点

类值将它指向用于构建工具栏的 Java 代码。该扩展点定义的约定是,这个类实现 ISContributionItem 接口。QuickNoteContribution 类履行这一约定。

ISContributionItem 的关键是 fill() 方法。在这个例子中,需要用按钮填充工具栏。这里添加两个按钮。第一个按钮标签为 QuickNote,用于显示来自 com.ibm.lotuslabs.ui 插件的弹出式文本框。第二个按钮用于展示如何创建图像按钮。所用的图像是一个下拉图标。当单击该按钮时,显示一个菜单。

这个菜单是通过读取 QuickNote 文件夹中的内容来填充菜单项的。这个文件夹还用于保存弹出式文本框中的注释。


结束语

这些例子应该足以让您学会如何将有用的组件放入 Lotus Notes 用户环境中。Eclipse 的灵活性使您可以在这些位置中随意添加功能,以改善用户体验。而且,请记住,虽然这里我们是构建用于 Lotus Notes 的 SideNote 和 QuickNote,实际上构建在 Lotus Expeditor 平台上的任何应用程序都可以在多个客户机中重用。

构建应用程序之后,需要将它们部署给用户。instructions in the "Composite Application Tutorial II: Eclipse Compoent" 教程中有一些说明,应该有所帮助。

在下一篇文章中,我们看看如何使用产品附带的 notes.jar 库将 Lotus Notes 数据集成到这个环境中,并利用该数据。如果您想现在就开始,this entry in the Notes/Domino V8 Public Beta Forum应该可以提供一个很好的始点。


下载

描述名字大小
notes_extensions.zip26 KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=219408
ArticleTitle=扩展 IBM Lotus Notes V8 侧栏和工具栏
publish-date=05112007