您的位置:首页 > 数据库

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

2004-07-04 17:38 731 查看
     在进行系统设计的时候用户要求对各文件能够实现组合条件的查询和统计,开发之初我选择了notes自身提供的综合查询表单$$Search Form来实现,但在用户使用了一段时间发现,采用$$Search Form来进行组合条件查询时常常会搜索到许多并不满足条件的文档或者搜索到的文档根本就不知道是什么,为了解决这个问题,我决定写代码来实现组合条件查询,下面就来讲讲实现的过程。
   首先建立一个表单(Fsearch),主要用来现实和选择查询条件,表单的域元素如下表所示:

编号域名含义类型说明
01SaveOptions防止使用该表单创建文档文本域该域是系统域当值为”0”的时候当前表单不会创建文档,因为这里使用该表单仅仅是为了选择查询条件,不需要创建文档,所以该域的值为“0”
02biaoti发文标题文本域 
03zhutici主题词文本域 
04laiwenhao发文号文本域 
05nigaoren拟稿人文本域 
06danwei拟稿人单位文本域 
07syear文档所属年度文本域 
08smonth文档所属月份文本域 
在表单上按照用户要求和使用习惯利用表格布局好上述元素后,在表单上创建一个热点按钮“现在查找“,执行@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>"
 P
8a6f
rint "</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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息