使用 Eclipse 擴展 IBM Lotus Notes V8 郵件

在 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 對話框
Run Mail Rules 對話框

 

該對話框是一個基於 Eclipse SWT 的基本對話框,它使用 SWT GridLayout 來定義如何在屏幕上確定不同 UI 元素的位置。

單擊 Run 按鈕後,將顯示標準的 Eclipse 過程對話框,參見圖 2。單擊 Run in Background 按鈕,可以在後臺運行該對話框。如果已打開在其上運行規則的視圖,那麼在完成操作後按 F9 來刷新視圖。顯而易見,能夠對該工具進行擴展,以便在完成郵件規則操作之後刷新當前屏幕。


圖 2. Run Mail Rules Job 過程
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 嚮導
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 附籤
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 圖標
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 項目
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 嚮導
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
安裝 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 應用程序所涉及的範圍,本文展示瞭如何使用定製代碼和插件方便地進行擴展。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章