如何使用 LEI 将附件从 Domino 文档传送到关系型数据库中
作者:IBM
来源:IBM
本文简单介绍一下LEI的基本架构,然后重点介绍如何使用 LEI 将附件从 Domino 文档传送到关系型数据库中。 (一)LEI 的基本架构 IBM Lotus Enterprise Integrator for Domino (LEI) 是一个企业集成工具,用于在异构的外部数据源之间迁移数据。 LEI 结构 LEI 是一个数据分布式应用,被设计用于在多个平台之间支持企业范围内的数据访问。它主要由下面两个元件组成: LEI Server LEI Administrator 简介 下面的图示介绍了LEI 结构中的元件,以及 LEI 是如何处理数据的。 LEI Administrator 用于管理 LEI 系统中的配置和操作元素,包括 Connectors, Metaconnectors, 和 Activities。LEI server 周期地查询 LEI Administrator 数据库来执行 activities。当它发现某个 activity 到了预定的运行时间时,它就会执行这个 activity。 activity 会定义LEI 将执行的操作,例如传输数据,复制数据,文件系统命令等等。 
LEI Server LEI server 是一个引擎,它会轮询 LEI Administrator 数据库 (也称为 Control Store) 来执行指令。这些指令是以 LEI activities 的形式存在的。 Activities 可以是直接定义的,也可以是用script写的。直接定义的 activities 是用LEI Administrator创建的基于表单的 activities,用script写的 activities 是用 LotusScript 语言, 使用 Lotus Connector LSX 和 LEI LotusScript Extensions 编写的。 一旦定义好一个 activity,就可以从 Administrator 或操作系统命令行来运行它。 在服务器操作系统上,LEI server 作为一个多线程、多处理器的任务来运行。在外部数据源之间(例如 Oracle 和 Sybase,或 SAP 和 Notes 之间),它执行传输数据的实际工作。 注意:要访问的外部系统的 Client libraries 必须被安装在 LEI server 和 Domino 服务器上。当运行 activity 的时候,如果 activity 所要运行的 LEI server,和 LEI Administrator 所驻留的 Domino 服务器在不同的机器上,则 client libraries 必须被安装在这两台机器上。 LEI Administrator LEI Administrator 是一个 Notes 应用,使得用户可以创建connection 和activity。它包含很多类型的文档,主要包括: - Configuration
- Connections
- Metaconnections
- Activities
关于这些文档的详细信息,您可以参考 LEI 帮助数据库。 (二)如何使用 LEI 将附件从 Domino 文档传送到关系型数据库中 下面以Domino/LEI 7.02 以及 DB2 为例,详细描述如何使用LEI 的Direct Transfer Activity实现将附件从 Domino 文档传送到关系型数据库中。 1. 在Domino 服务器上创建一个Notes数据库,创建一个 Notes 表单,里面包含一个RTF域(例如 att1)来存储附件,一个文本域(例如 filename)来存储附件的名称(这个域可以是计算域,并将其隐藏起来)。 
2. 在LEI Administrator 中创建一个 Notes 的 connection 文档,输入Domino服务器和Notes数据库的名称。在“Selection Options”标签下,选中“Extract File Attachments (FILE)”。在“File path for File Attachments”域中输入一个路径来保存附件,例如 e:\temp。 

|
|
| |
3. 在DB2数据库中创建一个DB2数据库,创建一个 table, 里面包含和第一步中的Notes表单中的所有域相对应的column, 注意保存附件的column 应该使用 BLOB 的数据类型(例如ATT1)。另外再添加两个column, filename 用来存储附件名称,file 用来存储附件在文件系统中的全路径。

4. 在LEI Administrator 中创建一个 DB2 的 connection 文档,输入DB2数据库名称,DB2 管理员用户名以及口令。

5. 创建一个 File system 的 connection 文档,输入目录路径。这个路径应该是第二步中的路径的上一级路径,例如 e:\

注意: 如果附件不是文本类型的,您需要在File system 的connection文档中指定“Binary File Contents”。否则,附件会损坏从而不可用。

6. 创建一个 Direct Transfer activity,源数据库选择notes 的connection文档,目的数据库选择DB2 的connection文档。除了保存附件的域以外,一一映射其它所有需要的域。映射完成后,手工在Notes中添加一个被映射的域,域名为“FILE”, 它会触发这个 activity从notes文档中下载附件。将这个域映射到DB2中的一个文本类型的column,这样在这个column中会存储附件所在文件系统的整个路径。 请选择 "Try Update before Insert",使用相应的域作为关键字。运行这个activity之后,Notes 文档中的附件会被下载到本地的文件系统中,而且会在DB2 的记录中填充除了附件column 之外的所有其它的值。


7. 创建另一个Direct Transfer Activity,源数据库选择File system 的connection文档,目的数据库选择DB2 的 connection 文档。在这个activity 中,仅映射两个域:

请选择"Try Update before Insert",使用 "FILENAME" 作为关键字。这样,如果table中已经存在同名的附件,就不会创建新的记录。

运行这个activity之后,附件就会从文件系统传输到Db2中(以第一个Activity中生成的"FILENAME" 为关键字)。
注意,使用上述方法传输附件,需要满足下面两个条件:
(1) 每个文档中只有一个附件
(2) 每个文档中的附件名称不能与其它文档中的相同,否则后面运行的文档中的附件会 将前面的覆盖