在 Eclipse 中编写 Java 代码,来扩展 IBM Lotus Notes
V8 客户机。将 Lotus Notes 自如地用于个人电子邮件,并且对邮件进行扩展以包含新的 Mail Rule Runner,允许用户在客户机上手动运行自己的规则。
本文的重点是如何在 Eclipse PDE(programming development environment,程序开发环境)中编写
Java 代码来扩展 IBM Lotus Notes V8 客户机。特别地,将展示如何将 Lotus Notes 自如地用于个人邮件。
将重点讨论核心 Eclipse 技术,包括扩展、操作集、插件、特性和更新站点。可以使用这些技术将功能部署到任何基于 Eclipse
的产品。这里将着重讨论 Lotus Notes 客户机,并对邮件进行扩展以包含新的 Mail Rule Runner,允许用户在客户机上手动运行自己的规则。
注意:我们可以自如地将 Lotus Notes 邮件用作 POP3 和 SMTP 邮件的主要客户机,但是缺失的一个功能是邮件规则。我们知道,Lotus
Notes 中的邮件规则是在 SMTP 服务器上运行的,如果没有 Domino SMTP 服务器,就没有邮件排序。虽然该工具是不完美的,但它的确展示了如何使用
Eclipse 来扩展 Lotus Notes,以及如何使用 Lotus Notes Java 后端类来访问和操作 Lotus
Notes 数据。
首先使用 Eclipse 来创建自己的插件。下载
部分的代码和示例是使用基本 Eclipse 版本 3.2.1 创建的。
应创建新的菜单选项,它在 Lotus Notes 邮件视图中显示为在本地运行邮件规则的操作(图标)。用户单击 Run Mail
Rules 按钮时,将出现一个对话框,其中选中了所有已启用的邮件规则;然后将出现一个组合框,可以选择要运行的视图或文件夹。图 1
展示了 Run Mail Rules 对话框。其中的模糊区域隐藏了任何个人信息。
图 1. Run Mail Rules 对话框
该对话框是一个基于 Eclipse SWT 的基本对话框,它使用 SWT GridLayout 来定义如何在屏幕上确定不同 UI
元素的位置。
单击 Run 按钮后,将显示标准的 Eclipse 过程对话框,参见图 2。单击 Run in Background 按钮,可以在后台运行该对话框。如果已打开在其上运行规则的视图,那么在完成操作后按
F9 来刷新视图。显而易见,能够对该工具进行扩展,以便在完成邮件规则操作之后刷新当前屏幕。
图 2. Run Mail Rules Job 过程
创建插件
像所有插件一样,使用 Eclipse 插件向导进行创建是比较容易的部分。尽管 Eclipse 替您完成了大量工作,但像软件开发中的其他事情一样:这仅仅是开始。对于本例,使用了
Eclipse 3.2.2,并指定所安装的 Lotus Notes V8 Beta 客户机作为目标平台。建议在所有机器上始终将
Lotus Notes 安装在相同位置上,即 c:\notes。选择 Window - Preferences 来设置 Eclipse
中的目标平台。通过选择 Plug-in Development -Target Platform 来指定目标平台。图 3 展示了选择
Lotus Notes 作为目标平台。关键是选择 f\ramework\eclipse 目录。这是 Eclipse 运行时的根目录。在本例中,该目录是
c:\notes\framework\eclipse。
图 3. 指定目标平台
选择 Lotus Notes 运行时作为平台后,可以创建新插件、设置依赖项并编写依赖项代码。将 Lotus Notes 作为目标平台后,可以使用所有
Eclipse、Lotus Expeditor 以及 Lotus Notes API 和扩展。在 Package Explorer
中,右键单击并选择 New - Project。在这里选择一个 Eclipse 插件项目。图 4 展示了即将看到的屏幕,即 New
Project 向导。
图 4. New Project 向导
单击 Next,然后将项目命名为 com.ibm.notes.mail.utils。这是稍后要创建的所有邮件实用程序的主要位置。对于向导的其余部分,可以选择所提供的默认值。当出现询问是否在现有模板上创建插件的屏幕后,取消选中模板选项并且不要使用任何模板。
现在在 Package Explorer 中展开新建的项目,双击 META-INF 文件夹下的 MANIFEST.MF。
导航到 Dependencies 附签,如图 5 所示,然后将 com.ibm.notes.java.java.api 包添加到
dependencies。这样可以访问所有 Lotus Domino Java 后端类。
图 5. Dependencies 附签
通常,使用 Imported Packages 方法来定义依赖项。使用导入就意味着 OSGI 框架将解析包的导入内容和所需的类,而不是像本例这样必须指定特殊的包。如果重命名或删除一个指定包,则依赖项将被破坏,并且运行时将不解析类。另外,如果导入所有想要使用的包,则可以通过任何插件来公开它们。编写完插件代码之后,可以删除该依赖项,并且只导入同一个屏幕上所需的包。指定依赖项之后,就可以开始编写代码了。
扩展 CSI Views
通过向 views 工具栏添加新操作来扩展 CSI Views。在 Lotus Notes V8 Beta 中,该操作显示为带有文字
Run Mail Rule 的按钮,不过在发送产品中将显示正确图标。可以从邮件外观获取 Mail Rules 图标的屏幕截图并使用该符号。按下组合键
Alt + PrtSc 可以实现上述操作。将图标保存到图标文件夹,并将它命名为 mailrules.gif。这样该操作如图 6
所示。
图 6. Mail Rules 图标
为了显示该图标,向 Eclipse 操作集定义一个扩展。可以使用向导并添加操作集,或者只是将清单 1 中的代码复制到 plugin.xml。可能此时并没有创建
plugin.xml,因此应通过向导来创建它(或者使用 下载 部分中 ZIP
文件中的 plugin.xml)。第一个扩展是新建的操作集,它定义了菜单、工具栏路径、工具提示、图标以及被选中后希望调用的操作。下一个扩展将新操作集与
CSIViews 工具栏绑定。CSI Views 不必是公有 API,但是因为它们是作为 Eclipse 扩展公开的,所以可以编写它们。这就是
actionSetPartAssociations 扩展。通过指定带有 part ID(在其中显示 com.ibm.rcp.csiviews.CSIViewPart)的
action set ID(com.ibm.notes.mail.utils.actionSets)来绑定二者。这向 Eclipse
框架表明您希望操作集与 CSIViewPart 相关联,并显示带有该视图部分的改进产品。
清单 1. CSI Extension
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="com.ibm.notes.mail.utils.actionSet"
label="Mail Tools">
<menu
id="RunMailRules"
label="Run Mail Rules">
</menu>
<action
class="com.ibm.notes.mail.utils.actions.RunMailRules"
icon="icons/mailrules.gif"
id="com.ibm.notes.mail.utils.actions.RunMailRules"
label="&Run Mail Rules"
toolbarPath="actions/additions"
tooltip="Run Mail Rules"/>
</actionSet>
</extension>
<extension point="org.eclipse.ui.actionSetPartAssociations">
<actionSetPartAssociation
targetID="com.ibm.notes.mail.utils.actionSet">
<part id="com.ibm.rcp.csiviews.CSIViewPart" />
</actionSetPartAssociation>
</extension>
|
为 Java 后端类编写代码
创建了新的操作类之后,就拥有了逻辑执行切入点,那么下面开始开发执行操作的代码。RunMailRules 类包含一个 run()
方法;这就是单击按钮时调用代码的地方。因为将访问后端 Lotus Notes 对象(如数据库、文档和视图),并且因为调用 UI
线程,所以将在该方法中产生新线程。与所有对 Lotus Domino 对象的访问一样,需要通过调用 NotesThread.sinitThread()
来初始化线程。即需要在最后一个块中调用 NotesThread.stermThread()。
代码首先获取邮件数据库和该数据库中的所有文件夹和视图的列表。使用该列表来填充(对其执行邮件规则的)视图的下拉组合框。获取会话是本练习中最重要的部分;清单
2 中的代码展示了如何获取会话、数据库句柄以及视图和文件夹列表。
清单 2. 获取 Lotus Notes 会话
Session session = null;
try{
NotesThread.sinitThread();
session = NotesFactory.createSessionWithFullAccess();
DbDirectory dbdir = session.getDbDirectory(null);
Database mail = dbdir.openMailDatabase();
Vector views = mail.getViews();
Enumeration vEnum = views.elements();
…
View rules = mail.getView("(Rules)");
…
}finally{
NotesThread.stermThread();
|
出于对模板设计和所存储的数据的考虑,不得不对 Mail Rule 文档进行逆向工程,所以如果有一个类能够使用文档并创建各种规则元素作为
Java 对象的话,将是件不错的事情。该类对字段实现的详细内容进行抽象,而且使其在插件的其他部分中更具可读性。MailRule
对象包含了(Mail Rule 文档中的)操作、条件和异常的列表。因为所有的操作、条件和异常都来自于 Mail Rule 文档,所以使用
Document 对象来初始化对象。
采用易于进行扩展的方式来构造代码。就所期望的可扩展性对代码进行多次重构。新添操作、异常或布尔逻辑都是比较容易的事情。图 7 是整个项目的屏幕截图。
图 7. Mail Utility 项目
主要的实用程序包包含插件 Activator、主 Eclipse Job(当处理规则时,将显示在标准 Eclipse 过程对话框中)、Mail
Rule 操作(包含大部分规则逻辑)以及异常类(在某种条件下停止处理规则)。
我们打算将与模型相关的所有内容都放在 models 包中,而与对话框相关的所有类都放在 dialogs 包下。很多 Eclipse
示例将 content 和 label provider 类作为 dialogs 类中的子类进行显示,但是我们希望将它们提取到各自的文件中。
将插件部署到 Lotus Notes V8 客户机
下一步是将新建插件与特性和更新站点进行打包,从而将新建插件部署到客户机。Eclipse 将插件(或包)打包到 Eclipse
特性中。感谢 Eclipse 贡献者为上述操作提供了一些非常易于使用的向导。首先,创建一个引用新插件的特性。像前面所进行的操作那样创建新项目,只不过这次选择
Feature Project,如图 8 所示。
图 8. New Feature 向导
为了简单起见,新特性使用与插件名称一样的名称,只不过在末端包含单词 feature,例如 com.ibm.notes.mail.utils.feature。在下一个窗口中,从列表中选择插件并做好准备。如果创建了一些插件,则选择要包含在该特性中的插件。稍后您可以经常添加更多插件。
现在需要一个 Eclipse 更新站点,以便客户机安装新特性。在相同的 New Project 向导对话框(如图 8 所示)中,选择
Update Site Project。创建了更新站点之后,将特性添加到站点。site.xml 是基础,如清单 3 所示。
清单 3. Update site.xml
<?xml version="1.0" encoding="UTF-8"?>
<site>
<feature url="features/com.ibm.notes.mail.utils.feature_1.0.0.jar"
id="com.ibm.notes.mail.utils.feature" version="1.0.0"/>
</site>
|
单击 Build All 按钮之前,清理所有项目并重新构建二进制文件是个不错的主意。从 File 菜单选择 Project -
Clean。单击 Build All 按钮,站点已为部署做好准备。站点的 build 操作将生成一个特性和插件目录,该目录是存放已编译特性和插件的地方。现在已经拥有了插件、特性和
Eclipse 更新站点,那么惟一要做的事情就是在 Lotus Notes V8 用户界面中启动特性安装。
运行新的改进产品
到 Lotus Notes V8 Beta 为止,客户机尚没有用于安装新特性的 Eclipse 菜单选项。只要管理员没有禁用该偏好,就可以通过编辑
<notes directory>/framework/rcp 目录中的 plugin_customization.ini
来打开该选项。
将以下一行代码添加到 <notes directory>/framework/rcp/plugin_customization.ini
文件:
com.ibm.notes.branding/enable.update.ui=true 重新启动
Notes 客户机后,将看到新的菜单选项:File - Application - Install。这是用于安装特性的标准 Eclipse
接口。在向导的第一个窗口中,选择第二个选项(“Search for new features to install”)。单击 Next,将看到一个为刚刚创建的
Eclipse 更新站点指定位置的窗口。单击 Add Folder Location 按钮,然后导航到先前创建的包含 site.xml
文件的目录。窗口看起来与图 9 相似。
图 9. 安装 Feature
单击 Finish 并接受其余提示。将询问您是否希望安装插件,即使插件是未被签署的。出现这种情形是因为 Lotus Notes
有一个签名验证,在安装外来插件时将进行检查。由于您没有对插件进行签署,所以它们没有签名。一旦安装了新特性,就会要求您重新启动 Lotus
Notes。重新启动之后,新按钮将出现在所有邮件视图中。
此外,为 Lotus Notes V8 用户提供了基于 NSF 的更新站点。可以简单地将本文下载部分所示的
NSF 文件复制到 Lotus Notes 数据目录。打开数据库时,将看到要安装在标准 Eclipse 过程对话框中的 Mail
Tools 特性。完成安装之后,重新启动 Lotus Notes,然后可以使用操作。
结束语
本文演示了如何使用 Eclipse 来扩展 Lotus Notes 客户机。使用基本 Eclipse SWT 用户界面部件,创建了完全跨平台的问题解决方案。使用该方法意味着改进产品与
Lotus Notes NSF 和 NTF 分离;这表示您的代码可以安全升级到 Lotus Notes V8。最后,展示了如何在新插件模型中使用现有的
Domino Java API 技能。通过使用 Java 后端 API,可以容易地连接到 Lotus Notes/Domino
架构。利用 Eclipse 框架的灵活性和被证实的 Lotus Notes 应用程序所涉及的范围,本文展示了如何使用定制代码和插件方便地进行扩展。
下载
名字 |
大小 |
下载方法 |
mail_utils.nsf |
2816KB |
|
NotesMailUtils.zip |
54KB |
|
参考资料
学习
获得产品和技术
讨论
|