在进行系统设计的时候用户要求对各文件能够实现组合条件的查询和统计,开发之初我选择了notes自身提供的综合查询表单$$Search Form来实现,但在用户使用了一段时间发现,采用$$Search Form来进行组合条件查询时常常会搜索到许多并不满足条件的文档或者搜索到的文档根本就不知道是什么,为了解决这个问题,我决定写代码来实现组合条件查询,下面就来讲讲实现的过程。
首先建立一个表单(Fsearch),主要用来现实和选择查询条件,表单的域元素如下表所示:
编号
域名
含义
类型
说明
01
SaveOptions
防止使用该表单创建文档
文本域
该域是系统域当值为”0”的时候当前表单不会创建文档,因为这里使用该表单仅仅是为了选择查询条件,不需要创建文档,所以该域的值为“0”
02
biaoti
发文标题
文本域
03
zhutici
主题词
文本域
04
laiwenhao
发文号
文本域
05
nigaoren
拟稿人
文本域
06
danwei
拟稿人单位
文本域
07
syear
文档所属年度
文本域
08
smonth
文档所属月份
文本域
在表单上按照用户要求和使用习惯利用表格布局好上述元素后,在表单上创建一个热点按钮“现在查找“,执行@Command([ToolsRunMacro];"(wFaWenSearch)") 的公式命令,其中wFaWenSearch 是一个共享代理,代码如下:
Sub Initialize
‘//定义变量
Dim session As New NotesSession
Dim cDoc As NotesDocument
Dim db As NotesDatabase
Dim sResult , Set sResultemp As NotesDocumentCollection
Dim sql As String
Set db=session.currentDatabase ‘//获得当前数据库
Set cDoc=session.DocumentContext() ‘//获得当前文档,即用户打开的选择条件的表单Fsearch
Set view=db.getView("($UNID)") ‘//获得($UNID)视图,该视图里现实所有文件
‘//============获取查询条件=========//
sYear=cDoc.syear(0)
sMonth=cDoc.smonth(0)
biaoti=cDoc.biaoti(0)
zhutici=cDoc.zhutici(0)
laiwenhao=cDoc.laiwenhao(0)
danwei=cDoc.danwei(0)
nigaoren=cDoc.nigaoren(0)
‘//================END================//
‘//=====组合查询条件======//
sql="form=""fwmain"""+"&(@Contains(biaoti;"""+biaoti+""")"+"|@Contains(zhutici;"""+zhutici'>|@Contains(zhutici;"""+zhutici+""")"+_
"|@Contains(t1+""[""+@text(t2)+""]""+@text(t3'>|@Contains(t1+""[""+@text(t2)+""]""+@text(t3)+ ""号""+;"""+laiwenhao+""")"+"|@contains(danwei">|@contains(danwei; """+danwei+""")"+_
"|@Contains(nigaoren;"""+nigaoren+""")"+"|@Contains(sYear;"""+sYear'>|@Contains(nigaoren;"""+nigaoren+""")"+"|@Contains(sYear;"""+sYear+""")"+"| @Contains(sMonth;"""+sMonth+"""))"
Set sResultemp= db.search(sql,Nothing,0)
‘//在数据库中搜索满足上述条件的所有文档,获得该文档集;但是由于使用search语法会把当前操
’//作者没有阅读权限的文档也搜索到,所以先把搜索到的文档集赋予临时变量sResultemp 再进行处理
Set sResult=db.search("@Contains(sYear;'1')",Nothing,0) ‘//初始化一个文档集sResul,这文档集中没有文件的
‘//========下面这循环主要是利用视图对文档读者权限的限制功能把sResultemp====//
‘//========这个文档集中当前用户有阅读权限的文档添加到文档集sResul中去=====//
For i=1 To sResultemp.count
Set sDoc=sResultemp.getNthDocument(i)
key=sDoc.bh(0)
Set Sview=db.getView("default")
Set sDoc=Sview.Getdocumentbykey(key,True)
If Not sDoc Is Nothing Then
Set sDoctmp=sResult.Getdocument(sDoc)
If sDoctmp Is Nothing Then
Call sResult.Adddocument(sDoc)
End If
End If
Next
If sResult.count=0 Then
Print "没有找到您要查找的文件"
Exit Sub
End If
'//=========创建网页来显示查询结果=======//
Print "<html>"
Print "<head>"
Print "<link rel=stylesheet type=text/css href=ViewCss.css>"
Print "</script>"
Print "</head>"
Print "<body>"
Print "<table width=100%>"
Print "<tr>"
Print "<td colspan=6 align=right style=border-style:solid;border-width:0 0 2px;border-color:#669933>查找到 "+Cstr(jjj)+" 份文件 <br>"
Print "</td>"
Print "</tr>"
Print "<tr>"
Print "<td width=5% class=td1></td>"
Print "<td width=10% class=td1>年度</td>"
Print "<td width=10% class=td1>月份</td>"
Print "<td width=40% class=td1>标题</td>"
Print "<td width=20% class=td1>主办部门</td>"
Print "<td width=15% class=td1>拟稿人</td>"
Print "</tr>"
For i=1 To sResult.count
Set sDoc=sResult.getNthDocument(i)
Set sDoc=view.getDocumentByKey(sDoc.bh(0),True)
If Not sDoc Is Nothing Then
Print "<tr>"
Print "<td class=tdx><a href=/"+sDoc.DBPath(0)+"/merit_gwgl.nsf/($UNID)/"+sDoc.UniversalID+"?opendocument target=_blank><img src=01.gif border=0 ></a></td>"
Print "<td class=tdx>"+sDoc.sYear(0)+"</td>"
Print "<td class=tdx>"+sDoc.sMonth(0)+"</td>"
Print "<td class=tdx>"+sDoc.biaoti(0)+"</td>"
Print "<td class=tdx>"+sDoc.danwei(0)+"</td>"
Print "<td class=tdx>"+sDoc.nigaoren(0)+"</td>"
Print "</tr>"
End If
Next
Print "</table>"
Print "</body>"
Print "</html>"
End Sub