论文部分内容阅读
摘要: 该文介绍了Lotus Domino/Notes与关系型数据库的一种通用连接方法。通过在浏览器端的动态配置,提取关系型数据库中的数据,可以协助开发人员或系统管理员在WEB方式下实时地发布信息。
关键词:动态接口;Lotus Domino/Notes;RDBMS;ODBC
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)27-1879-02
The Designing of General Purpose Interface Between Domino/Notes and RDBMS
ZHAO Lei1, HU Ai-jun1,2, XIANG Feng-hong1
(1.Faculty of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650051,China;2.Yunnan Copper CO.,Ltd.,Kunming 650102,China)
Abstract: This paper introduces a general purpose interface between Domino/Notes and RDBMS. The designers and administrators can dynamically get data in RDBMS and issue information based on WEB by configuring in the browser.
Key words: general purpose interface; Lotus Domino/Notes; RDBMS; ODBC
1 前言
随着计算机技术和通讯技术的不断发展、完善,各种信息系统得到广泛应用。在这些系统中,如信息管理系统(MIS)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等系统大多基于关系型数据库,难以处理非结构化数据,如表格、文本和多媒体信息等;而基于Domino/Notes为开发标准办公自动化系统,擅长处理工作流和非结构化数据,但对数据的分析、统计能力较弱[1]。
因此,设计人员需要设计二者的接口程序以便结合二者优点实现企业的信息共享。出于实际需要,企业往往先开发基于关系型数据库的信息系统后设计办公自动化系统,所以接口是Domino/Notes开发环境下设计的。这个过程中,这种接口只针对某一具体的关系数据库、数据库中的某个表及表中某几个字段设计报表。如果要分别提取多个关系数据库中的数据则要重新设计程序。除此以外,如果在开发过程中发生需求变更或者进行系统升级,设计人员需根据所变化数据的内容再次编写代码并调整报表内容。
如此程序缺乏可移植性,造成大量的人力、物力的浪费。在解决上述问题中,作者基于Domino/Notes环境,构造一个适用于不同关系数据库接口并使之能够根据用户的需求由用户灵活定义获取数据内容。
2 接口设计
2.1 设计思路
该接口能够让用户在浏览器端自行选择数据库,并按照选中的数据库提取其中的表及其相关的多个字段名。通过这些信息的灵活选择,用户能够在一个指定文档的RTF域中生成一个动态的报表。由此,该接口满足了随用户业务发生变化报表也跟随发生变化的要求。
2.2 Domino/Notes与关系数据库连接的方法
Domino/Notes与关系数据库的连接一般可分为用可视化工具连接或编程连接。可视化工具通常有LEI(企业连接器)、DESC(Domino企业连接服务)等[1]。然而结合企业的实际情况,应用这些工具需要再次投入资金和人力,并且在WEB方式下难于根据用户需求进行设计。与上面可视化工具相比,编程的方式应用灵活、功能强大,可以按用户具体要求使用多种开发语言,如LotusScript和Java类进行程序设计。
LotusScript是一种面向对象的程序设计语言,作者在开发过程主要用到NotesSession类(当前数据库会话类)、NotesDatabase类(文档数据库类)、NotesDocument类(数据库文档类)和与ODBC数据源关联的类:ODBCConnection类(用于拆除、建立与ODBC的连接,访问数据库)、ODBCQuery类(ODBC数据库查询类,定义SQL语句)、ODBCReslutSet类(执行并返回ODBC数据库查询结果集)[2]。
2.3 数据源连接
Domino/Notes支持HTML、XML、JavaScript等语言与Domino/Notes元素混合使用,参与对浏览器端的页面进行设计[3]。通过Domino/Notes自身的公式语言:@Command([ToolsRunMacro]; "代理名称") 在服务器端调用代理,在浏览器端提取相应变量,与关系型数据库进行数据的交互。
1) 数据源名称提取
在Web页面调用代理,通过Domino服务器访问ODBC数据源,把数据源中的所有数据源名称存储在当前Domino数据库相应的“Dbsource”文档中。主要代码如下:
dsnList=con.ListDataSources ’//con 为ODBCConnection类
For n = Lbound(dsnList) To Ubound(dsnList)
subdsnList=dsnList(n)
Set doc = New NotesDocument(db)
doc.form = "Dbsource"
doc.DbSourceName=dsnList(n)
Call doc.save(True,False)
Next
2) 表名、字段名提取
同理,根据主文档中数据源名称,输入对应数据库的用户名称、密码,提取出该数据库中的所有表名。并选中其中一个表,把需要的字段名称选择出来。表名的数据储存在“Dbsource”文档的“答复文档”中,即“Table”文档。而字段名称的数据则储存在“答复的答复文档”中,即“Field”文档。
3) 与数据源的连接
最后用创建一个与ODBC数据源的连接“Connect”视图,可以在Web页面中通过用@DBcolumn和@Dblookup调用“Connect”视图中的数据,配置与ODBC数据源的动态连接。
2.4 报表设计
上述动态ODBC数据源连接配置成功后,用户根据业务要求,连接数据库并对所需的数据库中的表、字段自行提取,选择完毕后自动生成相应的Web报表。以下是连接数据库后提取数据生成报表的一个代码样例。
Set a = New NotesRichTextItem(doc,"result_list")
Do
Call result.NextRow()
num = num 1
a.AppendText("[<tr v align=middle bgcolor=#FFFFFF>]")
i = 0
Do While i<n
FieldName(i)=doc.getitemvalue("FieldName")(i)
a.AppendText("[<td>]"
关键词:动态接口;Lotus Domino/Notes;RDBMS;ODBC
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)27-1879-02
The Designing of General Purpose Interface Between Domino/Notes and RDBMS
ZHAO Lei1, HU Ai-jun1,2, XIANG Feng-hong1
(1.Faculty of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650051,China;2.Yunnan Copper CO.,Ltd.,Kunming 650102,China)
Abstract: This paper introduces a general purpose interface between Domino/Notes and RDBMS. The designers and administrators can dynamically get data in RDBMS and issue information based on WEB by configuring in the browser.
Key words: general purpose interface; Lotus Domino/Notes; RDBMS; ODBC
1 前言
随着计算机技术和通讯技术的不断发展、完善,各种信息系统得到广泛应用。在这些系统中,如信息管理系统(MIS)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等系统大多基于关系型数据库,难以处理非结构化数据,如表格、文本和多媒体信息等;而基于Domino/Notes为开发标准办公自动化系统,擅长处理工作流和非结构化数据,但对数据的分析、统计能力较弱[1]。
因此,设计人员需要设计二者的接口程序以便结合二者优点实现企业的信息共享。出于实际需要,企业往往先开发基于关系型数据库的信息系统后设计办公自动化系统,所以接口是Domino/Notes开发环境下设计的。这个过程中,这种接口只针对某一具体的关系数据库、数据库中的某个表及表中某几个字段设计报表。如果要分别提取多个关系数据库中的数据则要重新设计程序。除此以外,如果在开发过程中发生需求变更或者进行系统升级,设计人员需根据所变化数据的内容再次编写代码并调整报表内容。
如此程序缺乏可移植性,造成大量的人力、物力的浪费。在解决上述问题中,作者基于Domino/Notes环境,构造一个适用于不同关系数据库接口并使之能够根据用户的需求由用户灵活定义获取数据内容。
2 接口设计
2.1 设计思路
该接口能够让用户在浏览器端自行选择数据库,并按照选中的数据库提取其中的表及其相关的多个字段名。通过这些信息的灵活选择,用户能够在一个指定文档的RTF域中生成一个动态的报表。由此,该接口满足了随用户业务发生变化报表也跟随发生变化的要求。
2.2 Domino/Notes与关系数据库连接的方法
Domino/Notes与关系数据库的连接一般可分为用可视化工具连接或编程连接。可视化工具通常有LEI(企业连接器)、DESC(Domino企业连接服务)等[1]。然而结合企业的实际情况,应用这些工具需要再次投入资金和人力,并且在WEB方式下难于根据用户需求进行设计。与上面可视化工具相比,编程的方式应用灵活、功能强大,可以按用户具体要求使用多种开发语言,如LotusScript和Java类进行程序设计。
LotusScript是一种面向对象的程序设计语言,作者在开发过程主要用到NotesSession类(当前数据库会话类)、NotesDatabase类(文档数据库类)、NotesDocument类(数据库文档类)和与ODBC数据源关联的类:ODBCConnection类(用于拆除、建立与ODBC的连接,访问数据库)、ODBCQuery类(ODBC数据库查询类,定义SQL语句)、ODBCReslutSet类(执行并返回ODBC数据库查询结果集)[2]。
2.3 数据源连接
Domino/Notes支持HTML、XML、JavaScript等语言与Domino/Notes元素混合使用,参与对浏览器端的页面进行设计[3]。通过Domino/Notes自身的公式语言:@Command([ToolsRunMacro]; "代理名称") 在服务器端调用代理,在浏览器端提取相应变量,与关系型数据库进行数据的交互。
1) 数据源名称提取
在Web页面调用代理,通过Domino服务器访问ODBC数据源,把数据源中的所有数据源名称存储在当前Domino数据库相应的“Dbsource”文档中。主要代码如下:
dsnList=con.ListDataSources ’//con 为ODBCConnection类
For n = Lbound(dsnList) To Ubound(dsnList)
subdsnList=dsnList(n)
Set doc = New NotesDocument(db)
doc.form = "Dbsource"
doc.DbSourceName=dsnList(n)
Call doc.save(True,False)
Next
2) 表名、字段名提取
同理,根据主文档中数据源名称,输入对应数据库的用户名称、密码,提取出该数据库中的所有表名。并选中其中一个表,把需要的字段名称选择出来。表名的数据储存在“Dbsource”文档的“答复文档”中,即“Table”文档。而字段名称的数据则储存在“答复的答复文档”中,即“Field”文档。
3) 与数据源的连接
最后用创建一个与ODBC数据源的连接“Connect”视图,可以在Web页面中通过用@DBcolumn和@Dblookup调用“Connect”视图中的数据,配置与ODBC数据源的动态连接。
2.4 报表设计
上述动态ODBC数据源连接配置成功后,用户根据业务要求,连接数据库并对所需的数据库中的表、字段自行提取,选择完毕后自动生成相应的Web报表。以下是连接数据库后提取数据生成报表的一个代码样例。
Set a = New NotesRichTextItem(doc,"result_list")
Do
Call result.NextRow()
num = num 1
a.AppendText("[<tr v align=middle bgcolor=#FFFFFF>]")
i = 0
Do While i<n
FieldName(i)=doc.getitemvalue("FieldName")(i)
a.AppendText("[<td>]"