作者:李 偉, 軟體工程師, IBM
原文連結:http://www.ibm.com/developerworks/cn/lotus/notes-plugindev/index.html?ca=drs-cn-0831#main
簡介
衆所周知,Lotus Notes V8 以後的各個版本都是基于強大的托管客戶機軟體平台 Lotus Expeditor 開發而成的,而 Lotus Expeditor 擴充了 Eclipse,是基于插件的架構,這也使得 Lotus Notes 具有良好的可擴充性。Lotus Notes 發展到今天已經成為一個非常強大的內建了 Web 2.0 功能特性的協作辦公軟體。
本文通過幾個 Lotus Notes 插件的開發介紹,深入淺出的講解如何基于 Lotus Notes 平台,開發最常用的 Notes 插件。進而增強 Lotus Notes 的協作能力,滿足使用者在工作中的實際需要。
![]() |
Sender Analystics 插件開發
項目簡介
該插件通過 Email 位址來分析發信人的資訊。當使用者收到一個陌生人的來信,準備進一步了解該發信人的資訊時,這個插件特别有用。
擴充實作
如清單 1 所示,Sender Analystics 插件擴充了 Eclipse 平台的 org.eclipse.ui.popupMenus 擴充點。請注意 objectClass 的值是 com.ibm.rcp.realtime.livenames.LiveNameSelection,當您在 Lotus Notes 中選擇一封 Email 或者一個對象中包含了 Sametime 的 Live Name 資訊,其視圖彈出菜單中将顯示該擴充的菜單項。
清單 1. Plugin.xml |
當 ObjectClass 是 LiveNameSelection 對象的時候,在 Action 的 run 方法裡面,我們能夠拿到 com.ibm.rcp.realtime.livenames.LiveName 對象資訊。在 Sametime Javadoc 文檔中,我們知道 LiveName 有以下一些方法,可以擷取發信人的相關資訊。如表 1 所示,詳情請下載下傳 Lotus Sametime SDK 并參考有關文檔。
java.lang.String | getCommunityId() Returns the ID of the community that this person belongs to. |
java.lang.String | getContactId() Returns the person's contact ID. |
java.lang.String | getDisplayName() Returns the person's display name. |
java.lang.String | getId() Returns the person's unique ID. |
java.lang.String | getName() Returns the persons username. |
int | getStatus() Returns the person's status, one of the STATUS_xxx codes defined in this interface. |
org.eclipse.swt.graphics.Image | getStatusImage() Returns the image displayed for the person's status. |
java.lang.String | getStatusMessage() Returns the person's status message. |
在 Sender Analystic 插件開發中,我們通過 LiveName 對象拿到了發信人的 Email 位址資訊。如清單 2 所示:
清單 2. Action 的 run 方法 |
接下來,程式調用 SenderAnalyzerHelper 輔助類的 launchURLasEmbed 方法,并根據生成的 URL(本插件應用發信人的 Email 資訊構造一個 myfreeemailsearch 網站的 URL 請求)啟動 Lotus Notes 嵌入的浏覽器打開 Email 查詢頁面。如清單 3 所示,關于該方法的實作邏輯,請參考 Lotus Expeditor 有關文檔。
清單 3. launchURLasEmbed 方法 |
因為 Sender Analystics 需要啟動 Lotus 内部的浏覽器,是以我們需要在 plugin.xml 加入如下的依賴插件。如圖 1 所示:
圖 1. 在 plugin.xml 中加入依賴插件圖 2 顯示了 Sender Analystics 插件的運作效果。
圖 2. Sender Analystics 插件的運作效果通過本插件的相關介紹,讀者可以開發基于 Sametime 的 Notes 插件。
Driving Direction 插件開發
項目簡介
本插件的主要目地是管理使用者的旅行路線,啟用 Google Maps 來顯示旅行路線資訊。
擴充實作
如圖 3 所示,Driving Direction 插件擴充了如下的擴充點。讀者可能對 org.eclipse.ui.views 并不陌生,插件擴充了 Lotus Expeditor 所提供的 com.ibm.rcp.ui.shelfViews 擴充點。該擴充點使得 view 能夠和 Lotus Notes 的 Sametime 插件,Activity 插件一樣顯示在 shelfViews 區域,如圖 4 所示。
圖 3. Extension對該擴充點的描述如下:(更多的資訊,請參考 Lotus® Expeditor 資訊中心的文檔)。
id | id 屬性唯一辨別該 shelf 視圖,也就是說,如果該 id 被使用了多次,隻會有一個視圖被成功地注冊。 |
view | View 屬性的值和所貢獻視圖的 id 是一緻的(本插件中是 traffic view 的 id) |
region | region 屬性是一種可選的方式用以描述視圖顯示在 sidebar 中的那個區域。其有三種可能的值 “TOP” ,“MIDDLE” 和“BOTTOM”。如果許多視圖的該選項值相同的話,視圖顯示的順序和其被加載的順序是一緻的。預設值是“BOTTOM” |
page | page 屬性描述該視圖屬于那個 sidebar, 對于 Lotus® Expeditor 而言,該值是"RIGHT" |
showTitle | showTitle 屬性是 bool 類型,其值決定是否顯示标題欄 |
在圖 4 所示的 Driving Direction 插件中,點選 Open 按鈕會打開 Lotus Notes 的 preference 頁面(如圖 5 所示),這個功能會被經常用到,請見清單 4。preference 頁面主要是用來管理插件的一些配置選項資訊。在本例中,用其管理旅行路線資訊。
清單 4. 打開 Notes 的 preference 頁面 |
清單 4 中,com.ibm.lotus.openntf.traffic.ui.trafficanalyzer 是您定義的 preference page 的 id 屬性值。
圖 5. Traffic Routes Preferences通過本插件的介紹,讀者就可以輕松的開發一個可以放在 shelfView 裡面顯示的 Eclipse 視圖插件。
Date Recognizer 插件開發
項目簡介
Date Recognizer 插件用來識别 Notes 文檔裡面的日期,并根據識别出來的日期觸發動作顯示目前的 Calendar 資訊。
擴充實作
和本文第一個插件類似,Date Recognizer 擴充了 org.eclipse.ui.popupMenus 擴充點,不同的是,ObjectClass 的屬性值是 org.eclipse.jface.text.ITextSelection (當我們在 Notes 文檔中,選中一段文字才能激活插件的 action)如清單 5 所示。
清單 5. Plugin.xmlDate Recognizer 插件中如何識别日期是一個非常重要的算法問題。通常我們都用正規表達式。但時間格式的複雜性,使得難以有一個完整的正規表達式處理所有可能的情況。在清單 6 中給出了本插件的算法,它結合正規表達式能夠識别出 Notes 中常用的諸如:MM/DD/YYYY,March/Mar. Day, Year, 和 Year ? Month? Day 等日期格式。(其中‘?’是某一給定特殊的分隔符,比如 . / _- 等)如果字元串中沒有合法的日期,本例中,将建立一個 Date 對象作為預設值。
清單 6. 解析算法 |
圖 6 顯示了如何激活 Date Recognizer 插件。 圖 7 給出了 Calendar 資訊。日期被識别出來并指派給了 Calendar 元件。
圖 6. 啟動插件通過 Date Recognizer 插件的學習,開發者可以輕松的向 Notes 文檔的右鍵菜單中貢獻插件。
不僅如此,Eclipse 的諸多擴充點都可以在 Lotus Notes 中擴充應用。Lotus Expeditor 提供的 Launcher,Search Bar 等擴充點,請參考
Lotus Notes 8 的擴充與程式設計 ”一文。
![]() |
如何安裝 Lotus Notes 插件
有兩種常見的方式用以安裝 Notes 插件,一種就是我們常見的 update site 方式。在 Lotus Notes 中,預設條件下 , 這個功能是不被支援的。
我們需要在 C:\Lotus\notes\framework\rcp (C:\Lotus\notes 是我的 Notes 的安裝目錄,開發者請注意,如果在安裝目錄中有空格,比如 notes 的預設安裝目錄 C:\Program files\ 在 debug 環境下會導緻類加載異常)目錄下面的 plugin_customization.ini 檔案内加入 com.ibm.notes.branding/enable.update.ui=true 一行語句,那麼當您重新啟動 Notes 的時候,Notes 就啟動 update site 的功能了。如圖 9 所示:
圖 8. 啟動 update site 功能Notes 插件安裝的另一種方式是 Lotus Notes 8.5.1 所提供的 widget 方式。最終插件會被包裝成 widget 來安裝。和第一種方式相比較,這種方式的好處之一就是不用去修改配置檔案。然而這種安裝方式最大的好處就是靈活,非常容易共享。開發者開發一個 Notes 插件并開發一個遠端的更新站點(也可以自己下載下傳一個 Apache http server, 把本地的更新站點簡單的放到 C:\Program Files\Apache Software Foundation\Apache2.2\
htdocs目錄下面就成功了)然後通過 Notes widget 的向導逐漸安裝你的插件。如圖 10 所示:
圖 9. Start Configuring Widgets最終在 Notes 的 My Widget 裡面生成類似于普通 widget 的插件。如圖 11 所示:
圖 11. Widget 插件開發者可以用 Email 方式分享此插件,收信人隻要在 Notes 裡進行簡單的拖拽就能成功的安裝此插件。開發者也可以點選 Remove 按鈕解除安裝該插件。不過不管安裝或解除安裝插件,都需要重新啟動一次 Notes。
![]() |
總結
本文通過對三個 Lotus Notes 插件項目的介紹,以及對其所涉及的擴充點,實作過程中的重要算法等的講解會幫助開發者快速上手,開發 Lotus Notes 中最常見的插件。并介紹了兩種常見的釋出方式,如果使用者安裝了 Lotus Notes 8.5.1 ,Widget 方式的插件釋出極具誘惑。
希望讀者能夠從本文中獲益,快速的建構、釋出您自己的基于 Lotus Notes 的插件項目。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-613811/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/14751907/viewspace-613811/