Lotus Notes應用中多頁文本的處理
發表于:2007-07-02來源:作者:點擊數:
標簽:
日常辦公應用中,大量的文檔處理不可避免要碰到多頁格式文本,而在以文檔為主要處理對象的應用程序里,也會碰到這一問題。LotusNotes的應用程序中,表單是生成文檔的模板,如果要在文檔中增加表格行,就必須動態改變表單,所以在LotusNotes中實現格式文檔的多
日常辦公應用中,大量的文檔處理不可避免要碰到多頁格式文本,而在以文檔為主要處理對象的應用程序里,也會碰到這一問題。Lotus Notes的應用程序中,表單是生成文檔的模板,如果要在文檔中增加表格行,就必須動態改變表單,所以在Lotus Notes中實現格式文檔的多頁顯示仍有其實用意義。
Lotus Domino/Notes是Lotus公司推出的群件系統。通過Lotus Notes的支持,Domino能夠為Inte
.net/Intranet用戶提供強大的工作流、消息傳遞、協同計算、信息檢索和信息發布等應用。目前,已經有越來越多的公司企業、政府機關使用Lotus Domino/Notes作為協同工作平臺,有效地實現了辦公自動化。
多頁文本的顯示問題
在辦公應用中,大量的文檔處理不可避免要碰到多頁格式文本。例如:合同的正本有相應的幅面尺寸規定,一張合同只能輸入有限的信息量,因此會碰到一個合同里的交易產品種類數量過多,必須用多頁文本顯示。在以文檔為主要處理對象的應用程序里,也會碰到這一問題,但由于文檔在電腦中不受紙面的限制,可以通過對表格增行以得到足夠的空間,這樣即節省了存儲空間,山可不重復存儲單據的頭信息。
Lotus Notes的應用程序中,表單是生成文檔的模板,如果要在文檔中增加表格行,就必須動態改變表單。因為Lotus Notes應用程序中的表單是靜態的,故動態增刪表格行不太方便。另外,考慮到
網絡普及的今天仍然脫離不了必要的紙面憑證,我們有時仍需打印出大量的文件,所以在Lotus Notes中實現格式文檔的多頁顯示仍有其實用意義。
實現文檔的多頁顯示的前提是:在信息量超過一個表單頁面所能顯示的信息的時候,能夠產生下一頁,并將文檔的上一頁的頭信息內容復制到當前頁(以一個合同為例,合同的供方及相關信息、需方及相關信息、簽訂時間、合同號、合同細則都屬于頭信息,對于一次交易而言,每頁合同的這些信息應該相同),同時能增加當前頁的頁碼,并保證一次交易中只有一個惟一標識(通??捎煤贤枺?,以確保在瀏覽上下頁時可以打開正確的文檔。
實現多頁文本的顯示
現假設合同表單域名為“Contract”,頁碼域名為“pageNo”,頁數域名為“pages”,合同號域名為“contractNo”。
為了保證填寫下一張頁面時,能得到上一張頁面的值,必須在“Contract”表單的屬性里選擇“公式繼承選定文檔的數值”。這里最關鍵的是要繼承合同號、頁碼和頁數信息。為了在新的頁面里得到上述信息的正確值,還應再在上述域的缺省值里加上一些公式。在“contractNo”域里的缺省值為:contractNo??梢栽獠粍拥匕焉弦豁摰暮贤柨截惖叫碌捻撁?,以保證是同一筆交易。在“pageNo”域里的缺省值為:
@if(@environment("isNext")="True";
@do(@environment("isNext";"");pageNo+1);1)。
上面的公式可以辨別當前是第一頁還是繼續填寫的頁,其中“pages”域里的缺省值為pageNo。
需要注意的是,雖然繼續填寫的新頁的頁數已經增加了,但是并沒有改變前面所填頁面上的頁數值。從符合邏輯的角度來說,前面已填寫頁面的頁數,應該在最后所有頁面填完之后才添加上去,所以在新填寫的頁面未保存時不能將頁數統一為新頁上的頁數。
在“繼續填寫下一頁”按鈕按下的時候,執行的操作包括兩個:保存并關閉當前頁面和打開新的頁面。這里采用Lotus Script編寫代碼,詳細代碼如下:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As NotesSession
Set uidoc = workspace.CurrentDocument
If uidoc.editmode=True Then
Call uidoc.save
End If
Call session.SetEnvironmentVar("isNext","True")
@#設置用于區分是否下一頁的標志
Call uidoc.close
Call workspace.ComposeDocument("","","Contract")
這里在保存的時候還要保證某些信息(如頁數)在該筆交易下的所有頁面保持同步。這就需要在保存完當前頁面后修改其他頁面的相應信息。這些操作的代碼可以在合同表單的“postsave”事件里寫。具體代碼如下:
Sub Postsave(Source As Notesuidocument)
Dim session As New notessession
Dim db As notesdatabase
Dim do
clearcase/" target="_blank" >ccol As notesdocumentcollection
Dim datetime As notesdatetime
Dim doc As notesdocument
Set db=session.curren
tdatabase
formsearch$="form=""Contract""&&contractNo="""+source.document.contractN o(0)+""""
Set doccol=db.search(formsearch$,datetime,0)
If doccol.count>0 Then
For i=1 To doccol.count
If i=1 Then
Set doc=doccol.getfirstdocument
Else
Set doc=doccol.getnextdocument(doc)
End If
If doc.universalid<>source.document.universalid Then
doc.pages=source.document.pages(0)
@#可以設置其他需要字段的值
Call doc.save(True,False)
@#使之與所有頁面統一
End If
Next
End If
End Sub
現在,多頁文檔已經建立好了,還需要對它進行瀏覽。瀏覽的方式可以為“上下翻頁式”或“到指定頁式”,兩者原理是一樣的,這里以瀏覽下一頁為例加以說明。
首先,創建一個按鈕“瀏覽下一頁”,并在按鈕的click事件里寫以下Lotus Script代碼:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim doccol As NotesDocumentCollection
Dim datetime As Notesdatetime
Set uidoc=workspace.CurrentDocument
Set db=session.currentdatabase
SearchFormula="Form=""Contract""&&contractNo="""+uidoc.document.contract
No(0)+"""&&p ageNo="""+Cstr(uidoc.document.pageNo(0)+1)+"""" @#可以指定任意頁
If uidoc.editmode=True Then
Call uidoc.save
End If
Call uidoc.close
Set doccol= db.search(SearchFormula,datetime,0)
Set doc=doccol.getfirstDocument
Set uidoc=workspace.EditDocument( False , doc)
至此,多頁文本的創建與瀏覽已經介紹完了,但是考慮到有刪除部分頁的可能,所以對于刪除指定頁的處理也是必需的。刪除指定頁的基本過程應包括:刪除指定頁的文檔、查找所有該交易的文檔、修改這些文檔的頁數域和修改頁碼域值大于刪除頁頁碼的文檔頁碼域。
以下是實現這一過程的Lotus Script函數代理:
Function deletedocument(doc As notesdocument)
Dim session As New notessession
Dim db As notesdatabase
Dim doccol As notesdocumentcollection
Dim datetime As notesdatetime
Set db=session.currentdatabase
contractno$=doc.contractNo(0)
pageno=doc.pageNo(0)
If doc.remove(0) Then
formsearch="form=""contract""&&contractNo=""
"+contractno$+""""
Set doccol=db.search(formsearch$,datetime,0)
For i=1 To doccol.count
If i=1 Then
Set doc=doccol.getfirstdocument
Else
Set doc=doccol.getnextdocument(doc)
End If
doc.pages=doc.pages(0)-1
If doc.pageNo(0)>pageno Then
doc.pageNo=doc.pageNo(0)-1
End If
Call doc.save(True,False)
Next
End If
End Function
以上是在Lotus Notes應用中,對多頁文本的一種處理方法,筆者希望讀者在實際應用
開發中靈活使用。
原文轉自:http://www.kjueaiud.com