to:yuzhejia(阿哲) and michael_law(馬可波羅)
多人一起进行时会不会出现错误,这个问题基本上可以这样回答。
如果用一个视图的话,肯定会出现你们所担心的问题。
要解决这个问题只用动态创建新的视图,使这个视图的名字在整个数据库中保持唯一。
1、做一个视图模板(名字为Template),这个视图没有一列,View Selection 和 Form Formula也是空的。
2、通过程序以Template为模板,创建一个新的视图
Dim Session As New NotesSession
Dim DB As NotesDatabase
Dim View As NotesView
Dim NewView As NotesView
Dim Doc As NotesDocument
Dim NewDoc As NotesDocument
Dim UserName As New NotesName( Session.EffectiveUserName )
Set DB = Session.CurrentDatabase
Set View = DB.GetView("Template")
Set Doc = DB.GetDocumentByUNID( View.UniversalID )
Set NewDoc = Doc.CopyToDatabase( DB )
Call NewDoc.ReplaceItemValue("$TITLE",NewViewName)
Call NewDoc.Save(True,True)
前面说的建立视图查询结果,只有在6.x的版本上才能实现,因为只有在6.x的版本上才有相应的这些函数。
1、建立一个基本搜索视图。例如:searchview
2、为此基本搜索视图建立嵌入文档作为查询结果的显示。例如:searchform
3、为查询建立代理。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim searchView As NotesView
Set db = session.CurrentDatabase
Set searchView = db.getView("searchview")
REM 视图的显示条件
Dim condition As String
Dim viewColumns As Variant
condition = "@LowerCase(form)='formname'"
searchView.SelectionFormula(condition)
viewColumns = searchView.Columns
REM 列的数据:数组0为列标题、数组1为列显示公式
Dim columnName(1,3) As String
columnName(0,0) = "标题1"
columnName(1,0) = "bt1"
columnName(0,1) = "标题2"
columnName(1,1) = "bt2"
columnName(0,2) = "标题3"
columnName(1,2) = "bt3"
columnName(0,3) = "标题4"
columnName(1,3) = "bt4"
REM 原视图列的数量与查询时要显示的列的数量进行比较,少了就往视图上添加列,多了就将多余的列删除
Dim i As Integer
If Ubound(columnName,2) > Ubound(viewColumns) Then
For i = 1 To Ubound(columnName,2) - Ubound(viewColumns)
searchView.CreateColumn
Next
Elseif Ubound(columnName,2) < Ubound(viewColumns) Then
For i = 1 To Ubound(viewColumns) - Ubound(columnName,2)
searchView.RemoveColumn(i)
Next
End If
REM 把视图列的信息放入基本视图当中
Dim viewColumn As NotesViewColumn
viewColumns = Ubound(searchView.Columns)
For i = 1 To Ubound(searchView.Columns)
Set viewColumn = viewColumns(i)
viewColumn.Title = columnName(0,i)
viewColumn.Formula = columnName(1,i)
REM 第一列为排序列
If i = 1 Then viewColumn.IsSorted = True
Next
REM 转到嵌入基本视图的表单进行显示
Print("/" + db.filePath + "/searchform?OpenForm")
End Sub