Lotus Notes中文档查询的研究与实践
生活随笔
收集整理的這篇文章主要介紹了
Lotus Notes中文档查询的研究与实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、引言
近幾年,網絡技術得到飛速的發展,由此帶動其它領域的相應快速發展,如WWW技術、辦公自動化技術等,這些技術把以計算機網絡為傳輸手段的信息交換技術大大向前推進一步,使人們收集、傳輸和共享信息的方式更加豐富多彩,由此對信息存儲、共享和檢索技術的要求進一步提高。
Lotus Notes/Domino是一種基于Internet/Intranet技術為構架的群件系統,它的主要功能是為各種不同類型的企業構造其Intranet提供全面的解決方案,是構造企業信息網主要工具之一。它的核心包括文檔管理技術、郵件系統、文件檢索技術、Web技術和復制技術,這些技術代表了當今信息領域的主流技術。LotusNotes/Domino還能使系統同時具有Client/Server和Browser/Server雙重結構,使它更具生命力。信息檢索技術作為 LotusNotes/Domino的一個主要技術,為用戶提供了包括全文檢索、按關鍵字查詢、視圖和文件夾等多種方式, 本文結合在實際開發中的經驗體會,對Notes應用中文檔查詢進行討論。
二、文檔的查詢
在LotusNotes中,信息是以文檔的形式保存在數據庫中的,文檔是以非結構的形式存放的,一個文檔相當于關系型數據庫中的一個記錄。 在NOTES應用中我們經常要編寫許多類似于傳統數據庫應用程序開發系統中的查詢和報告, 以便把用戶所關心的信息展現出來.主要有以下幾種方式:
1. 視圖
視圖是 LotusNotes中文檔的主要瀏覽窗口,每一視圖都包含符合一定條件的文檔。當一個視圖的選擇條件給定以后,通過該視圖所看到的文檔就是符合條件的文檔,如某一視圖的選擇條件為:Select form="請假單"; 則打開該視圖后,我們所看到的文檔都是請假單。視圖除了有選擇條件外,還可以按不同的特性將文檔進行分類和排序,使得我們可以及其快捷地導航到要查找的文檔。對于簡單的查詢,可以不編寫任何程序,而通過把視圖按合理的方式進行分類和排序就可以了。
Notes視圖設計是應用程序設計過程中較快的一步.如果數據庫第一次就設計正確,擁有在正確文檔中可用的全部必需的字段,那么設計視圖應是一個容易的過程,且對用戶來說是直觀的,可打印輸出屏幕上顯示的視圖.
2. 文件夾
文件夾也是文檔的瀏覽窗口之一,但是和視圖不同的是,文件夾沒有選擇條件,它里面的文檔是通過Putinfolder來方進的,必須通過RemoveFromFolder來將其中的文檔移開(注意,移開不是刪除).
3. 全文檢索
全文檢索是 LotusNotes提供的基于數據庫全文索引的搜索工具,它能根據給定的檢索關鍵字在整個數據庫中搜索,并把搜索結果顯示在該視圖的頂端。
4. 按關鍵字查詢
好的查詢設計應是對用戶的查詢給于準確快速的響應,準確,靈活地顯示用戶所需的數據.為滿足用戶多條件的組合查詢,開發人員一般為用戶設計一種"按關鍵字查詢"方式,需要寫編程序使用戶可以輸入一個或多個查詢條件進行組合條件查詢,找滿足條件的文檔.但是由于NOTES無法直接顯示結果,一般的解決方法是:將查詢結果存放到文件夾中,最后,打開文件夾顯示查詢結果。
三、文件夾方式存在的缺陷及解決方法
由于LotusNotes的文檔是可以共享的,文件夾也可以共享,也就是說,你可以用這個文件夾來存放你的檢索結果,我也可以用這個文件夾來存放我的查詢結果,而且LotusNotes應該保證互相不沖突。然而遺憾的是,LotusNotes不作這個保證,導致的結果是大家互相影響,產生存取沖突。
解決問題的方法:
1、建立私有文件夾
所謂私有文件夾,是指文件夾屬于一人私有,其他人看不見這個文件夾。可以通過創建一個"啟動后私有"文件夾,每個用戶使用該文件夾后,系統立即根據這個啟動后私有文件夾創建一個新的屬于該用戶的文件夾。這樣,每個用戶都有一個結構完全相同而且互相不干擾的文件夾。
這種解決方法保證沖突不會產生,但系統為每個用戶保存一個文件夾,會導致系統維護上的困難。如果系統的用戶太多,情況會更壞。如果用戶注銷,它的私有文件夾不會自動刪除。
2、改進的視圖方法
視圖一般是大家共享的,我們可以通過改進視圖的選擇條件,將視圖作為我們存儲查詢結果的地方,就能避免文件夾方式產生的問題.我們提出解決問題的思路是: 把滿足某一用戶查詢條件的文檔作選擇標記; 創建一個共享視圖,用視圖選擇公式來顯示該用戶的查詢結果;顯示或打印完成后,刪除選擇標記.需要說明的是:這種方法查詢的速度會慢一些.具體實現方法如下:
(1) 在要查詢的數據庫文檔表單上創建一個可編輯多值的隱含域"SelectedUserName"
用于存放查詢該文檔的用戶名.
(2) 創建一個共享視圖vwSelect,視圖公式為:
SELECT Form = "frmFormName" & @Contains(SelectedUserName;@UserName)
用于顯示該用戶查到的文檔
(3) 創建一個顯示視圖的導航器"nvgQueryResult",其初始視圖為vwSelect.
(4) 用Sript語言,利用FTSearch函數進行組合條件查詢,查找滿足條件的文檔.
程序流程如下:
圖1
編程實現
(1) 查詢顯示
功能:完成按關鍵字條件查詢,顯示查詢結果.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Set db = session.CurrentDatabase
itemvalues=item1.values
Condition=itemvalues(0)
For i=Lbound(itemvalues)+1 to Ubound(itemvalues)
Condition=Condition+itemvalues(i) '記載用戶輸入的全部查詢條件
Next
Count=view.FTSearch(Condition,0)'完成全文查找
If count〈〉0 Then
Messagebox"本數據庫中共有:"+Str(Count) + "個記錄滿足條件!",0+64,"提示信息"
For j=1 To count
Set doc=dc.getnthdocument(j)
Set item = doc.GetFirstItem( "SelectedUserName" )
Call item.AppendToTextList( session.UserName ) '在域SelectedUserName中
Call doc.Save( True, True )'追加用戶名
Next
ServerName = session.GetEnvironmentString("ServerName")
DirName = session.GetEnvironmentString("DirectionName")
DatabaseName=DirName+"DBName.nsf"
'打開導航器調用視圖,即顯示查詢結果
Call workspace.OpenDatabase ( ServerName,DatabaseName,"nvgQueryResult" )
Else
Messagebox "沒有滿足條件的記錄!",0 +48,"提示信息:"
End If
end
(2) 退出顯示
功能:清除用戶的選擇標記
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Set db = session.CurrentDatabase
' ViewName = session.GetEnvironmentString("envViewNa")
Set view = db.GetView(vwSelect)
Set doc = view.GetFirstDocument
UserName=session.UserName '取現用戶名到變量:UserName
While Not (doc Is Nothing )
TempValue=doc.SelectedUserName '清除文檔域"SelectedUserName"中
doc.SelectedUserName="" '自己的用戶名;
Call doc.save(True,False) '同時保留其他用戶的用戶名.
Set item=doc.getfirstitem("SelectedUserName")
Forall x In TempValue
If x〈〉 UserName Then
Call item.AppendToTextList(x )
Call doc.save(True,False)
End If
End Forall
Set doc = view.GetFirstDocument
Wend
end
主要技術要點:
以上應用設計主要運用了以下技術要點來保證顯示結果的準確性和數據的共享性.
(1) 要查詢的數據庫文檔表單上創建的可編輯多值的隱含域"SelectedUserName" .
域是構成表單的重要元素,對一個NOTES數據庫來說,外部數據的錄入要通過域, 庫 內存放數據顯示也要依靠域.我們這里創建域"SelectedUserName"的作用是:存放查詢該文檔的用戶名作為選擇標志.
選擇標志的確定:
使用用戶名作為選擇標志主要因為在Notes中用戶名是唯一的,不同的用戶有不同的用戶名,不會存在兩個相同的用戶名.這樣,該域記住了有哪幾個不同用戶查詢選擇了此文檔.為用視圖顯示文檔做準備.
域的主要屬性是:
可編輯:數據可以通過按鈕執行Formulas或Script來產生.
隱含的:只作存儲,沒有顯示作用.顯示文檔時不顯示該域的數據準許多值:準許用戶存入多個值,保證該域記錄下選擇該文檔所有的用戶名.因為在共享數據狀態下,同一個文檔同時可被多個用戶查詢選擇,你必須記住所有選擇該文檔的用戶名.這一點對于多用戶下顯示數據十分重要.
(2) 視圖及視圖選擇公式:
我們設計了一個共享視圖vwSelect,視圖公式為:
SELECT @Contains(SelectedUserName;@UserName)
視圖功能:顯示所有域SelectedUserName中含有當前的用戶名的文檔.
@UserName:返回當前的用戶名;
@Contains(SelectedUserName;@UserName): 用于判斷是否文檔域SelectedUserName中含有當前的用戶名; 因為在查詢時,那些滿足條件文檔的域"SelectedUserName"中已被加入了用戶名作為選擇標志,所以該視圖選擇顯示那些域SELECTEDUSERNAME中包含用戶名的文檔.
在視圖的設計時,使用"打開后廢棄索引"選項。
四、小結
綜上所述,LousNotes為查詢應用程序開發提供了靈活快速的環境,本文所述的幾種方式都能實現對數據文檔的查詢檢索,但是,它們的實現方法和滿足的目的要求不盡相同.盡管還有不足之出需要完善, 但是仍然說明了一些能結合到你的應用程序中去的Notes技術,同時,我們必須清醒地認識到它與傳統關系型數據庫應用程序開發系統有很大的差別,查詢設計有其獨特的方式,一個應用程序能很快地被設計出來并且達到可用狀態.試圖將傳統的應用程序開發技術映射到Notes環境中的開發人員,將很難獲得Notes應用程序的優點.
近幾年,網絡技術得到飛速的發展,由此帶動其它領域的相應快速發展,如WWW技術、辦公自動化技術等,這些技術把以計算機網絡為傳輸手段的信息交換技術大大向前推進一步,使人們收集、傳輸和共享信息的方式更加豐富多彩,由此對信息存儲、共享和檢索技術的要求進一步提高。
Lotus Notes/Domino是一種基于Internet/Intranet技術為構架的群件系統,它的主要功能是為各種不同類型的企業構造其Intranet提供全面的解決方案,是構造企業信息網主要工具之一。它的核心包括文檔管理技術、郵件系統、文件檢索技術、Web技術和復制技術,這些技術代表了當今信息領域的主流技術。LotusNotes/Domino還能使系統同時具有Client/Server和Browser/Server雙重結構,使它更具生命力。信息檢索技術作為 LotusNotes/Domino的一個主要技術,為用戶提供了包括全文檢索、按關鍵字查詢、視圖和文件夾等多種方式, 本文結合在實際開發中的經驗體會,對Notes應用中文檔查詢進行討論。
二、文檔的查詢
在LotusNotes中,信息是以文檔的形式保存在數據庫中的,文檔是以非結構的形式存放的,一個文檔相當于關系型數據庫中的一個記錄。 在NOTES應用中我們經常要編寫許多類似于傳統數據庫應用程序開發系統中的查詢和報告, 以便把用戶所關心的信息展現出來.主要有以下幾種方式:
1. 視圖
視圖是 LotusNotes中文檔的主要瀏覽窗口,每一視圖都包含符合一定條件的文檔。當一個視圖的選擇條件給定以后,通過該視圖所看到的文檔就是符合條件的文檔,如某一視圖的選擇條件為:Select form="請假單"; 則打開該視圖后,我們所看到的文檔都是請假單。視圖除了有選擇條件外,還可以按不同的特性將文檔進行分類和排序,使得我們可以及其快捷地導航到要查找的文檔。對于簡單的查詢,可以不編寫任何程序,而通過把視圖按合理的方式進行分類和排序就可以了。
Notes視圖設計是應用程序設計過程中較快的一步.如果數據庫第一次就設計正確,擁有在正確文檔中可用的全部必需的字段,那么設計視圖應是一個容易的過程,且對用戶來說是直觀的,可打印輸出屏幕上顯示的視圖.
2. 文件夾
文件夾也是文檔的瀏覽窗口之一,但是和視圖不同的是,文件夾沒有選擇條件,它里面的文檔是通過Putinfolder來方進的,必須通過RemoveFromFolder來將其中的文檔移開(注意,移開不是刪除).
3. 全文檢索
全文檢索是 LotusNotes提供的基于數據庫全文索引的搜索工具,它能根據給定的檢索關鍵字在整個數據庫中搜索,并把搜索結果顯示在該視圖的頂端。
4. 按關鍵字查詢
好的查詢設計應是對用戶的查詢給于準確快速的響應,準確,靈活地顯示用戶所需的數據.為滿足用戶多條件的組合查詢,開發人員一般為用戶設計一種"按關鍵字查詢"方式,需要寫編程序使用戶可以輸入一個或多個查詢條件進行組合條件查詢,找滿足條件的文檔.但是由于NOTES無法直接顯示結果,一般的解決方法是:將查詢結果存放到文件夾中,最后,打開文件夾顯示查詢結果。
三、文件夾方式存在的缺陷及解決方法
由于LotusNotes的文檔是可以共享的,文件夾也可以共享,也就是說,你可以用這個文件夾來存放你的檢索結果,我也可以用這個文件夾來存放我的查詢結果,而且LotusNotes應該保證互相不沖突。然而遺憾的是,LotusNotes不作這個保證,導致的結果是大家互相影響,產生存取沖突。
解決問題的方法:
1、建立私有文件夾
所謂私有文件夾,是指文件夾屬于一人私有,其他人看不見這個文件夾。可以通過創建一個"啟動后私有"文件夾,每個用戶使用該文件夾后,系統立即根據這個啟動后私有文件夾創建一個新的屬于該用戶的文件夾。這樣,每個用戶都有一個結構完全相同而且互相不干擾的文件夾。
這種解決方法保證沖突不會產生,但系統為每個用戶保存一個文件夾,會導致系統維護上的困難。如果系統的用戶太多,情況會更壞。如果用戶注銷,它的私有文件夾不會自動刪除。
2、改進的視圖方法
視圖一般是大家共享的,我們可以通過改進視圖的選擇條件,將視圖作為我們存儲查詢結果的地方,就能避免文件夾方式產生的問題.我們提出解決問題的思路是: 把滿足某一用戶查詢條件的文檔作選擇標記; 創建一個共享視圖,用視圖選擇公式來顯示該用戶的查詢結果;顯示或打印完成后,刪除選擇標記.需要說明的是:這種方法查詢的速度會慢一些.具體實現方法如下:
(1) 在要查詢的數據庫文檔表單上創建一個可編輯多值的隱含域"SelectedUserName"
用于存放查詢該文檔的用戶名.
(2) 創建一個共享視圖vwSelect,視圖公式為:
SELECT Form = "frmFormName" & @Contains(SelectedUserName;@UserName)
用于顯示該用戶查到的文檔
(3) 創建一個顯示視圖的導航器"nvgQueryResult",其初始視圖為vwSelect.
(4) 用Sript語言,利用FTSearch函數進行組合條件查詢,查找滿足條件的文檔.
程序流程如下:
圖1
編程實現
(1) 查詢顯示
功能:完成按關鍵字條件查詢,顯示查詢結果.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Set db = session.CurrentDatabase
itemvalues=item1.values
Condition=itemvalues(0)
For i=Lbound(itemvalues)+1 to Ubound(itemvalues)
Condition=Condition+itemvalues(i) '記載用戶輸入的全部查詢條件
Next
Count=view.FTSearch(Condition,0)'完成全文查找
If count〈〉0 Then
Messagebox"本數據庫中共有:"+Str(Count) + "個記錄滿足條件!",0+64,"提示信息"
For j=1 To count
Set doc=dc.getnthdocument(j)
Set item = doc.GetFirstItem( "SelectedUserName" )
Call item.AppendToTextList( session.UserName ) '在域SelectedUserName中
Call doc.Save( True, True )'追加用戶名
Next
ServerName = session.GetEnvironmentString("ServerName")
DirName = session.GetEnvironmentString("DirectionName")
DatabaseName=DirName+"DBName.nsf"
'打開導航器調用視圖,即顯示查詢結果
Call workspace.OpenDatabase ( ServerName,DatabaseName,"nvgQueryResult" )
Else
Messagebox "沒有滿足條件的記錄!",0 +48,"提示信息:"
End If
end
(2) 退出顯示
功能:清除用戶的選擇標記
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Set db = session.CurrentDatabase
' ViewName = session.GetEnvironmentString("envViewNa")
Set view = db.GetView(vwSelect)
Set doc = view.GetFirstDocument
UserName=session.UserName '取現用戶名到變量:UserName
While Not (doc Is Nothing )
TempValue=doc.SelectedUserName '清除文檔域"SelectedUserName"中
doc.SelectedUserName="" '自己的用戶名;
Call doc.save(True,False) '同時保留其他用戶的用戶名.
Set item=doc.getfirstitem("SelectedUserName")
Forall x In TempValue
If x〈〉 UserName Then
Call item.AppendToTextList(x )
Call doc.save(True,False)
End If
End Forall
Set doc = view.GetFirstDocument
Wend
end
主要技術要點:
以上應用設計主要運用了以下技術要點來保證顯示結果的準確性和數據的共享性.
(1) 要查詢的數據庫文檔表單上創建的可編輯多值的隱含域"SelectedUserName" .
域是構成表單的重要元素,對一個NOTES數據庫來說,外部數據的錄入要通過域, 庫 內存放數據顯示也要依靠域.我們這里創建域"SelectedUserName"的作用是:存放查詢該文檔的用戶名作為選擇標志.
選擇標志的確定:
使用用戶名作為選擇標志主要因為在Notes中用戶名是唯一的,不同的用戶有不同的用戶名,不會存在兩個相同的用戶名.這樣,該域記住了有哪幾個不同用戶查詢選擇了此文檔.為用視圖顯示文檔做準備.
域的主要屬性是:
可編輯:數據可以通過按鈕執行Formulas或Script來產生.
隱含的:只作存儲,沒有顯示作用.顯示文檔時不顯示該域的數據準許多值:準許用戶存入多個值,保證該域記錄下選擇該文檔所有的用戶名.因為在共享數據狀態下,同一個文檔同時可被多個用戶查詢選擇,你必須記住所有選擇該文檔的用戶名.這一點對于多用戶下顯示數據十分重要.
(2) 視圖及視圖選擇公式:
我們設計了一個共享視圖vwSelect,視圖公式為:
SELECT @Contains(SelectedUserName;@UserName)
視圖功能:顯示所有域SelectedUserName中含有當前的用戶名的文檔.
@UserName:返回當前的用戶名;
@Contains(SelectedUserName;@UserName): 用于判斷是否文檔域SelectedUserName中含有當前的用戶名; 因為在查詢時,那些滿足條件文檔的域"SelectedUserName"中已被加入了用戶名作為選擇標志,所以該視圖選擇顯示那些域SELECTEDUSERNAME中包含用戶名的文檔.
在視圖的設計時,使用"打開后廢棄索引"選項。
四、小結
綜上所述,LousNotes為查詢應用程序開發提供了靈活快速的環境,本文所述的幾種方式都能實現對數據文檔的查詢檢索,但是,它們的實現方法和滿足的目的要求不盡相同.盡管還有不足之出需要完善, 但是仍然說明了一些能結合到你的應用程序中去的Notes技術,同時,我們必須清醒地認識到它與傳統關系型數據庫應用程序開發系統有很大的差別,查詢設計有其獨特的方式,一個應用程序能很快地被設計出來并且達到可用狀態.試圖將傳統的應用程序開發技術映射到Notes環境中的開發人員,將很難獲得Notes應用程序的優點.
總結
以上是生活随笔為你收集整理的Lotus Notes中文档查询的研究与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25岁小伙做鼻子整形失败毁容!
- 下一篇: 2010年基于Linux的10大技术趋势