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

原创 2004年07月04日 17:38:00

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

IBM Notes常见问题及解决办法

问题: Notes客户端是否支持Win8系统,如何下载安装介质? 解决方法: 标题:Notes/Domino产品系统要求 链接:http://www-01.ibm.com/suppor...
  • zhpengfei0915
  • zhpengfei0915
  • 2015年04月25日 11:44
  • 10207

46. Lotus Notes中编程发送邮件(一)

邮件是Lotus Notes体系的核心和基本功能,以至于Send()是NotesDocument的一个方法,任何一个文档都可以被发送出去,Notes里的一封邮件也只是一个有一些特殊字段的文档。在程序开...
  • starrow
  • starrow
  • 2013年08月14日 17:24
  • 9116

53. 在Lotus Notes中删除文档的功能

缘起 “删除”是几乎所有应用程序,特别是以数据为中心(Data-Centric)的应用具有的普通功能。单纯的“删除”也和新建、保存、编辑、查找等功能一样,集成在Lotus Notes客户端中,简单到...
  • starrow
  • starrow
  • 2013年09月08日 16:18
  • 5184

在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍

孙 茂伟, 测试工程师, IBM 孙茂伟在北京科技大学获得工学学士、工学硕士学位,现于 IBM CDL ECM FileNet EForms TEAM 从事自动化测试相关工作。   简介: 本文...
  • hanle18
  • hanle18
  • 2011年10月19日 14:08
  • 1551

lotus Notes与webmail的密码一致性解决方法

Notes与webmail密码一致性解决方案 一、方案1:强制密码更改操作只能在notes实现 1、该方案实施后的结果与影响 1)      方案实现后可以回退 2)      notes密码和web...
  • jackygits
  • jackygits
  • 2015年05月21日 16:41
  • 1112

6. Lotus Notes中的开发语言

Lotus Notes中的开发语言有很多种,这在其它平台中是比较少见的。每种语言都有各自的长处和适用的场合,本文就简单介绍和比较在经典Notes开发和XPage开发两种类型下的各种语言。 经典Note...
  • starrow
  • starrow
  • 2012年12月04日 17:28
  • 3260

【lotus Notes/Source Insight/Notepad++】软件开发常用工具设置技巧,提高工作编码效率

【1】IBM lotus Notes邮件设置技巧,减少邮件对工作的干扰 【1.1】邮件自动分类 操作--更多--邮件规则--新建规则 【2】Source Insight快捷键个性化设...
  • mashang123456789
  • mashang123456789
  • 2016年06月17日 15:47
  • 1093

Lotus Notes 自定义信头方法

  • 2009年02月05日 12:41
  • 75KB
  • 下载

针对 IBM Lotus Notes 开发人员的性能基础知识

2010-06-08 21:37:39 标签:IBM Lotus Notes 性能 基础 这份白皮书阐述对 IBM Lotus Notes 和 Domino 应用程序的性...
  • frankaqi
  • frankaqi
  • 2014年04月11日 17:08
  • 462

针对 IBM Lotus Notes 开发人员的性能基础知识

简介 在 Lotus Notes 中开发简单的应用程序非常容易,并且在用户和文档的数量很少时,一般不会遇到性能问题。然而,只要应用程序是成功的,用户和数据的数量就会逐渐增多。如果在设计时没有考虑到性...
  • mintynote
  • mintynote
  • 2011年04月22日 17:36
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lotus notes 开发中BS下实现组合查询的方法
举报原因:
原因补充:

(最多只允许输入30个字)