[返回]
软件世界1999年第2期

Lotus Notes中文档查询的研究与实践

刘 勇 童卫民

  一、引言

  近几年,网络技术得到飞速的发展,由此带动其它领域的相应快速发展,如WWW技术、办公自动化技术等,这些技术把以计算机网络为传输手段的信息交换技术大大向前推进一步,使人们收集、传输和共享信息的方式更加丰富多彩,由此对信息存储、共享和检索技术的要求进一步提高。

  Lotus Notes/Domino是一种基于Internet/Intranet技术为构架的群件系统,它的主要功能是为各种不同类型的企业构造其Intranet提供全面的解决方案,是构造企业信息网主要工具之一。它的核心包括文档管理技术、邮件系统、文件检索技术、Web技术和复制技术,这些技术代表了当今信息领域的主流技术。LotusNotes/Domino还能使系统同时具有Client/Server和Browser/Server双重结构,使它更具生命力。信息检索技术作为 LotusNotes/Domino的一个主要技术,为用户提供了包括全文检索、按关键字查询、视图和文件夹等多种方式, 本文结合在实际开发中的经验体会,对Notes应用中文档查询进行讨论。


  二、文档的查询

  在LotusNotes中,信息是以文档的形式保存在数据库中的,文档是以非结构的形式存放的,一个文档相当于关系型数据库中的一个记录。 在NOTES应用中我们经常要编写许多类似于传统数据库应用程序开发系统中的查询和报告, 以便把用户所关心的信息展现出来.主要有以下几种方式:

  1. 视图

  视图是 LotusNotes中文档的主要浏览窗口,每一视图都包含符合一定条件的文档。当一个视图的选择条件给定以后,通过该视图所看到的文档就是符合条件的文档,如某一视图的选择条件为:Select form="请假单"; 则打开该视图后,我们所看到的文档都是请假单。视图除了有选择条件外,还可以按不同的特性将文档进行分类和排序,使得我们可以及其快捷地导航到要查找的文档。对于简单的查询,可以不编写任何程序,而通过把视图按合理的方式进行分类和排序就可以了。

  Notes视图设计是应用程序设计过程中较快的一步.如果数据库第一次就设计正确,拥有在正确文档中可用的全部必需的字段,那么设计视图应是一个容易的过程,且对用户来说是直观的,可打印输出屏幕上显示的视图.

  2. 文件夹

  文件夹也是文档的浏览窗口之一,但是和视图不同的是,文件夹没有选择条件,它里面的文档是通过Putinfolder来方进的,必须通过RemoveFromFolder来将其中的文档移开(注意,移开不是删除).

  3. 全文检索

  全文检索是 LotusNotes提供的基于数据库全文索引的搜索工具,它能根据给定的检索关键字在整个数据库中搜索,并把搜索结果显示在该视图的顶端。

  4. 按关键字查询

  好的查询设计应是对用户的查询给于准确快速的响应,准确,灵活地显示用户所需的数据.为满足用户多条件的组合查询,开发人员一般为用户设计一种"按关键字查询"方式,需要写编程序使用户可以输入一个或多个查询条件进行组合条件查询,找满足条件的文档.但是由于NOTES无法直接显示结果,一般的解决方法是:将查询结果存放到文件夹中,最后,打开文件夹显示查询结果。


  三、文件夹方式存在的缺陷及解决方法

  由于LotusNotes的文档是可以共享的,文件夹也可以共享,也就是说,你可以用这个文件夹来存放你的检索结果,我也可以用这个文件夹来存放我的查询结果,而且LotusNotes应该保证互相不冲突。然而遗憾的是,LotusNotes不作这个保证,导致的结果是大家互相影响,产生存取冲突。

  解决问题的方法:

  1、建立私有文件夹

  所谓私有文件夹,是指文件夹属于一人私有,其他人看不见这个文件夹。可以通过创建一个"启动后私有"文件夹,每个用户使用该文件夹后,系统立即根据这个启动后私有文件夹创建一个新的属于该用户的文件夹。这样,每个用户都有一个结构完全相同而且互相不干扰的文件夹。

  这种解决方法保证冲突不会产生,但系统为每个用户保存一个文件夹,会导致系统维护上的困难。如果系统的用户太多,情况会更坏。如果用户注销,它的私有文件夹不会自动删除。

  2、改进的视图方法

  视图一般是大家共享的,我们可以通过改进视图的选择条件,将视图作为我们存储查询结果的地方,就能避免文件夹方式产生的问题.我们提出解决问题的思路是: 把满足某一用户查询条件的文档作选择标记; 创建一个共享视图,用视图选择公式来显示该用户的查询结果;显示或打印完成后,删除选择标记.需要说明的是:这种方法查询的速度会慢一些.具体实现方法如下:

  (1) 在要查询的数据库文档表单上创建一个可编辑多值的隐含域"SelectedUserName"

   用于存放查询该文档的用户名.

  (2) 创建一个共享视图vwSelect,视图公式为:

   SELECT Form. = "frmFormName" & @Contains(SelectedUserName;@UserName)

   用于显示该用户查到的文档

  (3) 创建一个显示视图的导航器"nvgQueryResult",其初始视图为vwSelect.

  (4) 用Sript语言,利用FTSearch函数进行组合条件查询,查找满足条件的文档.

   程序流程如下:


   图1

   编程实现

   (1) 查询显示

   功能:完成按关键字条件查询,显示查询结果.

   Dim session As New NotesSession

   Dim db As NotesDatabase

   Dim doc As NotesDocument

   Dim view As NotesView

   Set db = session.CurrentDatabase

   itemvalues=item1.values

   Condition=itemvalues(0)

   For i=Lbound(itemvalues)+1 to Ubound(itemvalues)

   Condition=Condition+itemvalues(i) '记载用户输入的全部查询条件

   Next

   Count=view.FTSearch(Condition,0)'完成全文查找

   If count〈〉0 Then

   Messagebox"本数据库中共有:"+Str(Count) + "个记录满足条件!",0+64,"提示信息"

   For j=1 To count

   Set doc=dc.getnthdocument(j)

   Set item = doc.GetFirstItem( "SelectedUserName" )

   Call item.AppendToTextList( session.UserName ) '在域SelectedUserName中

   Call doc.Save( True, True )'追加用户名

   Next

   ServerName = session.GetEnvironmentString("ServerName")

   DirName = session.GetEnvironmentString("DirectionName")

   DatabaseName=DirName+"DBName.nsf"

   '打开导航器调用视图,即显示查询结果

   Call workspace.OpenDatabase ( ServerName,DatabaseName,"nvgQueryResult" )

   Else

   Messagebox "没有满足条件的记录!",0 +48,"提示信息:"

   End If

  end

   (2) 退出显示

   功能:清除用户的选择标记

   Dim session As New NotesSession

   Dim db As NotesDatabase

   Dim doc As NotesDocument

   Dim view As NotesView

   Set db = session.CurrentDatabase

   ' ViewName = session.GetEnvironmentString("envViewNa")

   Set view = db.GetView(vwSelect)

   Set doc = view.GetFirstDocument

   UserName=session.UserName '取现用户名到变量:UserName

   While Not (doc Is Nothing )

   TempValue=doc.SelectedUserName '清除文档域"SelectedUserName"中

   doc.SelectedUserName="" '自己的用户名;

   Call doc.save(True,False) '同时保留其他用户的用户名.

   Set item=doc.getfirstitem("SelectedUserName")

   Forall x In TempValue

   If x〈〉 UserName Then

   Call item.AppendToTextList(x )

   Call doc.save(True,False)

   End If

   End Forall

   Set doc = view.GetFirstDocument

   Wend

  end

  主要技术要点:

  以上应用设计主要运用了以下技术要点来保证显示结果的准确性和数据的共享性.

  (1) 要查询的数据库文档表单上创建的可编辑多值的隐含域"SelectedUserName" .

  域是构成表单的重要元素,对一个NOTES数据库来说,外部数据的录入要通过域, 库 内存放数据显示也要依靠域.我们这里创建域"SelectedUserName"的作用是:存放查询该文档的用户名作为选择标志.

  选择标志的确定:

  使用用户名作为选择标志主要因为在Notes中用户名是唯一的,不同的用户有不同的用户名,不会存在两个相同的用户名.这样,该域记住了有哪几个不同用户查询选择了此文档.为用视图显示文档做准备.

  域的主要属性是:

  可编辑:数据可以通过按钮执行Formulas或Script来产生.

  隐含的:只作存储,没有显示作用.显示文档时不显示该域的数据准许多值:准许用户存入多个值,保证该域记录下选择该文档所有的用户名.因为在共享数据状态下,同一个文档同时可被多个用户查询选择,你必须记住所有选择该文档的用户名.这一点对于多用户下显示数据十分重要.

  (2) 视图及视图选择公式:

  我们设计了一个共享视图vwSelect,视图公式为:

  SELECT @Contains(SelectedUserName;@UserName)

  视图功能:显示所有域SelectedUserName中含有当前的用户名的文档.

  @UserName:返回当前的用户名;

  @Contains(SelectedUserName;@UserName): 用于判断是否文档域SelectedUserName中含有当前的用户名; 因为在查询时,那些满足条件文档的域"SelectedUserName"中已被加入了用户名作为选择标志,所以该视图选择显示那些域SELECTEDUSERNAME中包含用户名的文档.

  在视图的设计时,使用"打开后废弃索引"选项。


  四、小结

  综上所述,LousNotes为查询应用程序开发提供了灵活快速的环境,本文所述的几种方式都能实现对数据文档的查询检索,但是,它们的实现方法和满足的目的要求不尽相同.尽管还有不足之出需要完善, 但是仍然说明了一些能结合到你的应用程序中去的Notes技术,同时,我们必须清醒地认识到它与传统关系型数据库应用程序开发系统有很大的差别,查询设计有其独特的方式,一个应用程序能很快地被设计出来并且达到可用状态.试图将传统的应用程序开发技术映射到Notes环境中的开发人员,将很难获得Notes应用程序的优点.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/54654/viewspace-429406/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/54654/viewspace-429406/

Lotus Notes中文档查询(转)相关推荐

  1. Lotus Notes中文档查询的研究与实践

    一.引言 近几年,网络技术得到飞速的发展,由此带动其它领域的相应快速发展,如WWW技术.办公自动化技术等,这些技术把以计算机网络为传输手段的信息交换技术大大向前推进一步,使人们收集.传输和共享信息的方 ...

  2. notes java api_lotus-notes-使用Java API读取Lotus Notes文档

    Notes Domino中有一个用于对文档进行版本控制的内置功能.根据在数据库设计中配置方式的不同(并假设数据库开发人员没有自己动手制作),这些版本将是对原始父级的响应,或者反过来是新版本成为父级,而 ...

  3. notes获取计算机名,在Lotus Notes数据库中获取最近读取的文档(Get recently read document in Lotus Notes Database)...

    在Lotus Notes数据库中获取最近读取的文档(Get recently read document in Lotus Notes Database) 我正在使用LotusScript和Lotus ...

  4. Lotus Notes常见问题答疑

    Lotus Domino/Notes是目前最为流行的文档数据库系统之一,作为群件系统,它利用自身强大的功能使其在企业.政府办公自动化方面的应用越来越广.以下总结了一些Notes开发和管理的常见问题,希 ...

  5. 76. Lotus Notes编程中的命名习惯

    程序里实体的命名规则和习惯 在一种开发环境里编程,会用到各种实体(开发中用到的从文件类型.程序的组织单元到数据库对象的种种对象,不用对象一词以与面向对象语言里的对象区分).实体种类的多少,与所用语言和 ...

  6. Lotus Notes常见问题答疑(转)

    Lotus Notes常见问题答疑(转)[@more@]Lotus Notes常见问题答疑 Lotus Domino/Notes是目前最为流行的文档数据库系统之一,作为群件系统,它利用自身强大的功能使 ...

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

    孙 茂伟, 测试工程师, IBM 孙茂伟在北京科技大学获得工学学士.工学硕士学位,现于 IBM CDL ECM FileNet EForms TEAM 从事自动化测试相关工作. 简介: 本文将向广大 ...

  8. Lotus Notes 常见错误

    打开Notes时提示"打开窗口时出错"或提示"标识符文件被锁定,请稍后再试" 方法(1)结束所有以N开头的进程后重启Notes. 方法(2)重新启动计算机后再打 ...

  9. lotus notes

    lotus notes Lotus Notes/Domino 是一个世界领先的企业级通讯.协同工作及Internet/Intranet平台:具有完善的工作流控制.数据库复制技术和完善可靠的安全机制:尤 ...

最新文章

  1. Linker Tools Error LNK2001 报错
  2. 0123互联网新闻 | 在线教育机构掌门1对1获3.5亿美元融资;淘宝直播独立App将在春节前上线...
  3. RabbitMQ应对不同阶段丢失消息的处理方案
  4. Bigtable 论文翻译
  5. ASP.NET Core 2.0 全局配置项
  6. java cookie安全_cookie的安全性问题
  7. 深度学习——Optimizer算法学习笔记
  8. C++《STL全集》
  9. android activity 的四种启动模式
  10. 新宝资讯上证涨跌比:1131:649
  11. 金蝶K3序时簿页面增加物料即时库存显示功能
  12. 计算机单位换换算,时间单位换算表与计算机单位换算
  13. IE 浏览器 安装证书 无响应 卡死
  14. 用excel实现工作日志的更新和汇总
  15. Unity引擎源代码开源地址
  16. 量子计算机 国外大学,全球首款纯硅量子计算机芯片在新南威尔士大学诞生
  17. 浅谈DOS扩展器和DPMI
  18. 【卡特兰数】【递推】【高精+压位】JZOJ·WZK打雪仗
  19. 齐博x1如何调用评论
  20. 孪生素数 所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了

热门文章

  1. 树莓派Python3安装运行OpenCV
  2. 今天14:00 | NeurIPS 专场八
  3. 易语言开发-托盘图标和菜单的实现
  4. m车载自组织网络(Vehicular Ad-hoc Network,VANET)通信系统的matlab仿真
  5. win8安装CH341SER.INF 预安装失败
  6. 在Java中声明一个unsigned int
  7. 机房改造承重不够怎么办?
  8. 四川大学计算机学院挑战杯,“挑战杯”四川大学2018-2019年大学生课外学术科技作品竞赛决赛答辩举行...
  9. linux下载minio
  10. 如何忽悠iPhone粉丝换安卓?(总共分6步)