瞭解 Lotus Notes 中 Lotus Symphony 的可程式設計性

genusBIT發表於2008-07-18
本文介紹 Lotus Symphony 在 Lotus Notes V8 中對 Notes 可程式設計性做出的增強,其中包括對基於 Lotus Expeditor 的 Rich Client 程式設計模式的支援,對 Notes 複合應用的支援,對 LotusScript. 的支援。

基於 Eclipse 的 Lotus Notes V8 對傳統的 Notes 應用做出了一系列重大的增強,例如使用者介面和使用者體驗,協同和訊息機制,最時髦的程式設計模型等。Lotus Symphony(Notes V8.0 中稱為 IBM Lotus Productivity Tools,Notes V8.0.1 中稱為 Lotus Symphony,本文均以 Lotus Symphony 統一描述)就是其中的一個重大創舉,通過整合 Lotus Symphony,Notes 客戶端首次具備了辦公文件應用功能。通過對 Notes 程式設計模型的支援,開發人員可以方便地將 Lotus Symphony 進一步在 Notes 平臺基礎上作擴充套件,定製和整合。

Lotus Notes 客戶端和 Lotus Symphony

Lotus Notes V8 將所有傳統的 Notes 程式碼轉移到 Eclipse 環境中,這得益於 Eclipse 的基於外掛的開放技術。Notes V8 是建立在 Lotus Expeditor 的基礎之上的,Lotus Expeditor 是 IBM 統一的富客戶端平臺,同樣也是基於 Eclipse 的。瞭解最新 Lotus 產品系列的讀者一定已經注意到了,最新推出的一系列客戶端軟體,很多都是基於 Lotus Expeditor 的,例如 Lotus Sametime V7.5 和剛剛推出的 Lotus Symphony。正因為基於同樣的平臺,眾多客戶端應用將很容易的進行整合。Lotus Sametime 和 Lotus Symphony 都作為其中一個模組的方式出現在了 Notes 產品中。

Lotus Symphony 提供了一套基於開放原始碼,開放技術和開放文件標準的辦公文件應用,其中包括 Lotus Document,Lotus Spreadsheet,Lotus Presentation。Lotus Symphony 是對開放原始碼的 OpenOffice.org 的一種定製和擴充套件,在 OpenOffice.org 的基礎上,進一步引入了開放的 Eclipse 的外掛機制,兩者的結合完美的將 OpenOffice.org 的辦公文件應用和 Eclipse 的整合能力融合在了一起。正因為如此,Notes V8 才得以將傳統的 Notes 應用和 Lotus Symphony 應用整合為同一個產品。更多關於 Lotus Symphony 的技術細節,請參閱“瞭解 Lotus Symphony 的可程式設計性”。

可程式設計性歷來都是 Notes 的一個非常重要而且強大的功能,作為其中一個模組,毫無例外,Lotus Symphony 也針對 Notes 的可程式設計性特性做了相關支援。Notes V8 在傳統的可程式設計性功能的基礎上,採用業界最新的思想,進行了進一步的增強。瞭解關於 Notes V8 的可程式設計性,請參閱“Lotus Notes 8 Programmability”,該文完整的描述了 Notes 可程式設計性的功能。

基於 Lotus Symphony 自身的技術特性,Lotus Symphony 對 Notes 程式設計模型做了如下支援:

  • Composite Application 程式設計模型:Notes V8 中全新引入的程式設計模型,可以看作是 SOA 在客戶端的體現。簡而言之,複合應用可以通過介面操作的方式,方便的將各種元件整合在同一個使用者介面上展現給終端使用者。這一模式代表了整個客戶端可程式設計性的未來。Lotus Symphony 提供了一個預定義的複合應用元件,開發人員同樣可以通過 Eclipse 程式設計來訂製自己的 Lotus Symphony 元件。
  • Rich Client 程式設計模型:這一模式使得 Java 開發人員可以通過標準的 Eclipse 介面定義自己的富客戶端應用。更確切說,這是 Lotus Expeditor 定義的程式設計模型,Notes V8 完整繼承了這一能力。Lotus Symphony 提供了一系列的 Java API,透過這些 API 可以高度定製屬於自己的 Symphony 應用。
  • LotusScript. 程式設計:LotusScript. 是 Notes 開發人員中最受歡迎的開發語言。基於 OpenOffice.org 的自動化技術,Lotus Symphony 使得開發人員可以通過 LotusScript. 完全控制 Lotus Symphony,例如開啟或關閉文件,獲取或操縱文件裡的內容。

下面的內容將對這些特性做進一步闡述。


複合應用程式設計模型支援

複合應用是 SOA 框架中的一個重要的方面,其展現方式從 Portal 端延伸到客戶端。Lotus Notes V8 和 Lotus Expeditor 均有其相應的實現載體。Louts Notes V8 客戶端還為終端使用者提供了一個可選安裝的複合應用編輯器,使用者可以通過該編輯器用視覺化的方式建立自己的複合應用。Notes V8 中提供了諸多預定義的複合應用元件,每個元件對外暴露其支援的屬性(Property)和操作(Action),使用者根據業務需要通過複合應用編輯器將所需元件進行介面整合,並用託拽的方式在各組建的屬性和操作之間建立連線(Wire)。

在 Notes V8 中,這一模式的幾個主要概念總結如下:

  • 元件(Component):一個提供特定功能的模組,包含基於 NSF 的 Notes 元件和基於 Plug-in 的 Eclipse 的元件;
  • 屬性(Property):內部資料發生變化是元件所能發出的型別化資料;
  • 操作(Action):元件所能響應的操作,用於消費屬性;
  • 連線(Wire):連線屬性和操作,用於定義資料交換;
  • 複合應用編輯器:提供圖形化的方式來定義複合應用,包括介面佈局,元件間的連線;

Lotus Symphony 可以看作是基於 Eclipse 的一系列外掛。針對 Notes V8 的複合應用程式設計模型,開發人員或終端使用者有兩種方式去使用 Lotus Symphony:

  • 使用預定義的 Lotus Symphony 元件;
  • 通過 Java API 定製自己的 Eclipse 元件;

預定義的 Lotus Symphony 元件

從 Notes V8.0.1 開始,Lotus Symphony 提供了一個名為“Symphony view”的預定義複合應用元件。當開啟復合應用編輯器時,在元件皮膚上即可看到這一元件:


圖 1. 元件皮膚
圖 1. 元件皮膚

該元件提供了一組預定義的屬性和操作:

  • 屬性

    屬性 資料型別 名稱空間 描述
    SelectionChanged xsd:string http://www.w3.org/2001/XMLSchema 當前選擇的內容,當選擇發生變化時觸發
    FileSaved idt:url http://www.ibm.com/xmlns/prod/datatype 文件的地址,儲存時觸發,格式:“file:///c:/temp/1.odt”


  • 操作

    屬性 資料型別 名稱空間 描述
    LoadFile idt:url http://www.ibm.com/
    xmlns/prod/datatype
    載入指定地址的檔案,格式:“file:///c:/temp/1.odt”
    Insert xsd:string http://www.w3.org/2001/XMLSchema 在文件的當前滑鼠位置插入指定內容


  • 例項

    以下是基於這一元件所生成的一個複合應用示例。在這一應用中包含兩個複合應用元件。左邊的元件提供了一個檔案列表和待插入的示例內容,以及用來顯示文件儲存地址和選擇內容的區域。右邊的組建就是預定義的 Symphony 元件。當使用者雙擊檔案列表中的檔案時,文件被自動載入 Symphony 元件,當某示例內容被選擇時,該內容將被插入至文件當前滑鼠位置;當使用者通過選單或快捷鍵儲存文件時,文件的地址被自動顯示在左邊,當選擇發生變化時,選擇的內容將被自動顯示在左邊。



    圖 2. 複合應用示例
    圖 2. 複合應用示例


通過 Java API 定製自己的 Eclipse 元件

除了使用預定義的 Lotus Symphony 元件,開發人員同樣可以基於 Java API 來定義自己的複合應用元件。通過這一方式,開發人員可以靈活的定義特定的屬性和方法。這一過程實際上和建立基於 Eclipse 的外掛完全一致,開發人員只需要瞭解 Symphony Java API,這一部分將在下一章節介紹。關於如何開發基於 Eclipse 的複合應用元件,請參閱 Notes 複合應用網站。

這裡我們簡單列舉一個基於這一方式開發的例項。在這一例項中,上面的兩個元件既是大家熟悉的 Notes 聯絡人檢視,下面兩個元件中,左邊的是一個虛擬的文件庫,右邊的是一個定製的 Lotus Symphony 元件。該元件可以響應文件庫中模版檔案選擇的變化,以及將 Notes 聯絡人檢視中當前選擇的聯絡人的資訊自動寫入開啟的模版檔案中。值得注意的是,該 Lotus Symphony 元件還定義兩個自定義的按鈕,用於將該文件儲存和作為附件建立新的郵件。


圖 3. 複合應用示例
圖 3. 複合應用示例 

Rich Client 程式設計模型支援

Rich Client 程式設計模型為 Eclipse 開發人員定義了一套完整的框架和API來建立富客戶端應用。Lotus Symphony 和 Lotus Notes 本身即為典型的通過這一模型建立的應用。在富客戶端平臺的基礎上,Lotus Symphony 定義了一系列的 Java API,方便開發人員通過 Java 來擴充套件和定製 Lotus Symphony。這些 Java API 主要可以歸為以下幾類:

  • 將 Lotus Symphony 用作標準的 SWT 控制元件

    這一 API 集合將 Lotus Symphony 視作一個標準的 SWT 控制元件。這一方式為開發人員提供了一個最小粒度的開發物件。開發人員可以隨意建立自己的使用者介面來整合該控制元件。需要注意的是,使用這一控制元件時,Lotus Symphony 自帶的預設選單和工具欄等將無法訪問和使用,開發人員如需要可自行己定義。

  • 將 Lotus Symphony 用作 Eclipse 的 ViewPart

    這一 API 集合提供了一個包含 Lotus Symphony 的 ViewPart,這一 ViewPart 自帶預設的選單,工具條等。

  • 基於 W3C DOM API 方式訪問文件內容

    理論上,通過 UNO API 可以訪問任何 Lotus Symphony 文件中的內容,但這一方式通常過於複雜。學習 UNO API 的使用需要一個較長的學習曲線。基於簡化的考慮,針對 Lotus Document 應用中的典型物件,提供了一個基於 W3C DOM API 方式的訪問。

LotusScript. 程式設計支援

從 Lotus Notes V8.0.1 開始,Lotus Symphony 對 LotusScript. 開發人員提供了有限的支援來從 LotusScript. 環境中控制 Lotus Symphony。事實上,這一支援主要基於 OpenOffice.org 所提供的到 OLE 自動化物件的橋樑。每一個 UNO 物件均被包裝成 OLE 物件,可以通過標準的自動化 API 進行訪問。這意味著可以通過 OLE API 訪問幾乎所有的 Symphony 功能。同時,LotusScript. 同樣支援對 OLE 物件的訪問,所以在 LotusScript. 環境中,當直接呼叫 StarBasic 編寫的指令碼語言的時候,所有的功能都能夠被正常執行。

這一特性在一定程度上解決了 LotusScript. 環境中訪問和控制 Lotus Symphony 的問題。開發人員可以得到幾乎所有的 Lotus Symphony 提供的功能,這對那些具備 OpenOffice.org 開發經驗的人來說幾乎沒有任何障礙,但對於不具備這些知識的開發人員來講,即使支援這樣的使用方式,仍然需要學習 OpenOffice.org 相關的知識。

以下為一段典型程式碼和執行效果。這一例項開啟了一個文件,並在文件中插入特定的文字。

Sub Initialize
Dim objservicemanager As Variant
Dim objText As Variant
Dim args()

Set bjServiceManager = CreateObject("com.sun.star.ServiceManager")
Set bjCoreReflection= objServiceManager.
    createInstance("com.sun.star.reflection.CoreReflection") 
Set bjDesktop = objServiceManager.
    createInstance("com.sun.star.frame.Desktop")
‘the sample create a blank document, it is also possible to load from URL
Set bjDocument = objDesktop.
    loadComponentFromURL("private:factory/swriter", "_blank", 0, args)
Set bjText = objDocument.getText()
Set bjCursor = objText.createTextCursor()
objText.insertString objCursor, "JMP204", False
'more other calls to operate on the document model
‘dispose the document
 ‘objDocument.dispose
End Sub


圖 4. 執行效果
圖 4. 執行效果 

Notes 中的 Lotus Symphony SDK

在 Notes V8 安裝包之外,專門為 Lotus Symphony SDK 提供了一個可供下載的 WebKit。該軟體開發包可以被獨立地使用。開發包提供了完整的文件,API 參考資訊和例項。內容涵蓋從背景知識到開發部署等各個環節。

注意:為 Notes 提供的 Lotus Symphony SDK 和為 Lotus Symphony 產品提供的 Lotus Symphony SDK 並非完全一致。在 Notes 產品中,更強調和 Notes 應用的整合性。雖然大部分的核心程式碼一致,但由於版本上時間差的關係,兩者提供的 API 集合並不完全一致。

結束語

Lotus Notes V8 為 Notes 應用和辦公文件應用開啟了一扇全新的門。Lotus Symphony 可程式設計性功能豐富了 Notes 的應用程式開發模型,包括對複合應用的支援,對富客戶端程式設計的支援,以及對 LotusScript. 程式設計的支援。

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

相關文章