lotus notes 开发中BS下实现组合查询的方法

lotus notes 开发中BS下实现组合查询的方法

在进行系统设计的时候用户要求对各文件能够实现组合条件的查询和统计,开发之初我选择了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>查找到&nbsp;"+Cstr(jjj)+"&nbsp;份文件&nbsp;<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

你可能感兴趣的:(lotus notes 开发中BS下实现组合查询的方法)