Domino和关系数据库
- 格式:docx
- 大小:26.86 KB
- 文档页数:9
Lotus Domino是当今办公自动化系统的主流开发平台之一,Domino自带一个非关系型数据库——文档型数据库,而目前大部分企业的信息都储存在诸如SQL Server等关系型数据库中,因此,在开发办公自动化系统过程中势必要涉及Domino和关系数据库的数据交换问题。
下面介绍一些润乾报表从domino数据库取数的方法。
主要分两种方式:一:JDBC方式1、需要的环境:在连接前必须安装:a.Sun JDK 1.1.6或是更高的版本,并设置JVM的环境。
b.Lotus Domino Server 4.6 或是更高的版本。
c.Lotus Domino Driver for JDBC 1.1 。
2、连接程序编写:a.必须将包 lotus.jdbc.domino.* 包含在程序开头。
例:importlotus.jdbc.domino.*b.调出Domino的驱动程序。
例:Class.forName(lotus.jdbc.domino.DominoDriver); 注意捕捉ClassNotFoundException异常。
c.给出JDBC URL。
例:url=jdbc:domino:/DatabaseName.nsf/ServerName 解释为jdbc:domino: 为JDBC URL连接协议的固定字,DatabaseName.nsf 为Domino数据库文件名,ServerName 为Domino服务器名。
假设连接服务器名为Webserver上的names.nsf , url=jdbc:domino:/names.nsf/webserver ;假设连接服务器名为Webserver,office目录下的job.nsf ,url=jdbc:domino:/officejob.nsf/webserver ;设置连接超时100秒,url=jdbc:domino:/simpler.nsf;threadtimeout=100 。
协同应用平台Domino数据迁移解决方案Lotus Domino/Notes简介Domino数据库结构模式:1.Lotus Domino是先进的文档数据库,广泛应用于办公自动化、工作流控制、协同工作环境等方面,Domino的一个主要技术是信息检索技术,包括全文检索、关键字查询、视图和文件夹等多种方式。
2.文档型数据库与关系型数据库的区别与联系区别:非结构化数据与结构化数据。
联系:数据库对象类比表.3.Domino系统的主要组件有Domino服务器、Adminstrator、Designer和Notes客户端。
Domino服务器集企业级电子邮件、分布式文档数据库与快速应用开发与一体。
Adminstrator是管理服务器的软件,用于监控、管理和性能优化.Designer是应用程序开发软件。
Notes是工作站端软件,集成了邮件、日历、WEB浏览和信息管理.4.Domino数据库结构由表单、域、文档、视图及其他显示部分组成。
表单:用于创建表单外观和功能的组件.域:是构成表单的重要元素,用以数据录入、存放和显示.文档:存储信息的主要形式,相当于关系型数据库的行记录。
视图:是文档的现实窗口,可加条件。
OA的迁移模块简介【项目名称】×××××政府【公文】公文管理主要是国家行政机关、企事业单位在行政管理过程中形成的具有法定效力和规范体式的文书,是依法行政和进行公务活动的重要工具。
本模块主要实现发文、收文、文件送审签的网上自动流转,从而提供了更加规范化、制度化、科学化、流程化的办理方式,简化了纸质办理方式的繁琐性,使工作效率得到了大大的提高. 因此公文历史数据的查阅和复用频率很高.【政务信息】OA政务信息模块是信息的一个重要门类,是政务活动中反映政务工作及其相关事物的情报、情况、资料、数据、图表、文字材料和音像材料等的总称.【项目名称】××××××集团【集团公司发文】参看【公文】Domino数据迁移具体技术实现方案Domino数据源搜索提供两种方法:一、使用Domino因特网ORB间协议DIIOP访问×××××政府原OA系Domino数据库,公文和政务信息等多个模块历史数据需要迁移至新OA中。
Domino 使用 ODBC 連接數據庫Posted on 2005-07-07 08:56 James Wong 阅读(106) 评论(0) 编辑 收藏 收藏至 365Key 所属分类: Lotus | Domino Setup An Odbc Connection Automatically Stephane Morin 17 Nov 1999 Rating: --- (out of 5)This script show you how to setup an ODBC connection without any user intervention. The script uses the Windows Registry and works on Windows 95/98/NT Code Declaration Event: Public Const REG_SZ = 1 'Unicode nul terminated string Public Const REG_DWORD = 4 '32-bit number Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const SYNCHRONIZE = &H100000 Public Const STANDARD_RIGHTS_ALL = &H1F0000 Public Const STANDARD_RIGHTS_READ = &H20000 Public Const KEY_QUERY_VALUE = &H1 Public Const KEY_SET_VALUE = &H2 Public Const KEY_CREATE_SUB_KEY = &H4 Public Const KEY_ENUMERATE_SUB_KEYS = &H8 Public Const KEY_NOTIFY = &H10 Public Const KEY_CREATE_LINK = &H20 Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE)) Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) Public Const ERROR_SUCCESS = 0& Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (Byval hKey As Long, Byval lpSubKey As String, Byval ulOptions As Long, Byval samDesired As Long, phkResult As Long) As Long Declare Function RegCloseKey Lib "advapi32.dll" (Byval hKey As Long) As Long Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (Byval hKey As Long, Byval lpValueName As String, Byval lpReserved As Long,lpType As Long, Byval lpData As String, lpcbData As Long) As Long Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (Byval hKey As Long, Byval lpValueName As String, Byval Reserved As Long, Byval dwType As Long, Byval lpData As String, Byval cbData As Long) As Long Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (Byval hKey As Long, Byval lpSubKey As String, phkResult As Long) As Long Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (Byval hKey As Long, Byval dwIndex As Long, Byval lpValueName As String, lpcbValueName As Long, Byval lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As LongSub Initialize() Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Dim hKeyHandle As Long Dim RetType As Long Dim RetSize As Long Dim lValueLen As Long Dim lDataLen As Long Dim lpReturnedString As String*127 RetSize = 126 lngCurIdx = 0 lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWAREODBCODBCINST.INIODBC Drivers" , 0, KEY_READ, hKeyHandle) 'Check if an ODBC Driver exist on the user workstation Do lValueLen = 2000 strValue = String(lValueLen, 0) lDataLen = 2000 lResult = RegEnumValue(hKeyHandle, lngCurIdx, Byval strValue, lValueLen, 0&, REG_DWORD, Byval lngData, lDataLen) lngCurIdx = lngCurIdx + 1 If Instr(1, strValue, "Lotus NotesSQL") Then lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWAREODBCODBCINST.INI" & strValue, 0, KEY_READ, hKeyHandle) lResult = RegQueryValueEx(hKeyHandle, "Driver", 0, RetType, lpReturnedString, RetSize)'Specified the User DSN parameters DataSourceName = db.Title DatabaseName = db.FilePath DriverPath = lpReturnedString KeepTempIdx = "0" MapSpecialChars = "Y" MaxLongVarcharLen = "512" MaxRels = "20" MaxStmtLen = "4096" MaxSubquery = "20" MaxVarcharLen = "254" Server = db.Server ShowImplicitFlds = "0" ThreadTimeout = "60" DriverName = strValue 'Add the new ODBC connection key lResult = RegCreateKey(HKEY_CURRENT_USER, "SOFTWAREODBCODBC.INI" & DataSourceName, hKeyHandle) lResult = RegSetValueEx(hKeyHandle, "Database", 0&, REG_SZ, Byval DatabaseName, Len(DatabaseName)) lResult = RegSetValueEx(hKeyHandle, "Driver", 0&, REG_SZ, Byval <WHA DISCLAIMER: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.。
LotusScrip Notes类库介绍Button类:代表表单或文档的操作、按钮或热点。
Field类:代表表单中的一个域Navigator类:代表导航器按钮、热点或其他对象。
NotesACL类:代表数据库中的存取控制表(ACL)NotesACLEntry类:表示存取控制表中的一个单独项目,可以是个人、群组或服务器NotesAgent类:表示一个代理。
代理可以是公开的或个人的,也可以是Release3的宏。
NotesDatabase类:代表一个Notes数据库。
NotesDataRange类:代表日期和时间的范围。
NotesDataTime类:代表日期和时间。
提供了在LotusScript日期-时间格式与Notes 格式之间转换方式。
NotesDbDirectory类:在指定的服务器或本地计算机上表示Notes数据库。
Notesdocument.ollection类:表示数据库中的文档集合,根据指定的标准选哲NotesEmbeddedObject类:代表以下任意内容:嵌入对象,对象链接,文件附件NotesForm类:代表数据库中的表单NotesInternational类:代表操作系统中的区域设置。
例如:windows控制面板中的区域设置。
当在操作环境中这些设置发生任何改变时,Notes立即把它作为新设置NotesItem类:表示文档中的一段数据。
在用户界面中,notes通过表单中的域来显示文档中的条目。
当表单中的域和文档中的条目名称相同时,该域显示该条目(例如:Subject域显示Subject条目)文档中的所有条目都可通过LotusScript访问,除非表单是用于在用户界面中显示文档的NotesLog类:允许你记录在script执行过程中所进行的操作和发生的错误。
你可以将操作和错误记录到Notes 数据库邮件便捷中,文件(本地运行的scripts),代理日志NotesName类:代表一个用户或服务器名称NotesNewletter类:包含来源于或链接到若干其他文档的信息的一个或一组文档NotesRichTextItem类:代表RTF类型的条目NotesSession类:表示Notes当前的script环境,提供对环境变量,通讯录、有关当前用户信息以及当前notes平台和版本号信息的访问NotesUIDatabase类:代表在Notes工作台上当前打开的数据库NotesUIdocument.:表示当前在Notes工作台中打开的文档NotesUIView类:代表Notes工作台当前的视图NotesUIWorkspace类:表示当前的Notes工作台窗口NotesView类:代表数据库中的视图或文件夹,并提供访问其中文档的权限NotesViewColumn类:代表视图或文件夹中的一个列ODBCConnection类:代表与数据源连接的ODBC Data Access特性ODBCQuery类:代表定义一个SQL语句的ODBC数据存取特性。
协同应用平台Domino数据迁移解决方案Lotus Domino/Notes简介Domino数据库结构模式:1.Lotus Domino是先进的文档数据库,广泛应用于办公自动化、工作流控制、协同工作环境等方面,Domino的一个主要技术是信息检索技术,包括全文检索、关键字查询、视图和文件夹等多种方式。
2.文档型数据库与关系型数据库的区别与联系区别:非结构化数据与结构化数据。
联系:数据库对象类比表。
3.Domino系统的主要组件有Domino服务器、Adminstrator、Designer和Notes客户端。
Domino服务器集企业级电子邮件、分布式文档数据库与快速应用开发与一体。
Adminstrator是管理服务器的软件,用于监控、管理和性能优化。
Designer是应用程序开发软件。
Notes是工作站端软件,集成了邮件、日历、WEB浏览和信息管理。
4.Domino数据库结构由表单、域、文档、视图及其他显示部分组成。
表单:用于创建表单外观和功能的组件。
域:是构成表单的重要元素,用以数据录入、存放和显示。
文档:存储信息的主要形式,相当于关系型数据库的行记录。
视图:是文档的现实窗口,可加条件。
OA的迁移模块简介【项目名称】×××××政府【公文】公文管理主要是国家行政机关、企事业单位在行政管理过程中形成的具有法定效力和规范体式的文书,是依法行政和进行公务活动的重要工具。
本模块主要实现发文、收文、文件送审签的网上自动流转,从而提供了更加规范化、制度化、科学化、流程化的办理方式,简化了纸质办理方式的繁琐性,使工作效率得到了大大的提高。
因此公文历史数据的查阅和复用频率很高。
【政务信息】O A政务信息模块是信息的一个重要门类,是政务活动中反映政务工作及其相关事物的情报、情况、资料、数据、图表、文字材料和音像材料等的总称。
【项目名称】××××××集团【集团公司发文】参看【公文】Domino数据迁移具体技术实现方案D omino数据源搜索提供两种方法:一、使用Domino因特网ORB间协议DIIOP访问×××××政府原OA系Domino数据库,公文和政务信息等多个模块历史数据需要迁移至新OA中。
DOMINO文档数据库摘要:随着应用领域的不断拓展和多媒体技术, 人们发现关系数据库的许多限制和不足,因而数据库技术进入了“后关系数据库时代”。
文档数据库由此应运而生。
概要地从数据格式、数据库结构和WEB发布数据三个方面阐述了文档数据库,同时也区别了文档数据库与过去存储数据的文件系统的不同。
关键词:数据库;Internet;文档数据库;WEB数据库服务器;目录DOMINO文档数据库 (1)一、文档数据库简述 (3)(一)文档数据库历史 (3)(二)文档数据库特点及其功能 (3)二、DOMINO数据库简述 (4)(一)DOMINO数据库发展历程 (4)(二)DOMINO应用 (4)1.DOMINO应用领域 (4)2.办公自动化系统的开发平台 (5)(三)Lotus Domino的组成 (5)三、DOMINO主要开发元素 (6)(一)表单 (6)1.什么是表单(文档规划者) (6)2.表单的内容 (6)3.表单的功能及特点 (7)(二)视图 (7)1.视图的概念 (7)2.视图的外观和类型 (8)3.视图的功能及特点 (8)(三)代理 (8)1.代理的概念 (8)2.代理的功能 (8)3.代理的命名规范 (9)(四)子表单 (9)1.子表单概念 (9)2.子表单的用法 (9)3.子表单的功能 (9)(五)导航器 (9)(六)大纲 (10)(七)页面 (10)(八)帧结构集(一种框架的设计) (10)四、域 (10)一、文档数据库简述(一)文档数据库历史然而,随着用户应用需求的提高、硬件技术的发展和Intranet/Internet提供的多彩的多媒体交流方式,用户对多媒体处理的要求从简单的存储上升为识别、检索和深入加工,正是用户呼唤出"通用"数据库服务器来处理占信息总量70%的声音、图像、时间序列信号和视频等复杂数据类型。
据有关数据,1996年,全球数据库市场的销售额已接近40亿美元,预计到2000年,数据库市场销售额将达到80亿美元。
Domino数据库存取控制列表数据库存取控制列表((ACL)基本知识来源:互联网整理: 2007-10-29 [John]内容提要在Domino中,数据库的存取控制列表是Domino安全性的重要组成部分,也是决定每个用户能否访问数据库的主要设置。
本文详述了存取控制列表的各项设置,以帮助用户更好地理解并使用数据库的ACL。
ACL的“基本”页面ACL的“角色”页面ACL的“日志”页面ACL的“高级”页面存取控制列表(ACL) 中可接受的名称正文在Domino中,数据库的存取控制列表是Domino安全性的重要组成部分,也是决定每个用户能否访问数据库的主要设置。
每个数据库都有自己的存取控制列表(Access Control List, 以下简称ACL)。
打开一个数据库,选择菜单“文件”-“数据库”-“存取控制”,就可以看到该数据库的ACL。
ACL分为四个页面:基本、角色、日志和高级。
以下分别说明这四个页面中的内容。
并说明了ACL中可以接受的名称格式。
ACL的“基本”页面ACL的核心功能都包含在“基本”页面中。
在“个人/服务器/工作组”中选择“全部显示”,所有存取级别的用户都会被列出。
也可以选择仅查看“管理者”、“设计者”等某个存取级别的用户。
当选中某个用户名时,对话框中会显示他的用户类型和存取级别,以及与此存取级别相应的一些扩展和限制选项。
用户类型和存取级别指定了用户对此数据库的最大权限。
数据库的管理员可以增加、删除或修改用户的权限。
返回七个存取级别ACL中共有七个存取级别:管理者、设计者、编辑者、作者、读者、存放者和不能存取者。
了解这些级别的含义是了解ACL工作机制的基础。
下图显示了每个存取级别的缺省权限,从不能存取者开始,每个级别都比下一级拥有更多的权限,直到拥有所有权限的管理者。
(每个级别的权限都包含其下所有级别的权限)。
不能存取者此级别表示用户没有任何权限,不能存取数据库。
管理员可以开放给不能存取者的权限只有“读取公用文档”和“写公用文档”。
Domino数据库配置,启动diiop服务1、配置原因:我们设计的移动OA,是基于java的客户端项目,需要 domino启动 diiop服务,这样java才可以连接到domino数据库。
2、配置对原数据库的影响:不影响原数据库的执行,只是使原domino数据库又多提供了一个可以供java访问的接口,即提供DIIOP服务。
3、配置方法:(1) 在D:\Lotus\Domino找到notes.ini,在记事本中打开,找到ServerTasks=Update,Replica,Router,AMgr,AdminP,CalConn,Sched,HTTP,IMAP,LDAP,在其后输入: ,DIIOP ,保存后退出。
如图:重新启动domino server,然后在Domino Server启动的控制命令行上输入命令“Tell DIIOP Show Config”,Domino会告诉我们DIIOP一系列参数,如图:(2) 用Domino Admin 7管理工具打开原数据库,检查 Domino Directory 中 Server 文档。
转至 Ports 选项卡,然后转向 Internet Ports 选项卡。
查看 IIOP 选项卡,“Authentication options”中的“Name & password”应该是Yes,如下图所示。
这些部分有用于指定端口号以及启用/禁用端口的字段。
下图显示了 Internet Ports--IIOP 选项卡:(3) 检查 Domino R7的Directory 中 Server 文档。
转至 Security 选项卡,然后查看 “Server Access”中的“Access Server”应该是“All users can access this server”,如下图所示。
只要满足(4) 检查 Domino 的Directory 中 Server 文档。
Lotus Domino学习笔记之三简单存储及展现基础知识Domino中的数据存储结构与普通的关系型数据库不相同,这里每次存储的记录称为文档,类似关系型数据库中的表中的记录,但不同的是,关系数据库中每条记录的结构必须与其所在的表的结构相同,而Domino中没有表的概念,因此每一条文档的结构是随意的,例如第一条文档可以有3个字段,第二条文档则可以有5个字段。
实现过程这里给出了一个Domino中最简单的保存数据的方案,需要用到表单。
我们继续使用上次中的HelloWorld.nsf数据库1. 在Designer中打开上次使用的HelloWorld.nsf数据库,在左边栏选择“表单”,然后在中间栏顶部点击“新建表单”2. 在新建的表单中输入“名字”两个字,然后点击顶部下拉菜单创建 - 域,此时在表单界面上会出现一个无标题的域,双击域出现域的属性选单,在名称处输入“name”3. 同样的方式再创建一个性别、年龄域,分别命名为sex和age,这样表单域的就完成了,也可以说是确定了此表单保存文档的格式,完成后效果如图4. 继续点击顶部下拉菜单创建 - 热点 - 按钮,在弹出框的标签中输入“保存”,如图5. 然后按Ctrl+S保存表单,命名为fPerson,最终结果如图:6. 我们创建的保存按钮但是按钮现在什么事情也干不了,因此我们需要为按钮写上保存逻辑。
点击保存按钮,看到右下的空白窗口,确保顶部“运行”的状态为“客户机”和“公式”然后在下面窗口中输入以下代码@Command([FileSave];@Command([FileCloseWindow];点击此窗口顶部的绿色小勾,然后再按Ctrl+S保存此表单7. 至此一个可以保存数据的表单已经完成,可以访问http://localhost/HelloWorld.nsf/fPerson?OpenForm来看效果无法访问?是权限的问题,记得上次我们HelloWorld里面将Default的权限设置为“读者”了嘛?因为读者没有创建文档的权限,因此是无法访问表单的,要访问一个表单,至少需要是“编辑者”,因此还是在数据库上右键 - 应用程序 - 访问控制,将Default的权限改为编辑者即可8. 在浏览器中输入值,然后点击“保存”按钮,如果出现一个Form processed的页面,表示数据已被保存9. 如何验证我们的数据已经被保存了呢?我们可以通过一个简易的视图来查看。
1:ODMA(Open Document Management API)compliance,符合开放文档管理API标准,允许用户在他们惯用的应用软件中使用Domino.Doc的功能,比如在Microsoft Office和Lotus SmartSuite中,用户可以用这些应用软件在Domino.Doc中打开和保存文挡。
2:Security,提供在文挡库,档案库,binder和文档中的多种安全层次。
3:Check-in and check-out,当多个用户在同时编辑和管理同一个文档的时候,(签入和签出)功能能保证文档的完整和安全。
4:能在文档库中查找多个档案并且能以单一的视图返回结果。
5:能存储文档的多个版本,保证能灵活全面清楚地查看在文档在审核过程中各个步骤的情况。
6:生命周期(策划、回顾、批准、发布和归档文档)的管理功能。
7:Lotus Workflow integration.与Lotus Workflow集成,能进行工作流进展和作业状态的管理。
8:Sametime integration.与Sametime集成,提供了文档编辑和管理状态的实时传输。
9:与Windows Explorer集成,用熟悉的文件管理系统进行Domino.Doc的工作。
10:灵活支持所有终端用户的Web browser。
11:支持在不同的域之间的数据访问。
12:服务器到服务器端的分布式档案库及其内容的远端定位。
Domino.Doc 的结构:The Site Administration DatabaseDomino.Doc 提供the Site Administration database,并且提供Site Administrator的角色,来创建和管理数据库(libraries),它是Domino.Doc结构的基础。
The LibraryThe Library是进入Domino.Doc的端口,它是用户登录文档存储系统和存取文档的“main view”和“home page”。
开始学习Lotus了,以前从来没有接触过,只是希望通过写自己的一步一步的成长历程更能鞭策自己。
所写的内容不整理,没有任何规律。
只记着给自己看sorry了,欢迎所有的高手来支持我,给我解疑答惑。
希望我最后学习的知识能跟java结合起来,对于j2ee我知道一些,比如strust2/webwork,spring ,hibernate,等传统的框架,知道dwr,ext等ajax技术,知道jbpm流程开发等。
不管了,学习!1.今天开始了解视图了,定义是:视图时文档的排序或者分类列表,它是对存储在数据库中的数据进行访问的入口。
所以我的理解是:如同关系数据库将自己想要的字段查询出来。
在视图选择的公式是:select @ALL,包含视图中的所有的数据库文档。
几个小例子:a. select Form="ActionItem" & status="open" 查询所有以form为ActionItem且未打开的表单的文档。
b. select !IsResponseDoc 选择所有仅以主文档创建的表单的文档,排除任何形式的答复文档。
c. select form!="mywork" 查询所有不是以mywork创建的form的文档。
2.列:每个视图中列式显示关于所列文档的一类信息。
如创建日期,作者,主题等。
设计人员可以设置每一列显示的信息或值。
可以通过简单功能,域,公式来计算。
例子:a. 在“产品信息”列中加如下公式:product+":"+@Text(Quailty).b. 在“销售情况”列中加如下公式:@If(Sales_Febuary>60000,"GreatMonth";"goodMonth");不用说,一看就明白想显示的是什么吧。
c. 当然,我们可以让列显示图标,如邮件有附件时显示一个环形针图标:@If(@Attachments;5;0),即如果有附件,则选择第5个图标,否则为0,即nothing。
基于Domino开发的产品缺点1.开放性差:Domino文档数据库不是标准的数据格式,不支持各种SQL检索工具通过ODBC访问,不支持SQL语句查询,数据共享性、开放性差,难以与其他系统集成,特别很难实现与空管总局的公文交换。
通过IBM Lotus NotesSQL建立OBDC可以访问Domino 数据,支持SQL语句查询,并且Domino7.0以后版本对db2有良好的衔接,我们已经与北京书生公文交换系统及北京TRS公司进行了公文交换实现另外IBM收购莲花后从Domino5开始在产品里封装了LEI,DECS等技术解决与关系型数据库的整合工作,写这条的人对Domino的认识还停留在七八年前,缺乏实战经验。
2.速度慢:Domino是基于文档的数据库、不具备数据快速检索功能。
当数据库中文档数超过二到三万条时,几乎显得无能为力。
在服务器上对1万个文档的数据库目录列表就需等待1分20秒左右,超出一般用户的可忍受程度。
只要我们对用户的业务进行合理的设计,可以解决多条数据快速检索功能,没有哪里证明1万个文档的数据库目录列表就需等待1分20秒左右。
且空管现在用的环境中数据也远远不止1万个文档,在没有做优化的情况下响应时间也没有到1分多3.统计差:在办公信息系统中,实时地对公文运行状况进行分类汇总、监控是必不可少的功能。
而 Domino 是基于文档的小型数据库,如要求进行多维数据汇总,其实现过程十分复杂,效率极其低下,反应缓慢,远不如关系型数据库。
我们通过与DB2良好的衔接,完成可以实现分类汇总、监控等众多功能,最近我们做的襄樊发改委的项目管理和财务管理系统就是采用Domino8.0做支撑的,里面涉及到大量的统计分析工作,Domino完成的都很好,附件中有这两个系统的设计文档供空管参考4.扩展难:由于Domino是个封闭系统,与基于J2EE和关系型数据库的系统相比,功能扩展较难,由于缺乏标准接口,也造成与其他系统集成困难。
Domino中表单、页面、视图、文档和域之间的关系1.表单(Form)-关系型数据库里的表设计关系型数据库中通过表设计来定义这张Table上会有哪些字段,字段的类型以及长度等,然后通过Table来创建符合这个Table定义的记录(Record)通常情况下,Lotus通过表单(Form)来创建,编辑和显示记录(在Lotus里称为文档Document)补充:A. 除了对文档进行处理外,表单也常常作为应用程序界面显示的途径,比如可以在表单上放按钮,导航,内嵌视图等,这些用法可能不以创建和编辑文档为目的B.表单创建与编辑文档的功能,通过在表单上放置域(Field)来实现。
2.页面(Page)-类似于表单,但是页面上不能放置域(Field),所以页面不能用来对文档进行处理。
3.视图(View)-关系型数据库中的Table,或者View(更接近于View)通过选择公式,将符合条件的文档Select到某个视图中。
同一个视图中的文档可以由不同的Form创建而来并不需要View中的所有文档中具有相同的域(比如文档A中可能有a1,a2,a3等域,文档B中可能有b1,b2,b3等域,而这两个文档可能归在同一个视图中)4.文档(Document)-关系型数据库中的记录与关系型数据库不同的是,文档中的域不一定需要与创建的表单中的域定义一致。
比如通过表单创建时,文档有a1.a2,a3三个域,通过其它办法,可以增加或者减少域。
(这个就是文档型数据库结构与关系型数据库的主要区别)一般来说文档中都有一个Form的域名,值就是创建这个文档的表单名,当打开这个文档时,系统默认用这个指定的Form来显示或者编辑这个文档。
你可以手工通过代码或者计算公式,改变这个域的值。
通过这种方法,可以控制用不同的表单打开同一个文档。
工作流常用这种方法,在不同的节点间切换用不同的表单来显示文档内容。
A.当文档的域多于显示的表单的域时,只显示表单上的这些域,其它域不显示,但是编辑和保存时默认情况下不改变这些隐藏域的值。
Domino和关系数据库Domino和关系数据库进行交互是日常项目开发中经常涉及到的一个方面,每个domino开发人员都写过这样的程序,本文就这个方面做一下简单的总结。
一、工具篇1、使用LEI(Lotus Enterprise Integrator)LEI的英文全称是Lotus Enterprise Integrator ,它是以前大家熟知的NotesPump的升级产品,是基于服务器的数据分布产品,提供了定义和管理以下事物的环境:*大量的数据交换*数据同步*事件驱动和实时的数据传输LEI服务器处理指令,建立到外部数据源的连接,按照定义好的活动的条件来传输数据.它要求Domino 4.6x 或 5.x以上版本的服务器,可以单独运行,也可以作为一个内部的服务器任务运行.Lotus Enterprise Integrator (LEI) 6.x 可以将附件从 Domino 数据库移到 RDBMS 表中,从而可以从 RDBMS 内读取这些附件。
更重要的是,此项操作可以快速进行,而不需要编写任何脚本代码。
关于此方面,IBM官方网站上有对此操作的详细步骤说明,有兴趣的同行可以阅读一下,链接:/developerwork ... achments/index.html2、DESC(Domino Enterprise Connection Services )DECS的英文全称是Domino Enterprise Connection Services ,是LEI的子集,它仅仅是实时的Notes活动.DECS是一个基于向导器的服务器任务,包含于Domino 4.6.3及其以后的版本.它修改NOTES.INI文件以包括实时的扩展:extmgr_addins=ndecsext.dll (for NT)下面,介绍一下DECS的用法,本文将以一个非常简单的例子为大家说明一下使用过程,更复杂的使用,大家可以据此做更深入的研究。
我们以用notes导入一个Access数据库为例(该数据库已注册到ODBC中)预备工作:保证有你要导入的Notes数据库。
保证有Access数据库保证ODBC已经加入该Access数据库数据源。
第一步:如果你是第一次使用DECS,请查看你的服务器的DATA目录下是否有decsadm.nsf的数据库,如果没有这个数据库,要以Domino自带的名为decsadm.ntf的模板建立本数据库,关于DECS 的相关设置都会在本数据库中进行。
第二步:在服务器的控制台上输入Load DECS,第三步:任务启动后,打开服务器上的Decsadm.nsf数据库。
第四步:单击"Create Connection",创建一个连接。
选择你要创建的数据库类型(DB2,Oracle,ODBC)。
本例选择ODBC.第五步:打开连接表单后:表单中有以下几项:Data Source:输入数据源。
本例中输入ODBC中你要连接的数据源的名字。
Username:输入能访问该数据源的用户名。
Password: 输入能访问该数据源的用户密码Password encryption key:单击后对你填入的用户密码,在Notes中加密。
Selection Type:你选择的类型是Table ,还是ViewOwner:选择Table的拥有者。
Name: 选择你要连接哪一个Table.填完后保存退出。
第六步:单击"Create Activity",创建一个"动作"。
系统提供了一个动作向导,单击"Create Activity",系统打开表单后弹出一个动作向导,如果你确定使用的话,单击"确定"。
选择你要导入到哪个Notes数据库。
选择你要导入到该数据库的哪个表单。
选择你使用哪个"连接"(第四步创建的)选择你到导入外部数据库的哪个Table和View.这时会出来Key和数据域的映射。
Key:是你的主索引。
Field:是你要分别对应的字段。
在左边选择Notes的域,右边选择外部数据库的字段。
选择你对外部数据库的动作Open,create,update,delete输入你为该导入动作取的名字。
然后保存关闭当前文档。
第七步:1.查看"Activities"导航,选定你要激活哪个"动作"2.单击"Start",启动该动作。
如果不成功,你单击"log",如果你想停止该动作请单击"Stop"图标说明:第一个图标表示该动作没激活,第二个图标表示动作正在激活,第三个图标表示动作已激活。
第八步:1.打开你要导入的Notes数据库,用你刚才第六步第2点的表单创建文档。
2.在你对应KEY的域中输入输入外部数据库的某一个数据。
如:如果我把Access数据库中table的ID字段作为key,而对应notes中的test域,那么我们就应该在test域中输入:如:"10203"3.保存当前该文档。
第九步:在视图中打开刚才创建保存的Notes文档。
我们就会发现在其他映射的域都会出现对应在外部数据库中的数据。
这样外部数据库中的数据就引入到了Notes中了。
DECS与LEI存在一定的区别,大致可以概括为:1 LEI提供了一个多功能的数据访问工具集,可以对其编程;DECS仅限于事先定义好的功能;2 LEI能处理大规模的数据传输,DECS仅工作在文档级;3 LEI 能适用于两个非Notes的数据源,DECS要求Notes作为一个数据源。
3、和DB2的数据交互Domino在发布版本7的时候,就提供了Domino和DB2的数据集成功能,只是在这个版本上,IBM也只是做一下尝试,并不对此项功能进行技术支持以及其它的相关服务,随着Domino8的发布,IBM官方声明Domino8已经支持这个功能了,个人感觉,这里与其说是和DB2的数据交互,不如叫和DB2的数据共享。
按照IBM提供的相关帮助文档,进行正确的配置以后,就可以达到将所有Domino的数据移植到DB2中,使Domino中的数据库只剩一个躯壳,所有真正的数据都存在DB2中,我查看了一下,这样配置之后,Domino中的数据库仅剩10几个字节,但是对用户来说,没有任何变化,这个功能非常强大,只可惜目前只支持DB2关系数据库,毕竟数据库也是人家自己的东西,也许在不久的将来会支持其它流行关系数据库吧,期待ing!对于这方面的使用,大家仔细参考帮助照做即可,这里就不多说了。
二、程序篇1、使用ODBC使用这个解决方案的前提条件,下面两个条件必具其一:a、程序是运行在客户端,即:CS模式,且客户端所在操作系统是window系列;b、程序运行在服务器,且服务器所在操作系统是windows系列;c、在unix上使用第三方辅助工具可以建立odbc,如果是这样,也是可以使用这个解决思路的。
本解决思路主要是使用Domino提供的三个类:ODBCConnection、ODBCQuery、ODBCResultSet,暂时手头上还没有这方面的例子,所以就不提供了,如果有的兄弟,请发上来,我编辑到本文章中,提前谢了。
大家同样可以参考Designer的帮助,找到一些启示。
2、使用JDBC一般情况下,不建议在Domino编程中使用java,这个众所周知,Lotus对Java的支持实在不敢恭维,但是如果受客观条件的限制,只能用JDBC,那就没办法了,比如我们公司,bs 结构,服务器所在操作系统是Solaris,使用工具肯定不会去考虑,也不具备使用ODBC的条件,只能赶鸭子上架了,不过一般情况下,如果程序比较健壮,对于一些java对象做了合理的释放,包括java对象和domino对象,短期内应该不会出现什么问题。
言归正传,使用步骤:a、找到oracle的jdbc驱动包:class12.jar或class12.zip;b、或可在建立代理后,直接在设计端引入该jar包;或将该jar包上传到服务器,修改Notes.ini文件,增加JavaClasses参数进行引入;c、下面给出一小段代码,这个相信大家也都很熟悉了,就不多说了,不过多一嘴,如果确认你所有的步骤都操作正确,java代理还是不能正确运行的话,可以尝试将代理的安全限制设置为:允许受限操作。
import lotus.domino.*;import java.sql.*;public class JavaAgent extends AgentBase {public void NotesMain() {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {Session session = getSession();AgentContext agentContext = session.getAgentContext();Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc racle:thin:@IP地址:1521ROD";String user = "***";String password = "***";conn = java.sql.DriverManager.getConnection(url,user,password); stmt = conn.createStatement();String sql = "select * from ra_salesreps_all";rs = stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getString("name"));}} catch(Exception e) {e.printStackTrace();}finally{try{rs.close();stmt.close();conn.close();}catch(SQLException sqle){System.out.println(sqle);}}}3、使用ADO(ActiveX Data Objects)ADO (ActiveX Data Objects) 是一个用于存取数据源的COM组件。
它提供了编程语言和统一数据访问方式OLE DB的一个中间层。
允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。