23. 在LotusScript中利用檢視的合計功能求和
阿新 • • 發佈:2019-02-04
在關係型資料庫中,我們可以使用SQL語言中的SUM函式對某一列的結果求和。Notes因為基於的是非結構化的資料模型,動態地查詢文件集合,獲取它們的域值並且進行求和之類的運算,成本很高,效能會很差;所以Notes採取的是給靜態的檢視按需更新索引的方式。在檢視的列上,也提供了合計的功能。但是我們有時需要在程式裡獲取某個域值的加和。如果通過遍歷一個DocumentCollection或EntryCollection來手工加和,效率很低。我們可不可以在LotusScript裡利用檢視的合計功能呢?
檢視的合計值顯示在不同於一般文件的合計行上,因此不能通過View.GetFirstEntry之類的方法獲得。幸好Notes為我們提供了可以獲得包括分類、合計在內的各種ViewEntry的ViewNavigator。它有各種各樣的方法,可以在檢視的樹型結構中前進後退、上升下降,查詢和獲得我們需要的Entry,最後獲得合計列上的值。
%REM Function GetTotal Description: Use a viewNavigator to get the total number of a matched category Return the total number in a variant %END REM Public Function GetTotal(viewName As String, keys As Variant, colNum As Integer, dbPath As String)As Variant Dim s As New NotesSession Dim db As NotesDatabase Dim result As Variant If (dbPath="") Then Set db=s.Currentdatabase Else Set db=s.Getdatabase(s.Currentdatabase.Server, dbPath) End If If Not db.Isopen Then Exit Function End If Dim view As NotesView Set view=db.Getview(viewName) Dim nav As NotesViewNavigator Set nav=view.Createviewnav() Dim entry As NotesViewEntry Set entry=view.Getentrybykey(keys, True ) If entry Is Nothing Then Exit Function Dim entryCat As NotesViewEntry Set entryCat=nav.Getprevcategory(entry) GetTotal=entryCat.Columnvalues(colNum) End Function
函式接受的引數分別是要查詢的檢視名、關鍵字、合計所在的列的序號(從零開始)和資料庫路徑(如果不是當前資料庫)。