對 Lotus Notes 郵件模版進行二次開發的最佳實踐

genusBIT發表於2010-06-07

轉自http://www.ibm.com/developerworks/cn/lotus/notes-mail-template/

現有 IBM Lotus Domino/Notes 郵件模板簡介

模板概念

IBM Lotus Domino/Notes 應用包含一個或多個 Domino 資料庫。 Domino 資料庫儲存了該應用中的資料、邏輯關係和設計元素。模板則是一種包含了資料庫結構的檔案,是一個包含了資料庫設計元素的框架。它以 .ntf 作為其字尾名。通過使用模板,使用者可以很方便地在企業內部或某一範圍內確立 Domino/Notes 應用的設計標準,也可以很方便地維護同型別資料庫設計的一致性。IBM Lotus Domino 提供了一系列的模板以供使用者建立資料庫使用。同時,使用者也可以使用 Lotus Domino Designer 對模板進行定製。

本文中將主要討論其中的郵件模板,它提供在本地或 Domino 伺服器端傳送或接收電子郵件以及使用日曆進行行程安排等功能。當我們使用現有郵件模板建立一個新的郵件資料庫的時候,模板中的設計元素就會被拷貝到該郵件資料庫中。當然 , 我們也可以通過重新部署更新過的模板使郵件資料庫與當前指定的郵件模板保持一致。

已有 Domino/Notes 郵件模板介紹

使用者可以通過各種方式來訪問 Domino 郵件資料庫:Notes 客戶端、Web 瀏覽器、POP3 客戶端或者 IMAP 客戶端等。無論是用哪種訪問方式,Domino 郵件資料庫的結構都是一樣的,不同的是各種客戶端的展現機制。使用 Lotus Notes 客戶端的使用者使用標準 Notes 郵件模板就可獲取其所需功能。使用 Domino Web Access 或者 iNotes 客戶端的使用者則需要使用 Domino Web Access 郵件模板或 iNotes 郵件模板來建立自己的郵件資料庫。各個版本的 Domino/Notes 提供的郵件模板如表 1 所示:


表 1. 各個版本的 Domino/Notes 郵件模板
伺服器 釋出資訊 Notes 使用者 Web 使用者
Domino 8.x 伺服器 Domino 8.5.X mail85.ntf mail85.ntf
  Domino 8.0.X mail8.ntf mail8.ntf
Domino 7.x 伺服器   mail7.ntf dwa7.ntf
Domino 6.x 伺服器   mail6.ntf iNotes6.ntf

各 Domino/Notes 版本對不同郵件模板版本的支援

在實際的應用環境中很難保證 Lotus Notes 和 Domino 版本始終一致,所以瞭解各個 Lotus Domino/Notes 版本對不同版本的郵件模板的支援情況是必要的。在此主要針對標準郵件模板作一下介紹。


表 2. 各個版本的 Domino/Notes 郵件模板
對 Mail85.ntf 的支援        
  Notes 8.5.x 客戶端 Notes 8.x 客戶端 Notes 7.x 客戶端 Notes 6.x 客戶端
Domino 8.5.x 伺服器 支援 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 8.x 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 7.x 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 6.5.6 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
對 Mail8.ntf 的支援        
  Notes 8.5.x 客戶端 Notes 8.x 客戶端 Notes 7.x 客戶端 Notes 6.x 客戶端
Domino 8.5.x 伺服器 支援 支援 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 8.x 伺服器 支援 支援 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 7.x 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
Domino 6.5.6 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用 僅支援在升級過程中的使用
對 Mail7.ntf 和 dwa7.ntf 的支援        
  Notes 8.5.x 客戶端 Notes 8.x 客戶端 Notes 7.x 客戶端 Notes 6.x 客戶端
Domino 8.5.x 伺服器 支援 支援 支援 *
Domino 8.x 伺服器 支援 支援 支援 *
Domino 7.x 伺服器 支援 支援 支援 *
Domino 6.5.6 伺服器 僅支援在升級過程中的使用 僅支援在升級過程中的使用 * *
對 Mail6.ntf 的支援          
   Notes 8.5.x 客戶端 Notes 8.x 客戶端 Notes 7.x 客戶端 Notes 6.x 客戶端
Domino 8.5.x 伺服器 支援 支援 支援 支援
Domino 8.x 伺服器 支援 支援 支援 支援
Domino 7.x 伺服器 支援 支援 支援 支援
Domino 6.5.6 伺服器 支援 支援 支援 支援

注意:“僅支援在升級過程中的使用”表示該配置在伺服器和客戶端升級到新版本所需的時間之內是支援的。但不支援永遠使用該配置。使用該配置不會導致已知的嚴重的問題或者缺陷。但是,IBM Lotus 不會對該配置上產生的問題釋出補丁,因為該配置只會在升級過程中使用。

對於其他標註為 * 的部分,請參考關於具體版本支援的文件中的配置部分。


對現有模板進行二次開發的需求驅動有哪些?

雖然 Domino 系統提供的現有郵件模板已經具有了豐富的功能,使得終端使用者可以比較方便的管理郵件以實現協同工作。但是,各終端使用者都有其個性化的需求,需要定製或增加自己需要的設計元素,以增加終端使用者使用的便捷性,或實現某功能需求,或更好地將郵件系統和其他已有的應用系統進行整合,例如:

  • 終端使用者需要改變對 IBM Lotus Notes 客戶端或者 Domino Web Access 客戶端使用者介面風格。例如改變介面的顏色或佈局,新增或刪除按鈕等。
  • 對郵件本身資訊的發現和處理。這是企業資訊管理中很重要的一部分。將郵件資訊與日常的商務處理進行結合,對郵件資訊進行發掘利用,並與後臺各種資料庫應用伺服器進行連線,可以很大程度的增加 Domino 的應用價值。例如:
    • 對郵件進行分類和標記。使用者在日常工作過程中可能需要根據不同的條件對郵件進行分類,並對某一特定類別的郵件使用特有的圖示標記其狀態。這將在很大程度上幫助使用者管理和識別郵件。
    • 對郵件進行自定義的歸檔和恢復,以及對郵件資訊進行特定形式的搜尋,以達到對郵件資訊進行充分利用的目的。
    • 對郵件內容進行審計處理。
    • 將郵件與業務流程相結合。通過對郵件的處理進行業務的流轉,這也是現在郵件相關應用的一種趨勢。
  • 對於郵件處理過程中的多語言支援。郵件模板設計元素的定製必然會帶來多語言支援的問題。準確地識別使用者的語言環境並顯示相應的語言資訊,這也是使用者需求較多的一部分功能。
  • 使用者郵件操作的自動化處理。使用者需要自定義一些功能塊嵌入 Notes 郵件資料庫中,並希望這些功能能夠定時執行或及時被觸發。例如:使用者可能需要自動批量地進行郵件處理,以提高郵件處理效率;使用者希望能夠批量地刪除或備份具有某些特徵的郵件;使用者希望能夠對收到的郵件進行自動的分類儲存。

怎樣對現有模板進行二次開發

郵件資料庫的組織

郵件資料庫檔案 (.NSF) 由四個部分組成:設計元素、資料文件、檢視索引和全文索引。設計元素是指表單(Form)、檢視(View)、代理(Agent) 和資料夾(Folder)等等,它們構成了應用的基礎。資料文件(Documents)是使用者提交的資料資訊。形象來說,它就是使用者儲存在表單 (Form) 中的文件,資料庫檔案包容應用程式的資料,其結構由表單、域、資料夾、檢視及其他顯示功能部件(諸如導航器和資料庫圖示)組成。


圖 1. 郵件資料庫的組織
圖 1. 郵件資料庫的組織

郵件資料庫模板 (.NTF) 主要是指僅僅包含設計元素的郵件資料庫檔案。作為模板檔案,它可以被應用到終端使用者的郵件資料庫中。同一個組織的終端使用者可以共享一個郵件資料庫模板,也可以使用多個郵件資料庫模板,如不同部門使用不同的郵件資料庫模板。

設計元素簡介

下面對郵件資料庫中的主要設計元素進行介紹,它們之間的關係如圖 2 所示。


圖 2. 郵件資料庫的設計元素
圖 2. 郵件資料庫的設計元素
  1. 框架集(Frameset): 框架集是框架 (Frame) 的集合,使用者可以使用它在使用者的 Web 站點或者 Notes 資料庫中增加或者調整結構。
  2. 表單(Form):表單是用於在資料庫中輸入和檢視資訊的框架,郵件資料庫可以包括基於若干個表單建立的文件。
  3. 檢視(View):檢視是資料庫中的文件列表。基於所選擇的準則,可以顯示資料庫的文件子集,或者所有的文件。基於文件的內容可以進行分組和排序。
  4. 資料夾(Folder):資料夾在結構上類似於檢視,他們可以羅列文件,但是資料夾不具有選擇規則,而是由使用者來決定在資料夾中儲存的內容,可以設定成私有或者共享的。
  5. 頁面(Page):頁面是可以向終端使用者顯示資訊的設計元素。它類似於表單,只是它不能包含欄位或者子表單。
  6. 欄位(Field):欄位是表單上儲存資料的獨立元素。欄位可以確定單獨的文件所能夠包含的資料。文件中的每個欄位都可以儲存一種特定種類的資料。使用者通常需要輸入並且編輯欄位值。例如人名、註釋、電話號碼、日期或計算結果。
  7. 共享程式碼(Shared Code):是指能夠在資料庫之間進行共享的 Domino 程式碼和設計元素。它包括:
    1. 代理(Agent):能夠讓使用者在 Domino 中自動執行許多工。進行設定之後能夠在伺服器上基於日程或者在出現特定事件的時候自動執行。
    2. 大綱(Outlines):類似於影像對映和導航器,可以為使用者提供導航應用的方式。使用者在大綱源進行一次改變,每個使用大綱源的導航結構都會動態進行更新。大綱可導航到使用者資料庫的檢視和資料夾,或者與使用者應用以外的其他元素、URL 進行連結。
    3. 子表單(Subform):可以在多個表單中使用的表單水平片段。
    4. 共享欄位(Shared Fields):可以在不同的表單中使用,一旦改變,所有應用都相應改變。
    5. 操作(Action):可以為執行例行任務提供只需點選一次的快捷方式,可替代選單選擇。其中,可以為不能夠訪問 Notes 選單的 Web 使用者提供一種方式進行操作。操作能夠進行共享,可在檢視、子表單和表單上使用。
    6. 指令碼庫(Script. Library):存放共享程式碼的位置,可以選擇執行語言。
    7. 導航器(Navigator):作為影像映像出現在 Web 頁面上,導航器提供了圖形化的方式來讓使用者查詢文件或在開啟的資料庫中執行操作而不用開啟檢視。
  8. 共享資源(Shared Resources): 能夠在使用者資料庫之間共享的設計元素,有影像、檔案、小應用程式、資料連線、樣式表等。

每個資料庫都能夠包含它自己的共享程式碼和共享資源,使用者能夠在其他資料庫中訪問共享元素。共享元素可以讓使用者在應用中反覆應用資源,而只需要在一個標準為之對其進行維護。利用共享程式碼和資源,使用者還能夠使用一個資料庫集中儲存特定型別的元素。然後在其他資料庫中引用這些元素。


案例介紹

前面我們從理論上介紹瞭如何對郵件模板進行二次開發,下面我們結合實際案例對這一部內容進行進一步地介紹。我們知道,隨 Lotus Domino/Notes 一起釋出的模板主要提供對郵件資訊的管理。而在實際應用中,郵件資訊往往是和商業活動相關聯的。通過對郵件模板的定製,能夠更好地和商業活動相關聯。

下面我們介紹一個簡單的例子,考慮一個公司的法律部門,這個部門的員工經常需要處理與合同有關的郵件,而郵件可能來自於不同重要程度的客戶:VIP 客戶、重要客戶和普通客戶。對於來自不同級別客戶的郵件所採取的響應時間是不同的,需要有相應的優先處理級別。通過建立自定義操作,終端使用者可以標識郵件來自於哪個級別的客戶。通過使用後臺執行的代理,終端使用者可以定期收到關於現有郵件的統計資訊。通過建立分類清晰檢視,終端使用者則可以清楚地看到分類同時有層次關係的郵件。

建立自定義操作

在 Notes 客戶端中,終端使用者可以選擇在“操作”選單下提供的一些系統功能。通過二次開發,“自定義操作”可以新增到“操作”選單中。“自定義操作”用前面提到的代理來實現。代理可以用簡單的功能、公式、LotusScript. 或者 Java 進行程式設計,可以根據具體任務選擇最佳相應的語言和技術。

在 IBM Lotus Domino Designer 中,開啟郵件資料庫模板。單擊設計框架的“共享程式碼”“代理”,單擊“新建代理”按鈕。就可以建立一個新的代理。如圖 3,我們分別建立了“合同管理 \ 設定為 VIP 客戶”,“合同管理 \ 設定為重要客戶”和“合同管理 \ 設定為普通客戶”三個代理。這裡我們使用的反斜線是幫助建立二級操作。這三個代理同屬於一個一級操作“合同管理”。


圖 3. 使用 IBM Lotus Domino Designer 建立代理
圖 3. 使用 IBM Lotus Domino Designer 建立代理

在代理設計過程中,你需要指定代理名稱、共享方式等基本資訊。這些都比較容易理解。然而,選擇代理何時執行,怎樣執行以及怎麼樣處理物件是一個關鍵問題。通常代理可以“按事件”觸發,也可以“按日程安排”來觸發。建立自定義操作的代理,我們需要選擇“按事件”觸發。


表 3 “按事件”觸發使用的選項和注意事項。
選項 說明
“操作”選單選項
(Action menu selection)
使用者啟用的代理使用該選項,如果在 Web 上執行該代理時,使用 WebQuerySave 或者 WebQueryOpen 事件。
代理列表中選擇
(Agent list selection)
這項設定用於通過操作、按鈕、URL 或其他代理呼叫的代理,具有這項設定的代理不會出現在“操作”選單中。
新郵件到達前
(Before new mail arrives)
這項設定在郵件顯示在郵件資料庫之前用來處理郵件。 例如,移動新郵件到一特定的資料夾。
注意:一個郵件資料庫裡應至多有一個具有這項設定的代理。
新郵件到達後
(After new mail has arrived)
這項設定在郵件顯示在郵件資料庫之後用來處理郵件。 例如,回覆,轉發或者其他操作。
注意:一個郵件資料庫裡可以有多個具有這項設定的代理。
文件被建立或修改之後
(After documents are created or modified)
這項設定適合於用來處理新郵件或者更改的郵件的工作流任務。代理管理器會定期觸發這樣的代理在本地 Notes 客戶端或者伺服器端執行。
取決於伺服器的負載,代理的執行可能有 5 到 30 分鐘的延遲時間。
當文件被貼上時
(When documents are pasted)
當文件被貼上到郵件資料庫時需要修改時使用這項設定。
注意: 這個選項需要使用者觸發,不能在後臺執行。
伺服器啟動時
(When server starts)
具有這項設定的代理只能在伺服器啟動時被執行,其他時候都不會被執行。如果你希望代理不但在伺服器啟動時,而且在其他時候都被執行,可以使用代理列表中選擇選項,然後建立另外一個在伺服器啟動時被呼叫的代理。

在這裡,需要代理對終端使用者可見,同時由終端使用者選擇觸發,我們選擇“操作”選單選項。接下來,需要指定代理觸發時所採取的具體的動作。對於本列來說,我們選擇針對來自不同客戶的郵件可以進行不同的標記。在 _ViewIcon 欄位上,如果是來自於 VIP 客戶,標記 116(紫色圖示);如果是來自於重要客戶,標記 115(紅色圖示);如果是來自於重要客戶,標記 114(綠色圖示)。標記為紫色圖示的 LotusScript. 程式碼如下所示:

Sub Initialize
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)		
		Set itemA = doc.ReplaceItemValue( "_ViewIcon", 116 )		
		Call doc.Save( False, True )		
		Set doc = collection.GetNextDocument(doc)
	Wend
End Sub 

在 Notes 客戶端所產生自定義操作如圖 4 所示:


圖 4. 在 IBM Lotus Notes 中可以選擇的自定義操作
圖 4. 在 IBM Lotus Notes 中可以選擇的自定義操作

圖 5 是終端使用者對來自不同客戶的郵件進行標記後的結果。


圖 5. 郵件被標記後的結果
圖 5. 郵件被標記後的結果

建立分類豐富的檢視

當終端使用者對來自不同客戶的郵件進行標識後,分類豐富的檢視能夠更好地組織這些郵件。圖 6 中的“合同郵件”檢視就是一個這樣的檢視。 除了有不同顏色的圖示來標識郵件外,來自於不同級別客戶的郵件也被組織在不同的分割槽內。通過展開和摺疊相應的分割槽,可以給終端使用者不同的視角檢視郵件,使得他們可以專注於關心的郵件。


圖 6. “合同郵件”檢視
圖 6. “合同郵件”檢視

那麼如何實現這樣的檢視呢?

首先需要建立一個“合同郵件”檢視使其只選取那些使用者標識過的郵件,在“檢視選擇”指定如下公式:

SELECT _ViewIcon != ""

然後,增加兩個新列:“狀態列”和“( 狀態幫助列 )”。


圖 7. 設計“合同郵件”檢視
圖 7. 設計“合同郵件”檢視

“( 狀態幫助列 )”是一個隱藏的列,根據郵件的內部狀態計算出郵件的類別,同時給狀態列賦賦予相應的類別顯示名稱,如下所示。

DocumentStateSort := 0;

DEFAULT DocumentStateCategory := @If(
         _ViewIcon=116;
                @Do(@Set ("DocumentStateSort";1);"VIP客戶");
          _ViewIcon=115;
                @Do(@Set ("DocumentStateSort";2);"重要客戶");
         _ViewIcon=114;
                @Do(@Set ("DocumentStateSort";4);"普通客戶");
         @Do(@Set ("DocumentStateSort";5);"未知客戶")
         );

DocumentStateSort

“狀態”列的值很簡單,即是 DocumentStateCategory 。不過需要注意的是,此列需要設定 如下的選項。排序可以選擇“升序”或者“降序”。型別需要選擇“分類”。同時選中“將多值分開顯示成獨立的條目”。


圖 8. “狀態”列設定
圖 8. “狀態”列設定

建立後臺執行的代理

前面講述了自定義操作的代理,同時我們也可以使用後臺執行的代理來完成一些不需要終端使用者觸發的操作,如定期的傳送統計郵件。


表 4. 日程處理週期
選項 說明
每天多於一次 這項設定用來按時執行代理,一天若干次。單擊“日程安排”按鈕可以指定時間表。
每天一次 這項設定用來按時執行代理,一天一次。
每週一次 這項設定用來按時執行代理,一週一次。
每月一次 這項設定用來按時執行代理,一月一次。
從不執行 如果希望儲存代理但不希望在特殊情況(如通過另一個代理呼叫)以外的情況執行,可以使用這項設定。

這裡我們建立一個每月後臺執行一次的代理,以傳送對當月來自不同客戶郵件的統計資訊,郵件資訊如圖 9 所示。

Sub Initialize
    Dim NewUIWorkspace As New NotesUIWorkspace
    Dim NewNoteSession As New NotesSession
    Dim CurrentDB As NotesDatabase 
    Set CurrentDB = NewNoteSession.CurrentDatabase
    
    ‘建立新郵件
    Dim MailDoc As NotesDocument
    Set MailDoc = New NotesDocument(CurrentDB)
    MailDoc.form. = "Memo"
    MailDoc.SendTo = NewNoteSession.EffectiveUserName
    MailDoc.Subject = "月度統計"
    
    ‘建立郵件體
    Dim TableNotesRichTextItem As NotesRichTextItem
    Set TableNotesRichTextItem = MailDoc.CreateRichTextItem("Body")
    
    Dim columnHeaderStyle. As NotesRichTextStyle. Set columnHeaderStyle. = NewNoteSession.CreateRichTextStyle( )
    columnHeaderStyle.Bold = True
    columnHeaderStyle.FontSize =8
    columnHeaderStyle.NotesFont = TableNotesRichTextItem.GetNotesFont("Arial", True)
    
    ‘建立表格
    Dim i As Integer
    Dim columnStyles(0 To 4) As NotesRichTextParagraphStyle. For i = 0 To 4
        Set columnStyles(i) = NewNoteSession.CreateRichTextParagraphStyle. columnStyles(i).LeftMargin = 0
        columnStyles(i).FirstLineLeftMargin = 0
    Next
    columnStyles(0).RightMargin  =3 * RULER_ONE_CENTIMETER    
    columnStyles(1).RightMargin = 8 * RULER_ONE_CENTIMETER    
    columnStyles(2).RightMargin = 8 * RULER_ONE_CENTIMETER    
    columnStyles(3).RightMargin = 3 * RULER_ONE_CENTIMETER
    columnStyles(4).RightMargin = 3 * RULER_ONE_CENTIMETER
    
    Dim headerColor As NotesColorObject
    Dim dataColor As NotesColorObject
    Set headerColor = NewNoteSession.CreateColorObject
    Call headerColor.SetRGB(239,239,239)
    Set dataColor = NewNoteSession.CreateColorObject
    Call dataColor.SetRGB(255,255,255)
    
    Call TableNotesRichTextItem.AppendTable(1,5,,,columnStyles)
    
        ‘建立表格頭
    Dim TableNotesRichTextNavigator As NotesRichTextNavigator
    Set TableNotesRichTextNavigator = TableNotesRichTextItem.CreateNavigator()
    TableNotesRichTextNavigator.FindLastElement RTELEM_TYPE_TABLE
    
    Dim TableNotesRichTextTable As NotesRichTextTable
    Set TableNotesRichTextTable = TableNotesRichTextNavigator.GetElement
    TableNotesRichTextTable.Style. = TABLESTYLE_TOP
    TableNotesRichTextTable.SetColor headerColor
    TableNotesRichTextTable.SetAlternateColor dataColor
    
    TableNotesRichTextItem.AppendStyle. columnHeaderStyle. TableNotesRichTextNavigator.FindNextElement RTELEM_TYPE_TABLECELL
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    TableNotesRichTextItem.AppendText "客戶型別"
    TableNotesRichTextItem.EndInsert
    TableNotesRichTextNavigator.FindNextElement
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    TableNotesRichTextItem.AppendText "發件人"
    TableNotesRichTextItem.EndInsert
    TableNotesRichTextNavigator.FindNextElement
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    TableNotesRichTextItem.AppendText "主題"
    TableNotesRichTextItem.EndInsert
    TableNotesRichTextNavigator.FindNextElement
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    TableNotesRichTextItem.AppendText "日期"
    TableNotesRichTextItem.EndInsert
    TableNotesRichTextNavigator.FindNextElement
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    TableNotesRichTextItem.AppendText "郵件連結"
    TableNotesRichTextItem.EndInsert
    
    ‘查詢“合同郵件”檢視
    Dim ContractNotesView As NotesView
    Set ContractNotesView = CurrentDB.GetView("合同郵件") 
    
    Dim ContractNotesViewNavigator As NotesViewNavigator
    Set ContractNotesViewNavigator = ContractNotesView.CreateViewNav
    Dim ContractNotesViewEntry As NotesViewEntry
    Set ContractNotesViewEntry = ContractNotesViewNavigator.GetFirstDocument
    
    Dim dataStyle. As NotesRichTextStyle. Set dataStyle. = NewNoteSession.CreateRichTextStyle()
    dataStyle.Bold = False
    dataStyle.FontSize = 10
    
    TableNotesRichTextNavigator.FindNextElement 
    TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator
    Call TableNotesRichTextItem.AppendStyle(dataStyle)    
    TableNotesRichTextItem.EndInsert
    
'計算上個月
    Dim lastMonth As New NotesDateTime( "" )
    lastMonth.LSLocalTime = Now    
    Call lastMonth.AdjustMonth( -1 ) 
    
    While Not ContractNotesViewEntry Is Nothing
        Dim dateTime As NotesDateTime
        Dim item As NotesItem    
        Set dateTime = ContractNotesViewEntry.Document
		    .GetItemValueDateTimeArray("PostedDate")(0)    
        
        If (dateTime.GMTTime>lastMonth.GMTTime) Then
            
            ‘增加一行
            Call TableNotesRichTextTable.AddRow(1)
            
            TableNotesRichTextNavigator.FindNextElement
            TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator  
            
            Dim MailType As String 
            Dim MailTypeText As String
            MailType = ContractNotesViewEntry.Document.GetItemValue("_ViewIcon")(0)
            If MailType = "114" Then
                MailTypeText =  "普通客戶"
            Elseif MailType = "115" Then
                MailTypeText =  "重要客戶"
            Elseif MailType = "116" Then
                MailTypeText =  "VIP客戶"            
            End If
            
            TableNotesRichTextItem.AppendText MailTypeText
            TableNotesRichTextItem.EndInsert
            
            TableNotesRichTextNavigator.FindNextElement
            TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator  
            TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_
			    .GetItemValue("From")(0)
            TableNotesRichTextItem.EndInsert
            
            TableNotesRichTextNavigator.FindNextElement
            TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator  
            TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_
			    .GetItemValue("Subject")(0)
            TableNotesRichTextItem.EndInsert
            
            TableNotesRichTextNavigator.FindNextElement
            TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator     
            TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_
			    .GetItemValue("PostedDate")(0)
            TableNotesRichTextItem.EndInsert
            ‘新增文件連結
            TableNotesRichTextNavigator.FindNextElement
            TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator  
            Call TableNotesRichTextItem.AppendDocLink ( ContractNotesViewEntry.Document,_
			    ContractNotesViewEntry.Document.GetItemValue("Subject")(0))
            TableNotesRichTextItem.EndInsert 
        End If 
        
        Set ContractNotesViewEntry = ContractNotesViewNavigator_
		    .GetNextDocument(ContractNotesViewEntry)  
    Wend
    
    Call   MailDoc.Send(False)    
    
End Sub


圖 9. 月度統計郵件
圖 9. 月度統計郵件

新增使用者定義的圖示

前面我們講到了對 _ViewIcon 欄位進行賦值,相應圖示所對應的數字編號可以由下表查到。


圖 10. 系統圖示對照表
圖 10. 系統圖示對照表

如果發現所提供的系統圖示不能滿足當前的需求,你可以增加使用者自定義圖示到郵件模板中。這樣,當使用如下程式碼時就可以使用自定義圖示來標識郵件:

…
    Set itemA = doc.ReplaceItemValue( "_ViewIcon", "accept.gif" ) 	
…

需要注意的是儘量不要在圖示名稱中使用下劃線,在一些系統中會引起這樣的圖示不可見。

除錯代理以提高問題修復的效率

在使用代理所提供豐富功能的同時,需要使用最有效的工具來除錯代理以提高問題修復的效率。可以使用的工具包括:

  • 代理日誌。可以檢視代理日誌以獲得關於代理的關鍵資訊,例如代理啟動的最後時間和日期、有多少文件經過了處理、程式碼執行的型別 ( 如 LotusScript) 以及代理完成的最後時間和日期等。要想檢視代理的代理日誌,請在 Lotus Domino Designer 中選定代理並從選單中依次選擇“代理”“日誌”。
  • LotusScript. 除錯程式。使用 LotusScript. 除錯程式除錯用 LotusScript. 編寫的代理,它允許跟蹤代理過程及代理範圍內的變數值和物件。要想使用 LotusScript. 除錯程式,請從選單中依次選定檔案工具  除錯 LotusScript,並執行代理。
  • 伺服器控制檯除錯。Domino Server 控制檯提供了 3 種命令,Tell Amgr Schedule 、Tell Amgr Status 和 Tell Amgr Debug,他們可以顯示預定在當天執行所有代理的時間安排表、Agent Manager 代理佇列狀態和代理除錯設定狀態的資訊。
  • NotesLog 類。 NotesLog 類是方便且動能強大的工具類、用來跟蹤過程,並報告發生在使用 LotusScript. 編寫的代理和後臺工作的 Java 代理中的活動資訊。可以在代理執行時列印除錯資訊。如果使用 LotusScript. 或 Java 代理,就可以在 Notes Log 資料庫或檔案中記錄日誌資訊。

小結

本文講述了對 IBM Lotus Domino/Notes 中的郵件模板進行二次開發的相關經驗。這裡的案例只是基於一些簡單的需求,通過這些案例,我們希望能夠達到舉一反三、拋磚引玉的目的。在實際環境中,使用者可能有特定的需求,可以針對實際情況對郵件模板進行定製,從而來實踐和優化這些經驗。

 

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

相關文章