擴充套件IBM Lotus Notes V8側欄和工具欄

genusBIT發表於2008-08-19

IBM Lotus Notes V8 的新架構為擴充套件和定製使用者體驗提供了很多新方法。本文著眼於該環境中的兩個位置,側欄和工具欄,並討論如何通過使用 Eclipse 外掛來新增功能。

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. 作為 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 文字框中輸入以下引數(注意:這些引數都來自 \rcp\eclipse\plugins\com.ibm.rcp.base_\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 安全性,需要對兩行程式碼解除註釋。在 \framework\shared\eclipse\plugins\com.ibm.notes.branding_3.0.0.\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 應該可以提供一個很好的始點。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-430007/,如需轉載,請註明出處,否則將追究法律責任。

相關文章