CSDN博客

img aqsir

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

发表于2004/7/4 17:38:00  1010人阅读

     在进行系统设计的时候用户要求对各文件能够实现组合条件的查询和统计,开发之初我选择了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

0 0

相关博文

我的热门文章

img
取 消
img