Lotus Domino 7 引入了使用 DB2 作为数据存储的功能。该功能允许使用 DB2 和 Domino 数据库,访问和查看以两种格式存储的数据。这样就将这两个产品的最佳之处带入了您的环境中。Notes 用户可以获得 DB2 的功能,如关系结构和基于 System Query Language(SQL)的视图。同时 DB2 的用户可以利用 Domino 的功能,如复制和安全性。

DB2 作为一项可选的存储功能,允许 Lotus Domino 客户在企业级关系数据库中存储他们的消息和协作的内部表示,维护与 NSF 功能的完全兼容性。此外,Domino 7 引入了两个功能,DB2 Access 视图(DB2 Access View,DAV)和查询视图(Query View),这两个功能允许 Domino 应用程序开发人员在 Domino 和 DB2 数据上充分利用关系功能。

本文简要地描述了这两个视图是什么、如何使用它们以及如何开发使用它们的应用程序。我们假定您已经使 Domino 服务器启用了 DB2,使其启动并处于运行中,并对 Domino Designer 有一定的经验。

注:启用 DB2 的 Domino 7 通过 DB2 Feature Trial 提供给所有的 Lotus Domino 客户,仅用作评估(不提供支持)。还有一个 Limited Availability Program 提供给获得许可的用户,以使其在提供技术支持的情况下利用 DB2 功能并访问 IBM Development 资源。有关更多信息,请参阅 Lotus Domino 和 DB2 的功能页面。

在 DB2 环境中开发应用程序

可以使用 Domino Designer 构建应用程序,以利用 Domino 服务器的协作功能,以及 IBM WebSphere 服务器的事务处理功能和 DB2 数据库的数据存储能力。这样就使应用程序得到一个端对端的业务解决方案,如供应链管理、销售自动化或客户关系管理。

使用像 Java servlet 这样的 Jave 技术,可以与 IBM WebSphere 应用程序共享代码或进行链接。单点登录(Single Sign-On,SSO)—— 一个共享的验证服务,可以使 Lotus Domino 和 WebSphere 应用程序进一步无缝集成。

如上所述,Domino Designer 7 包括两个新型的设计元素,协助管理存储在启用了 DB2 的 Lotus Notes 数据库中的数据:

  • DB2 Access 视图(DAV)是一个共享资源,使您能够为 Lotus Notes 数据定义 DB2 视图。
  • 查询视图是新型的 NSF 视图。该视图使用 SQL 查询进行填充。查询视图允许在 Notes 视图中显示 DB2 数据。如果想基于驻留在 DB2 中的 Notes 数据库中的数据创建查询视图,那么必须首先定义并填充 DAV。

DB2 Access 视图

当服务器启用了 DB2 时,用户数据不会直接转换为关系表。只有 Domino 中用户数据的内部表示才会转换为表格式。在任何情况下都不应该直接操纵这些表。但是,允许应用程序开发人员通过 Domino Designer 定义他们自己的 DB2 Access 视图。

很多 Domino 内容包含不适合进行关系存储和操纵的消息和协作数据。所以,应用程序开发人员现在可以只选择他们需要进行关系处理的数据/字段。在 Domino Designer 中定义了 DAV 后,就可以创建一个相应的 DB2 视图,并使用来自指定字段的 Domino 数据填充该视图。一旦完成这些操作后,您所有的 SQL 应用程序(如 Crystal Reports)现在就可以通过这个 DB2 视图操作 Domino 数据(参见图 1)。此外,在启用 Domino 安全性功能的情况下,通过 Domino 和 DB2 进行任何更新时,Domino 服务器将负责维护数据完整性。

图 1. DB2 Access 视图概览

这个新功能适用于想进行如下操作的用户:

  • 将 Domino 数据提供给其他相关的应用程序,如报告工具。
  • 有效地使用 SQL 应用程序开发技能操作 Domino 数据。
  • 公开 Domino 数据,使其能够通过合并到其他 Domino 数据库或 SQL 应用程序将数据集合在一起。

查询视图

该功能供那些熟悉 Notes 视图的 Domino 应用程序开发人员使用。该功能允许使用 SQL 定义 Domino 视图。通过 Domino Designer,可以定义 Domino 视图,视图的结果集是根据一个 SQL 查询语句得到的。查询视图允许应用程序从以前不能拉入数据的地方拉入数据(通过连接)。数据源可以是其他 DB2 的关系表/视图,或者是其他启用了 DB2 的 Domino 数据库的 DAV。

查询视图是动态的,每当 Domino 视图刷新时将重新执行 SQL 查询(参见图 2)。

图 2. 动态查询视图

这个新功能适用于想进行如下操作的用户:

  • 通过标准的 SQL 从其他数据源拉入数据。
  • 基于 SQL 功能在 Domino 数据上创建视图。

创建查询视图

要与 DAV 一起使用查询视图,首先要确保 Domino 启用了 DB2 作为数据存储,并计划使用的 NSF 必须存储在 DB2 数据库中。同时还必须安装并正确配置了 DB2 Access 服务器。此外,任何要访问查询视图的 Notes 用户都必须具有一个有效的 DB2 用户帐户,该帐户必须在部署之前在 Domino Administration 客户机上进行设置。另外,如果任何 “本地” DB2 数据是通过查询视图访问的,那么 DB2 管理员必须为 DB2 对象设置适当的权限。所有的这些前提条件都是 Domino 和/或 DB2 的管理员所要完成的任务,并超出了本文要讨论的范围。有关这些主题的更详细的信息,请参阅 Domino 7 Administrator 帮助。

一旦满足了这些条件,而且服务器启用了 DB2,那么在服务器上创建的任何数据库都将启用 DB2。可以通过单击 File - Database - Properties,并在数据库属性信息对话框中单击第二个 “i” 附签,快速验证数据库是否启用了 DB2。将会看到 “Database is DB2-enabled”,如图 3 所示。

图 3. 数据库属性显示数据库启用了 DB2

注意,并未支持一些系统数据库(如 Names.nsf 和 Events4.nsf)作为启用了 DB2 的数据库。要获得未被支持的数据库的完整列表,请参阅 Domino 7 Administrator 帮助。

当数据库启用了 DB2 时,Domino 在 DB2 中将 NSF 存储为一组表。不能查看此数据,因为它是 Domino 的专用数据。只能通过创建 DAV 来打开数据,在 DB2 中查看 NSF 数据。通过 SQL,DAV 可以直接访问数据。使用开放式数据库连接(ODBC)的第三方应用程序可以读取此数据。有关 DB2 Access 视图的详细信息,请参阅 Domino Designer 7 文档。

现在我们将带领您一步步地完成一个示例,该示例展示了如何创建 DB2 数据库,以及如何创建您自己的查询视图。这里提供的示例引用一个使用 Discussion 模板创建的数据库,该数据库包含在 Notes 客户机安装中。

当为 Domino 数据库启用了 DB2 时,Domino 为 DB2 创建一个启用了 DB2 的数据库模式,并在模式中创建了一组表用于保存 Notes 数据库数据。这个模式基于 NSF 文件名称命名。将要创建的所有 DAV 都保存在该模式中。如果将一个 NSF 文件中的全部消息都放在单个 DAV 表中,那么这对于 SQL 访问将是无效的。这是因为一组消息通常不具备一致的字段(即 DB2 数据库中的列),因此可能无法以对于 SQL 查询有意义的方式进行分组。要使 SQL 访问可用并便于管理,应该通过指定想要使用 SQL 访问的字段以及属于此 DB2 视图的消息组(这些消息构成了 DB2 视图的行)来定义 DB2 视图。

步骤 1. 创建 DAV

在 Lotus Notes 客户机中,要将 Domino 数据拉入到 DB2 查询视图中,必须创建 DAV。(只拉入 DB2 数据的 DB2 视图不需要 DAV。)要在视图列中显示的相同的字段,必须创建为 DAV 中的条目。DAV 占用大量的空间,因为每个 DAV 都是数据库中数据的副本,所以建议使用一个(或尽可能少的) DAV 来包含用于不同查询视图所需的所有字段。

写下在视图列中引用的所有字段的名称。对于本示例,查询视图将使用与 Discussion 中的 All Documents 视图相似的格式。我们将使用 SQL 查询公式指定 “动态” 的分类,而不使用消息自己的分类。我们的字段列表如下:Form、From、AltFrom、Subject、Readers、ExpireDate。

启动 Domino Designer 并单击 Shared Resources 下的 DB2 Access Views 选项(参见图 4)。

图 4. 显示 DB2 Access Views 选项的示例对话框

单击 New 创建新的 DAV。在属性框中,将 DAV 命名为 SUMMARY2。在字段列表中插入字段。确保在 DAV 属性框中选中了 All forms 选项。如图 5 所示。这将确保 DAV 中包含全部的文档。保存并关闭 DAV。

图 5. 显示选中了 All forms 选项的 DAV 属性框

要完成 DAV,需要在 DB2 中创建它并进行填充。在 Designer 中 DAV 列表的顶部,单击 Create/Update in DB2 按钮。然后单击 Populate in DB2 按钮。该操作发送一个开始填充 DAV 的请求到 Domino 服务器。注意,如果数据库较大,该操作可能需要一些时间。要查看进度,单击 Refresh Status 按钮(参见图 6)。

图 6. DAV Refresh Status 按钮

当 DAV 可以使用时,在 Designer 中 DAV 名称的左侧将出现一个复选标记,如图 7 中所示。

图 7. 复选标记表示 DAV 可以使用

步骤 2. 创建查询视图

查询视图是 Notes 视图的另外一种类型。和其他类型的 Notes 视图一样,查询视图是作为 Domino 应用程序一部分的设计元素。查询视图使用 SQL 查询公式来填充数据,而不是使用视图选择公式。要基于驻留在 DB2 中的 Notes 数据库中的数据创建查询视图,必须首先为该数据库定义并填充 DAV(参见步骤 1)。因为查询视图不是持久的,所以它们不会占用 Notes 数据库空间。不能将现有的视图转换为查询视图;必须在创建视图的时候指定该视图为查询视图。

可以通过 SQL 语句访问和操纵 DB2 数据库中的数据。当在启用了 DB2 的数据库中创建一个新视图时,将出现一个新的选择条件,称作 By SQL Query。如果不能立即知道 SQL 查询公式是什么,那么在公式框中输入双引号。注意输入的 SQL 查询是一个 SQL 查询公式。

在本示例中,创建了一个称作 New SQL view 的查询视图。要进行该操作,单击 Copy From 按钮并选择 All Documents 视图。然后选择 selection condition 为 By SQL Query,并输入 "" 作为公式(参见图 8)。

图 8. 显示选中了 By SQL Query 的 Create View 对话框

单击 Save and Customize 按钮。当视图在 Domino Designer 中打开后,删除 Date 和 Topic 之外的全部列,并在最左侧添加一个用于分类的列,如图 9 所示。

图 9. 分类列

保存视图后,可以通过在 Domino Designer 中视图名称左侧显示的灰色和蓝色图标来区分 SQL 查询视图(参见图 10)。如果将鼠标置于图标上,系统将提示该视图为 DB2 查询视图。

图 10. 视图名称旁边的灰色和蓝色图标

步骤 3. 创建 SQL 查询公式

重点:SQL 查询公式的选择语句必须包括视图列中引用的全部字段。

编辑新的查询视图。查看每一个列公式,在一张纸上写下公式中引用的一个或多个字段。例如,我们基于 discussion 数据库中的 All Documents 视图创建了一个查询视图。这些是我们写下的字段:

字段
Categories Categories
这里我们不使用来自 Categories 字段的数据。该列将是一个由 SQL 查询公式生成的动态列。
Date 没有字段。该类全部使用 @functions。
Topic From
AltFrom
Readers
ExpireDate
Subject

下一步是构造 SQL 查询。SQL 查询最重要的元素是查询语句。选择语句的规则如下:

  • 整个 SQL 查询两侧必须加双引号。
  • 要包括视图列中引用的所有字段。
  • 使用逗号分隔字段名称。
  • 如果查询视图通过 DAV 引用 Domino 数据,并从 DAV 中选择 #NOTEID,则可以打开消息。
  • 必须正确引用模式。当 Domino 数据库保存在 DB2 中时,数据库中的信息包含在驻留于单个 DB2 群组结构的表中,该群组结构被称作模式。对这些表的所有引用都使用模式名称加上表名称,使用句点进行分隔(例如,“schema.table”)。确定启用了 DB2 的 Domino 数据库模式名称的一个简单快速的方法是使用 @function @DB2Schema,在查询公式中使用它时,将返回指定的启用了 DB2 的 Domino 数据库的 DB2 模式名称。
  • 必须正确引用 DAV。

当在 Domino Designer 中编辑 SQL 查询视图时,一个新的事件(SQL Query)将出现在编程窗格中,如图 11 所示。

图 11. 编程窗格中显示新的 SQL Query 事件

可以使用与编写选择公式相同的方式编写 SQL 查询。下面的代码是用于构建新视图的选择语句,代码中使用了在第一步中创建的 DISCUSSION_DAV,并基于前面显示的字段表。注意,在公式的 SQL 部分不支持硬回车。SQL 语句必须是一整段,并在两侧加双引号。

REM {DB2 schema};
MySchema:=@DB2Schema(@DbName);
REM {DAV name constructed with schema};
MyTable:=MySchema + ".SUMMARY2";
"with categorized (categories, #noteid, from, form, altfrom, readers, expiredate, subject) as (select 'Agendas',
#noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + " where (lcase(subject)
like '%meeting%' or lcase(subject) like '%agenda%') UNION ALL select 'Backup/Restore', #noteid, from,
form, altfrom, readers, expiredate, subject from " + MyTable + " where (lcase(subject) like '%backup%')
UNION ALL select 'Performance', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable
+ " where (lcase(subject) like '%performance%') UNION ALL select 'Tools', #noteid, from, form, altfrom,
readers, expiredate, subject from " + MyTable + " where (lcase(subject) like '%tools%' ) UNION ALL select
'Admin', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + " where (lcase(subject)
like '% db2 %') ) select * from categorized";

这就是公式的 SQL 部分,分为下列几部分:

第一部分称作 “regular table expression” 。该部分创建了一个名称为 “CATEGORIZED” 的虚拟表,表中带有 inner 查询提供的一组列。每一个 inner 查询都必须在位置和数据类型方面与这些列相匹配。 "with categorized (categories, #noteid, from, form, altfrom, readers, expiredate, subject) as

  • categorized 是指定的表名称。
  • categories 是指定的第一个列的名称;该名称将是动态的。
  • #noteid 如上文中描述的,将其放在这里是为了能够打开消息。
  • from, form.... subject 是将要在视图查询中显示的字段名称。

这是将关系表(在此例中是 MyTable 表)中的数据提供给虚拟表 categories 的 inner 查询之一:

(select 'Agendas', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + " where (subject like '% meeting %' or subject like '% agenda %')

在本例中,使用 UNION ALL 关键字将来自该 inner 查询的输出与来自其他 inner 查询的输出组合在一起:

UNION ALL
select 'Backup/Restore', #noteid, from, form, altfrom, readers, expiredate, subject
from " + MyTable + "
where (lcase(subject) like '%backup%')
UNION ALL
... (下一个 inner 查询)

inner 查询中的列直接映射到虚拟表 CATEGORIZED 中相应的列,因此:

  • ‘Agendas’‘Backup/Restore’ 是映射到虚拟表 categorized 中 categories 列的值。注意本例中的这些文字值是动态的。在 SQL 语言中可以从任何的表达式派生这些值。
  • from, form... subject 是将要显示的字段。这些字段必须在位置和数据类型方面与虚拟表 CATEGORIZED 中的列相匹配。

还要注意,来自任何 inner 查询的选择语句都能够从任何具有其他列名的其他表中拉入列,但是首先必须保证所选列的数据类型必须同虚拟表 CATEGORIZED 列的数据类型相匹配。下面是一个例子:

(select 'Somewhere Else', foreign_noteid, somefrom, myform, youraltfrom, the_readers,   the_expiredate, topic from "
+ AnotherTable + "where topic like '% this isn't that hard, really %')

这里 foreign_noteid、somefrom、myform、youraltfrom、the_readers、the_expiredate 和 topic 都与虚拟表 CATEGORIZED 中的列(这些列为#noteid、from、form、altfrom、readers、expiredate、subject)的数据类型相匹配。

此外:

  • UNION ALL 是将所有选择语句连接起来的关键字。它使来自所有选择语句的数据作为单个流显示到视图。这是可以从多个 NSF 甚至其他表选取数据到查询视图的一种方式。另一种方式是通过联结。
  • select * from categorized 是最后一个查询语句。如果把所有的内容拼写出来(不使用*通配符),那么这个语句是 select categories, #noteid, from, form, altfrom, readers, expiredate, subject。

现在可以使用 Notes 客户机查看新的 SQL 视图了。当您打开视图时,状态栏将显示创建的整条选择语句。图 12 显示了刚刚创建的视图。

图 12. 新创建的 SQL 视图

结束语

对于 Domino 7,我们提供了在关系数据库 DB2 中存储 Domino 数据的本机方式。此外,提供了带有两个主要新功能(DB Access 视图和查询视图)的 Domino 应用程序开发环境,以便增强现有的应用程序并基于关系概念开发新的应用程序。

通过本文中提供的提示和示例,我们鼓励所有的 Domino 应用程序开发人员,在开发新的和现有的应用程序时尝试新的功能和开发理念。Domino 数据的关系操作到此结束!

参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
  • developerWorks:Lotus 文章,“Lotus Domino 7.0 中的新特性”,包含有关在 Notes/Domino 7 集成 DB2 的其他信息。
  • Lotus Domino 和 DB2 功能页面 是有关 Domino/DB2 集成信息的另一个极好的资源。
  • 还可以访问 Lotus Domino 7 Administrator 帮助 获得有关该功能的更多信息。

讨论

  • 参与论坛讨论。
  • 通过参与 developerWorks blogs 加入 developerWorks 社区。

作者简介

Debbie Branco 从 1988 年至今一直从事 Notes 方面的工作,起初在 Lotus Notes Quality Assurance 小组测试和编写模板,从 1994 年开始她的主要工作是为 Notes 产品开发模板。她目前从事用于 Mail、Personal Name 和 Address book、TeamRoom、Bookmarks (其中包括 Welcome Page)以及 Personal Journal 的模板方面的工作。

Tom McGary 自 1970 年开始就从事软件领域的工作,从 1988 年开始在 IBM/Lotus 工作,自 1999 年开始从事 Lotus Notes 方面的工作。除了从事 Notes 复制和启用了 DB2 的 Domino 部署,以及启用了 DB2 的 Domino 的各个方面工作外,他还是 D.N.R.C Side Effeçts 的 Miñister。

Wai-ki Yip 是启用 DB2 的 Domino 数据库方面的开发主管。他已经在 Lotus Development 工作了 18 年,自从 1995 年开始就从事 Domino 方面的工作

在 Lotus Domino 7 应用程序中利用 IBM DB2 集成特性相关推荐

  1. json日期格式化 java_java_Java Web程序中利用Spring框架返回JSON格式的日期,返回Json时格式化日期Date 第一 - phpStudy...

    Java Web程序中利用Spring框架返回JSON格式的日期 返回Json时格式化日期Date第一步:创建CustomObjectMapper类 /** * 解决SpringMVC使用@Respo ...

  2. html img 手势缩放,微信小程序中利用image组件实现图片手势缩放

    微信小程序中利用image组件实现图片手势缩放,前端大神严灏的牛文,讲解了微信小程序中image组件的三种是缩放模式,三种之中,只有 aspectFit 模式可以等比例缩放图片,并显示完整的图片. 原 ...

  3. c 程序多语言,怎样在程序中利用C支持多国语言

    怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...

  4. 小程序中利用Moment.js格式时间

    2019独角兽企业重金招聘Python工程师标准>>> LeanCloud给的日期是ISO格式,比如2017-06-05T14:08:20.589Z,直接显示在页面上体验不好. 凡是 ...

  5. 在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象

    这是我辅导的一个项目开发中的例子,他们是用WPF做界面开发,在学习了如何使用MVVM来实现界面与逻辑的分离,并且很好的数据更新之后,有一个疑问就是,这种双向的数据更新确实很不错,但如果我们希望用户可以 ...

  6. Mocha BSM应用管理——Lotus Domino监控与管理

    业务需求与挑战 现在有很多企业利用Lotus Domino的平台,提供了以下几种不同业务服务:   •邮件服务   •企业网站   •办公自动化 (OA)   •协同办公 一旦这些业务服务中断,会给企 ...

  7. 使用 ADSync 集成 IBM Lotus Domino Directory 和 Microsoft Active Directory

    具有多个目录平台的企业 IT 环境非常常见,而 IBM Lotus Domino Directory 和 Microsoft Active Directory 就是这种情况下的流行选择.本文阐述了一种 ...

  8. 并与Lotus Domino 7管理客户机无缝地集成

    IBM Domino/Notes及选型考虑 这是两款软件,分别是IBM Domino和IBM Notes,它们共同供一个可以用于电子邮件. Web访问.在线日历和群组日程安排.协同工作区.公告板和新闻 ...

  9. 在winform程序中启动wpf窗体

    有时候需要在winform程序中利用wpf的许多优良特性,如何在其中启动wpf窗体呢? 前提:MainWindow.xaml是从别的地方copy到这个项目的,值得注意的是,除了MainWindow.x ...

  10. matlab vb调用,VB程序中实现调用MATLAB的方法

    收稿日期:2000207227 作者简介:王跃强(1978-),男,硕士研究生,主要研究方向:光电检测及其自动化. 文章编号:1001-9081(2001)02-0095-02 VB 程序中实现调用M ...

最新文章

  1. 小学生家庭教育与学习心理
  2. 炎炎夏日需要一个清凉的地 - 自制水冷系统
  3. 物联网的兴起与二维码的前景
  4. 【Django 2021年最新版教程34】python unittest 对函数单元测试 覆盖率检测
  5. 利润表模板excel_让财务人看完心动的369个Excel财务分析图表,老板都忍不住点赞...
  6. zipentry java_ZipEntry getNextEntry()
  7. java实现图片的预览_Java实现图片裁剪预览功能
  8. 威漫哨兵机器人_漫威:哨兵机器人天下无敌?这几位变种人就不把他们放在眼里...
  9. Android 实现扫一扫功能
  10. 六度分离_hdu_1869(floyd算法).java
  11. 百度大脑开放日·互联网内容安全线上专场报名中!
  12. Python小白的飞桨之旅
  13. ORA-01045: user ICCS lacks CREATE SESSION privilege; logon denied
  14. 夜神模拟器链接不上ADB问题
  15. Educode--机器学习基础模型与算法测试闯关实验
  16. Keras-gpu版本安装教程(亲测有效)
  17. 2022张宇数学二最后四套卷第三套20题(反常积分留数定理求解)
  18. 如何在嵌入式Linux系统中使用4G LTE模组?
  19. 腾讯视频自动签到详细版(多种方式得V值)
  20. 智慧城市行业资料学习目录

热门文章

  1. idea导入一个工程后只显示pom文件_P1搭建第一个springboot应用
  2. python2最新版本_Python 2.7.18发布,Python 2的最新版本
  3. X11/XWINDOW GUI窗口应用在任务栏上没有显示的解决办法
  4. JAVA如何动态加载jar,并调用对应的函数?
  5. You specified a pre-MSA CPU in your CFLAGS
  6. relocation R_X86_64_PC32 against symbol can not be used when making a shared object recompile with
  7. BAT中for循环如何执行多条命令
  8. error MSB8008: 指定的平台工具集()未安装或无效。请确保选择受支持的 PlatformToolset 值
  9. 热的感觉是顺经络走的
  10. git pull没有更新成功_git冲突平滑解决的巧方法