天天看點

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

本文介紹 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. 元件面闆
了解 Lotus Notes 中 Lotus Symphony 的可程式設計性

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

  • 屬性
    屬性 資料類型 命名空間 描述
    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. 複合應用示例
    了解 Lotus Notes 中 Lotus Symphony 的可程式設計性

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

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

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

圖 3. 複合應用示例
了解 Lotus Notes 中 Lotus Symphony 的可程式設計性

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. 運作效果
了解 Lotus Notes 中 Lotus Symphony 的可程式設計性

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/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/14751907/viewspace-404333/