宋芬
苏州大学网络中心 江苏 215021
苏州大学的OA系统是基于Lotus Domino平台开发的,自 2000年一直运行至今。虽然定时做一些数据的清理和整理工作,但几年的运转,数据不停的堆积,给系统硬件造成压力的同时影响了系统的性能——文件检索时间不断延长、系统运行速度不断减慢。如此发展下去势必会导致系统瘫痪。把历史数据导出到档案管理系统中,才能缓解OA系统的运行压力。苏州大学的档案管理系统——南大之星,该系统支持的后台数据库是 SQL Server,无法直接读取 Lotus Domino的数据,一般的做法是,工作人员手工把OA系统中的数据录入到档案管理系统中,可这样做费时费力,还容易出错。因此需要开发OA系统和档案管理系统之间的接口程序,方便、快速和准确地收集OA中的数据。既能减轻OA服务器的压力、确保OA系统的安全运行,还能减轻档案管理系统管理员的工作负担。
Notes提供了一个文档数据库管理系统。所有的应用都以数据库的形式出现,所处理的对象就是数据库中的文档。一般说来,先由应用程序开发设计人员设计文档(包括设计域、表单、视图、文件夹、操作等),用户则基于已有的设计创建文档,并且按照定制的工作流程对文档进行处理。每个数据库(.NSF文件)都可以包含不同格式和类型的文档。
关系数据库(RDB:Rational Database)是以二维表格及其关系作为数据模型的数据库,表的每个行称为一条记录,每一个列称为一个属性(或字段),所有属性名称构成的集合称为关系模式。关系模型由关系数据结构、关系操作集合和完整性约束三部分组成。将对象数据库管理系统(ODBMS)定义为一个集成了数据库能力与面向对象编程语言能力的数据库管理系统(DBMS)。关系型数据库通过SQL 语言访问数据,提供对数据的实时访问,使用实时查询来定位数。Notes数据库与关系数据库的比较总结如表1所示。
表1 关系数据库与Notes数据库比较
在Notes应用开发过程中,经常需要实现Notes数据库与其他关系型数据库(如Oracle、Sybase、SQL Server、DB2等)的数据交换,为此Lotus公司推出了相关组件来完成Notes数据库与关系型数据库管理系统(RDBMS)之间高效、快速、可伸缩的批量数据交换,如 Notes Pump、LEI、 DECS和LS:DO等。
早期的 Notes Pump组件,它作为Lotus公司 Domino/Notes 系列产品之一,是一个企业级规模的数据分发服务器,它可实现RDBMS和Notes 数据库之间数据的周期性复制,主、辅Domino服务器之间数据的及时和自动的同步。数据的移动可以是调度安排的,也可以是轮询或手动的,还可以被某个特定的条件所激发。是一个基于服务器的 32位多任务数据传输引擎。
LEI(Lotus Enterprise Integrator)是Notes Pump的后继产品,利用LEI工具的连接及行为来实现NOTES与SQL数据库的连接,实际上起到中间服务器的作用,它使不同数据库通过它的connection及activity文档来实行数据交换。
DECS(Domino内置的企业集成服务:Domino Enterprise Connect Services)是Lotus 公司开发的一种技术的名称,提供了一个从Domino应用到外部数据的深层次集成的连接性的方便使用的、基于表单的接口,在配置服务器的时候,需要选择安装 DECS。使用 DECS,开发人员拥有了一个不用编程的、模板化的应用,使得外部数据源变成了Domino应用的一部分。
Lotus Notes 为了方便与其他程序进行数据接口,还提供了一套专门的扩展类库,即 Lotus Script Data Object (LS:DO),它是由 ODBC Connection,ODBC Query,ODBC resultSet 三个类组成的一个集合,提供对外部的 ODBC 数据的完全读、写访问。它们提供了通过ODBC Version2.0 标准访问和更新外部数据库中的表的属性和成员函数。
通过上面的介绍,我们可以看到,有多种方法可以实现Lotus数据库和关系数据库之间的互操作,在本文中,笔者通过ODBC连接SQL SERVER 数据库,把OA系统中文档的红头、文号、标题、正文内容、主题词、抄送、抄报、发文单位、校对、附件等内容传输到档案管理系统的相应字段中。
Lotus Notes使用ODBC标准存取异种数据库信息。通过Notes里内嵌的公式或Script语言,可以在Notes文档中引入非Notes信息,可把现成的数据转换成Notes数据库。在存取外部数据之前,必须先定义一个数据源,以便让ODBC驱动程序管理器知道怎样获取数据。一个数据源把一个特定的ODBC驱动程序和要存取的数据库联系在一起,并包括用户想存取的数据,它与服务器或目录、后台DBMS(数据库管理系统)以及网络平台相联系。ODBC驱动程序管理器负责将应用程序的SQL语句以及其他的信息传递给驱动程序,而驱动程序则负责将结果集传回应用程序。
LSX兼容模块允许用户使用LotusScript语言来编写存取外部数据的程序,在访问ODBC类之前,需把下面的语句放置在(GLOBAL)对象的(OPTIONS)事件:
USELSX“*LSXODBC”
Notes的ODBCConnection、ODBCQuery、ODBCResultSet三个类为Notes提供了用ODBC标准存取外部数据库的属性和操作。ODBC Connection 用于连接到ODBC数据源;ODBC Query 用于定义一个SQL语句;ODBC ResultSet在结果集合上执行操作的 ODBC的数据存取特性。使用 LotusScript Language 编写公文归档程序将检索数据写入SQL Server 数据库,程序中首先要创建访问 ODBC的 3个类,然后使用ConnectTo函数连建立与SQL SERVER的连接,将标准查询语句赋给qry.sql,然后和结果集相连,执行函数result.execute查询出表中最大的 ID值,为在表中新增记录做准备。部分代码如下:
初始化与SQL SERVER相关变量:
建立与SQL SERVER的连接:实现增加新记录,有一种简单方法就是把组织好的insert语句赋值给qry.sql,然后执行result.excute。在实际运行过程中,大部分情况下可以正常运行,但在处理某些公文时会出现missing argument的错误提示。通过调试Lotus Script脚本并多次单步跟踪脚本的执行情况,发现当插入内容中包含单引号时,就会出现这种错误(一般公文中如果涉及到外国人的名字,则都会出现单引号),insert语句本身的单引号和插入内容中的单引号产生了混淆。一种解决方法是使用函数,把半角状态下的单引号转换成全角状态的单引号。但函数往往对字符串的长度有限制,而很多公文多会超出这个限制。且这种在整篇公文中遍历的查找相应字符,然后再转化的做法影响整个操作的效率。因此笔者采用的是另一种更可行和更高效的方法,用 addrow来增加新记录。这种方法除了避开了单引号的问题,对于增加的每一个字段都非常的清晰,不会像insert语句那样,把所有的内容都组合在一个语句中。Addrow方法可读性强,不容易遗漏内容,也便于增加或删除需要处理的字段。代码如下:
当然除了这些操作之外,Notes还可以在本环境中对关系型数据库进行更多的操作。例如增加表、删除表等。只需将相应位置用相应的SQL语句替换即可,可以用Create table来创建表,用INSERT,DELETE,UPDATE来更改表的内容。
用户只需要在自己的计算机上安装Lotus Notes6.5以上的客户端软件,创建好连接到SQL SERVER的ODBC数据源,使用本文中的公文归档程序,就可以轻松的把OA中的数据转移到档案管理系统中去。这不仅提高了设备管理的安全性、可靠性及工作效率,同时为设备管理者提供了快速的信息收集、传递和处理方法,方便了OA用户与档案管理人员之间的交流与合作。并且使得历史公文信息可以更快的被用户查询。这对办公自动化系统与档案管理系统具有十分重要的意义,使得办公自动化系统与档案管理系统的功能不断地强大,并为用户提供更好更优质的服务。
[1] 兰雨晴,晏海华,刘超,Lotus Domino/Notes群件技术教程[M].北京:机械工业出版社.2001.
[2] Notes数据库--文档数据库探究[EB/OL]. http://tech.csai.cn/dbms/.
[3] Lotus爱好者论坛[EB/OL]. http://www.lotusfans.com/forum/.
[4] 崇大志,何军.DOMINO应用系统中异构数据交换技术的研究与实现[J].电脑知识与技术.2007.