Lotus Enterprise Integrator (LEI) 6.x 可以将附件从 Domino 数据库移到 RDBMS 表中,从而可以从 RDBMS 内读取这些附件。最好的是,可以快速进行此操作,而无需编写一行脚本代码!
许多人将带有附件的文档传送到他们的 REBMS 系统,以供其他 RDBMS 应用程序访问。可以通过 LoutsScropt 进行此操作,但其实有一种更简单的方法。本文说明了 Lotus Enterprise Integrator (LEI) 6.x 如何将附件从 Domino 数据库移到 RDBMS 表中,从而想在 RDBMS 中查看这些附件的任何人都可以读取它们。如果目的是执行一次传输,则比较安全的作法是对 RDBMS 系统中存储的文件具有读/写权限。如果目的是继续从 Domino 访问 RDBMS 系统中的附件,则对于 RDBMS 应用程序来说,RDBMS 系统中的附件应该是只读的。
本文假设您熟悉 Lotus Enterprise Integrator 和 Domino。
对于有经验的 LEI 用户,将附件移至 RDBMS 表的步骤很简单,对于没有经验的用户,也不是很难。这些步骤如下所示(我们将在本文后面对每一步进行说明):
- 使用选择性复制公式复制 Domino 数据库,其包含所有设计元素,但是不包含数据文档。
- 在 RDBMS(本例中使用 DB2 UDB)中创建表,存储 Domino 文档的数据字段。
- 在 LEI 中创建 Virtual Documents 活动,在 RDBMS 中创建 External Key 表(用于支持 Virtual Documents)以及在 RDBMS 中创建 Attachments 表(在其中存储二进制附件)。
- 启动 Virtual Documents 活动。
- 从副本数据库删除选择性复制公式(允许复制所有文档,包括数据文档),并用新的副本复制原始数据库。
如果设置 Domino 定期复制这两个 Domino NSF 文件,则 Virtual Documents 活动可以保持 RDBMS 表包含最新信息。可以决定不再需要原始源 Domino 数据库,仅使用虚拟数据库就可以满足所有需要。
我们尽量保持例子的简单。下面是 Domino 数据库中的一个示例文档,基于表单 ATTACH:
图 1. 带有附件的文档
注意该文档仅有三个字段:
- DOCID 存放查找文档的关键字。
- AUTHOR 列出文档的作者。
- ATTACH 是富文本字段,文件可以附加在其中。
|
要创建仅有设计而没有数据的新的选择性副本,从 Notes 工作台选择要创建副本的数据库,然后选择 File - Replication - New Replica。在 Create Replica for Database 对话框中,单击 More Settings。在 Replication Settings 对话框中,单击 Advanced 选项卡来输入选择性复制公式:
图 2. 复制设置
选中 Documents by selection formula 选项,输入公式 SELECT Form = "foo"。因为表单没有命名为 foo,所以不复制数据文档。单击 OK,使用 Notes 客户机强制现在进行复制。
|
然后需要定义 RDBMS 表来存储表单 ATTACH 的数据字段。
Column name | Type schema | Type name | Length | Scale | Nulls |
DOCID | SYSIBM | INTEGER | 4 | 0 | No |
AUTHOR | SYSIBM | CHARACTER | 200 | 0 | Yes |
ATTACHMENT | SYSIBM | VARCHAR for bit data | 32000 | 0 | Yes |
可以将列 ATTACHMENT 定义为 BLOB,但是因为此字段仅存储附件的图标和相关文本,而不是实际附件,所以不需要这么大。使用 VARCHAR for bit data 可以使 DB2 在处理此表中的记录时执行得更好。
|
现在有了 RDBMS 表和 Domino 数据库(副本),所以可以创建 LEI Virtual Documents 活动了。(LEI Virtual Fields 活动还支持虚拟附件,可以用于替代 Virtual Documents 来将附件移至 RDBMS 数据库。)要进行此操作,首先必须定义 RDBMS 系统连接。对于 DB2,该连接如下所示:
图 3. DB2 表单连接
该连接将要访问的 DB2 数据库指定为在 DB2 客户机中定义的数据库。它还列出连接此数据库的用户名和密码。实际上您不再需要其他任何信息。通过将其他字段保留为空,此连接将成为数据库的通用 DB2 连接,从而允许此连接文档提供对数据库中所有可用表的访问权。
下面是一个 Virtual Documents 活动:
图 4. Virtual Documents Activity 表单
图 4 显示了活动的名称,在本例中是 Documents with Attachments。表单的左边列出了要使用的 Domino 应用程序。此数据库必须在安装了 LEI 的服务器本地(这对于 LEI 中的所有 RealTime 功能都正确)。选择副本数据库后,从要监视的数据库选择表单(本例中是 ATTACH)。
选择此表单右边的 Lotus Connection。数据源是 DB2 连接文档的标题。因为在该文档连接中没有选择任何表,所以系统将提示您选择一个表。在本例中,该表是前面讲述的表 DB2ADMIN.DOCIDS。
然后必须映射字段,它们具有类似的名称。ATTACH 表单中的每个字段都映射到 DB2 表中的一列。
|
External Key 表存储让 LEI 虚拟化数据所需的字段。(还可以使用集成关键字来获得期望的结果。有关 Virtual Documents 的 Integrated 和 External Keys 的完整描述,请参阅 LEI 用户指南。)使用 LEI Virtual Documents 表单中提供的按钮创建此表:
图 5. LEI Virtual Documents 表单
在 Key Table Option 字段中,选中 Use External Key Table 选项。然后输入新表的名称(本例中是 DB2ADMIN.DOCID_KEYS)并选择 Key Field。此字段用于连接 External Key Table 中的记录和表 DB2ADMIN.DOCIDS 中的记录。然后单击 Create External Key Table 按钮,会显示对话框来确认选择并创建表。下面是在 DB2 中创建的表:
Column name | Type schema | Type name | 长度 | Length | Nulls |
DOCID | SYSIBM | INTEGER | 4 | 0 | No |
EINOTEID | SYSIBM | INTEGER | 4 | 0 | Yes |
EIUNID | SYSIBM | CHARACTER | 32 | 0 | Yes |
EIMODIFIED | SYSIBM | TIMESTAMP | 10 | 0 | Yes |
EINOTEPROPS | SYSIBM | VARCHAR for bit data | 10240 | 0 | Yes |
此表允许存储描述 Domino note 实际情况所需的其他信息。
|
设置此活动的最后一步是开启 Virtual Attachments。我们在 Options - Virtual Attachments 选项卡下进行此操作:
图 6. Virtual Attachments 选项卡
在字段 Attachments 中,选中 Virtualize Attachments 选项。然后输入此新表的名称。现在单击 Create Virtual Attachment Table 按钮。对 DB2 进行此操作会显示下面这个对话框:
图 7. Create Attachment Table 对话框
更改此处的默认设置,定义存储附件的 DB2 表仅支持一个 Notes 数据库。还可以将 Max attachment size 从 100 MB 改为 10 MB。单击 OK 在 DB2 中创建表。
下面是在 DB2 中定义的示例表:
Column name | Type schema | Type name | Length | Scale | Nulls |
EIDBID | SYSIBM | CHARACTER | 16 | 0 | Yes |
EIFILEID | SYSIBM | INTEGER | 4 | 0 | No |
EIFILESIZE | SYSIBM | INTEGER | 4 | 0 | Yes |
EIUNID | SYSIBM | CHARACTER | 32 | 0 | No |
EIFILENAME | SYSIBM | VARCHAR | 256 | 0 | Yes |
EICONTENTS | SYSIBM | BLOB | 10485760 | 0 | Yes |
现在正确定义了此活动,所以将其保存。接着在 LEI 中开启该活动。
对于 Domino 数据库,在工作台中有两个堆叠的图标:一个有数据,一个没有数据。对于没有数据的副本(Virtual Documents 活动监视的数据库),删除选择性复制公式,从而可以复制数据文档。然后,使用 Notes(或从 Domino 服务器控制台发出复制命令)复制这两个数据库。
好,完成!现在用虚拟副本数据库复制了原始数据库中的数据文档及它们的附件,将所有数据放入了 RDBMS 中。任何其他 RDBMS 应用程序现在可以从存储附件的表中读取这些数据了。如果愿意,它们可以连接 DOCID 表以获取其他信息。需要编写多少脚本?一个也不要!从头开始构建此简单例子需要多长时间?就我们而言,大概花了 20 分钟,不过,其间我们还打了一个电话。
|
当我们具有与此类似的任务时,LEI 完全可以使我们的工作更轻松些。我们可能需要做一次这些操作,也可能需要设置这些操作以进行持久同步。如果还没有访问 Lotus Enterprise Integration Web page 来查看 LEI,则值得访问一下。从那里可以获得演示版本并找到大量阅读资料。同时,Enterprise Integration forum 也是一个发布问题和获得专业答案的好地方。祝好运和幸福与您相伴!