内容


在复合应用程序中使用 Generic Browser 和 Symphony Spreadsheet 容器

Comments

编辑注:您很精通这个主题吗?希望分享您的经验吗?请马上加入到 IBM Lotus 软件 wiki 项目。

IBM Composite Applications wikiLotus Symphony wiki

简介

自发行版 8.0 以来,复合应用程序构成了 Lotus Notes 的重要部分。它们使用户能够将基于 Eclipse 或 NSF 视图的松散耦合的组件组装到一个应用程序中,以满足特定的业务需求。在 Lotus Notes 8.5 中,这一强大的技术通过包含通用应用程序容器框架得到了扩展,引入了若干容器组件,比如 Generic Browser、Symphony Spreadsheet、Notes View 和 Notes PIM 容器。常规容器常常受限于单一的、特殊用途的任务,与此不同的是,这些容器可以通过各种方式配置,从而应用于更加复杂的应用程序。比如,Generic Browser 容器可以用于从特定 Web 站点提取数据,或使用由其他组件提供的数据填充 HTML 表单。

为复合应用程序基础设施创建组件时,用户不必指定 Web Services Description Language (WSDL) 文件。复合应用程序的容器组件可以利用 Web 应用程序、电子表格文档、主机仿真器(host-on-demand,HOD)和 Lotus Notes 视图。

通用应用程序容器框架允许在不编写代码的情况下创建强大且灵活的应用程序。本文介绍了通用应用程序容器框架及其容器组件的基本概念。为了解释该框架的灵活性,通过一种分步的方式描述了如何使用 Generic Browser 和 Symphony Spreadsheet 容器组件组装一个样例应用程序。这个有效的样例应用程序可以用来比较两个城市的天气数据,具体方法是在 Lotus Symphony 电子表格图表中以图形的方式显示平均降雨量数据。

先决条件

本文假设您熟悉 Lotus Notes 中的复合应用程序。文档 Composite Applications in Notes – Benefits and Technical Overview 提供了对复合应用程序的简介和概述。参阅 developerWorks® Lotus Composite Applications wiki 中的 “Composite Applications in Notes - Benefits and Technical Overview” 可能会有帮助。

通用应用程序容器框架

Lotus Notes 8.5 引入了通用应用程序容器框架,这是对自发行版 8.0 之后加入到 Lotus Notes 的复合应用程序基础设施的扩展。目前为止,复合应用程序中的组件附带了一个静态的 WSDL 文件,定义了组件的属性和操作。当组件被松散耦合或彼此连接时,它们可以通过其属性将数据发送到属性代理,后者将为组件之间的通信提供方便。根据属性之间的通信或连接,属性代理然后将接收的数据提供给其他组件的相应操作。尽管组件可在不同应用程序中重用,但是静态 WSDL 文件会成为一个瓶颈,因为它可能会对不同的场景要求使用额外的属性和操作。同样,组件的设计和创建也绝不简单,特别是 WSDL 文件的定义有时被认为是一种负担。因此,在尝试解决这些问题时,引入了通用应用程序容器框架。

容器组件

通过提供实现通用应用程序容器框架的容器组件,为复合应用程序提供了一组新的高度可定制的组件。与复合应用程序中的常规组件相比,容器组件并不包含定义属性和操作的静态 WSDL 文件。相反,它具有使用任意数量的可连接属性的能力,这些可连接属性可以在复合应用程序基础设施中用作属性和操作。因此,容器组件的实例可以拥有任意数量的属性和操作,具体取决于使用场景。

地标、事件和操作

容器组件配置的主要组成就是地标表示。地标可以被配置为匹配某种应用程序状态,并且它所属的容器组件可以针对这些状态作出反应。例如,显示 Web 站点的 Generic Browser 容器可以具有一个具体的地标表示,该表示匹配当前显示的 Web 站点。由于 Web 站点通常使用 URL 标识,因此地标可以被指定为根据 URL 来匹配 Web 站点。地标表示 http://www.ibm.com/* 将匹配在 ibm.com 域找到的所有页面。

当这样一种状态(对 Generic Browser 容器而言指的是 Web 站点)与地标表示匹配时,容器组件就会触发某种事件。所有容器都提供了两种标准的事件类型:数据修改和内容完成。对于 Generic Browser 容器,内容完成事件是在地标匹配当前 Web 站点并且页面完成加载后触发的。当 Document Object Model (DOM) 显示出当前页面修改时(例如,如果数据由用户输入到 HTML 表单中),数据修改事件将触发。接着,操作可以被绑定到事件,并且在此类事件发生时执行操作。以下是两种主要的操作用例:

  • 从属性代理接收数据并操作容器内容(将数据提供给 HTML 表单)
  • 从即将被发布到属性代理的容器中提取数据

每一种容器类型都指定了数据的修改或提取方式。Generic Browser 容器可以根据 ID、名称或 xpath 表达式来查找 Web 页面的 DOM 中的元素。由于通用应用程序容器框架是通过公开的和可扩展的方式设计,因此,除了上面提到的两个事件和操作类型外,容器还可以定义自己的事件和操作。

为了提供一个示例进行解释,Generic Browser 容器可以使用地标表示 http://www.ibm.com/* 来匹配 ibm.com 域中的任何一个页面。随后,它可以响应内容完成事件(页面完成加载)并将当前页面的标题发布到属性代理。发布操作可以通过指向 xpath 表达式为 /html/head/title 的标题元素来完成。

使用复合应用程序编辑器(CAE),容器组件可以被添加到应用程序,随后使用 CAE 提供的工具进行全面的配置。不需要编写任何程序代码或 WSDL 文件。本文的其余内容将提供一个有关创建样例应用程序的分步指导,演示了如何使用容器组件组装一个有效的应用程序。

创建天气数据样例应用程序

下面的步骤将详细描述如何使用容器组件构建一个样例复合应用程序。确保您安装了 Lotus Notes 8.5,并包含复合应用程序编辑器(CAE)。

您现在将逐步创建一个复合应用程序,它包含两个 Generic Browser 容器和一个 Symphony Spreadsheet 容器。该应用程序的目的是比较两个给定位置的天气数据,比如平均降雨量,并在图表中以图形的方式显示这些数据。对于每个浏览器组件,某个位置的平均降雨量可以通过 worldclimate.com Web 站点查询,并且使用提取自 worldclimate.com 的位置数据在 Symphony Spreadsheet 容器中绘制 Lotus Symphony 电子表格图表。

步骤 1. 在本地文件中针对复合应用程序和插件安装配置 Lotus Notes

您需要在 Lotus Notes 的默认安装中启用两个有用的选项:在本地文件系统的简单文本文件中创建复合应用程序,以及从 Eclipse 更新站点中将插件安装到 Lotus Notes 客户机。要启用这些选项,需要执行以下操作。您必须是具有相应权限的用户(管理员或超级用户),然后在 Lotus Notes 安装的 framework/rcp 目录中查找 plugin_customization.ini 文件,接着使用文本编辑器打开它。然后,将以下两行代码添加到该文件的底部:

com.ibm.rcp.topologyhandler.ui/localCAenabled=true
com.ibm.notes.branding/enable.update.ui=true

接下来,保存文件并重新启动 Lotus Notes 客户机。

步骤 2. 从 IBM Lotus Greenhouse 下载并安装 Symphony Spreadsheet 容器

Lotus Notes 8.5 仅附带了一种容器类型,即 Generic Browser 容器。其他容器组件可以从 IBM Lotus Greenhouse 下载并安装。

注意:Symphony Spreadsheet 容器是 Lotus Notes 8.5.1 的一部分,因此如果使用的是 Lotus Notes 8.5.1,那么可以跳过这一步。

要为 Lotus Notes 8.5 下载 Symphony Spreadsheet 容器,您需要在 http://greenhouse.lotus.com 上免费注册一个 Lotus Greenhouse 帐户并导航到 http://greenhouse.lotus.com/appdev/containers 下载 ZIP 文件,该文件包含了面向复合应用程序通用容器和实用工具的更新站点。

要安装 Symphony Spreadsheet 容器,遵循以下步骤:

  1. 在 Lotus Notes 中,选择 File - Application - Install 将启动一个窗口,引导您将插件安装到 Lotus Notes 客户机。
  2. 在第一个面板中,选择 Search for new features to install 并单击 Next。
  3. 单击 Add Zip/Jar Location 按钮并导航到包含更新站点的已下载 ZIP 文件。
  4. 单击 OK 以确认站点中找到的默认名和 URL。
  5. 单击 Finish 按钮。
  6. 您将看到待安装特性的分级列表。对于 Symphony Spreadsheet 容器,选择如图 1 所示的 Symphony Spreadsheet Application Container 项并单击 Next。

    图 1. 选择 Symphony Spreadsheet 容器特性
    选择 Symphony Spreadsheet 容器特性
    选择 Symphony Spreadsheet 容器特性
  7. 阅读并接受许可协议,单击 Next,然后单击 Finish。
  8. 在显示的确认窗口内,选择 Install this plug-in 并单击 OK。开始安装 Symphony Spreadsheet 容器插件。当要求重启 Lotus Notes 客户机时,单击 Restart Now 确认。

步骤 3. 创建一个本地复合应用程序并在 CAE 中打开

现在开始创建实际的样例应用程序,请遵循以下步骤:

  1. 以本地文本文件的形式创建一个空白复合应用程序,具体方法是在 Lotus Notes 中选择 File - Application - New Composite Application。
  2. 在显示的窗口中,为新的复合应用程序输入一个合适的名称,比如,输入 Climate 然后单击 OK。将创建一个空白的复合应用程序,并显示在 Lotus Notes 中。
  3. 打开新的应用程序,在复合应用程序编辑器中进行编辑,具体做法是选择 Actions - Edit Application。CAE 将被启动,并且应用程序 Climate 处于编辑模式。

步骤 4. 添加并配置一个 Generic Browser 容器

如果尚未选择的话,在 CAE 右侧栏的组件面板中,选择 Component Library 面板。将一个 Generic Browser 容器拖拽到编辑器中心的空白应用程序面板。容器默认情况下将加载 IBM Web 站点。要配置该组件,在 CAE 左侧栏的 Page Navigator 中右键单击该组件,并选择 Edit Component Properties,如图 2 所示。

图 2. Edit Component Properties 选项
Edit Component Properties 选项
Edit Component Properties 选项

现在,将显示一个窗口,允许您对组件进行定制。遵循下面的步骤:

  1. 选择 Advanced 选项卡并通过右键单击属性值来编辑 initialURL 属性(当前值为 http://www.ibm.com)。
  2. 输入 http://www.worldclimate.com 并单击 Enter。这个设置将强制 Generic Browser 容器在初始化时加载 worldclimate.com Web 站点。
  3. 通过单击 Add 按钮添加一个新属性,将其命名为 location 并单击 Enter。不需要修改属性值。
  4. 重复步骤 3,添加名为 data 的属性,选择两个新属性并将其标记为可连接。

稍后将使用这些属性来将 Generic Browser 容器组件连接到 Symphony Spreadsheet 容器组件。执行完这些步骤后,确保高级组件属性应当类似于图 3。

图 3. Generic Browser 容器的高级连接属性
Generic Browser 容器的高级属性
Generic Browser 容器的高级属性

选择 Landmarks 选项卡,为这个容器组件配置一个地标。在 Landmarks 页面中,可以定义地标配置,这些配置指的是一些与容器组件状态相匹配的模式。比如,地标可以用于匹配 Generic Browser 容器中当前显示的特定 Web 页面,然后从该页面提取或发布数据,或者通过与其他组件的连接接收数据,这些数据可用于填充 HTML 表单中的字段。

对于本文的 climate 样例,可以为与 worldclimate.com 中的页面相匹配的 Generic Browser 容器定义一个地标,该容器显示某个特定位置的天气数据,然后提取位置名和天气数据项列表(例如,使用 12 个数字值表示一年当中每个月的平均降雨量)。

对于 Type of Landmark 下拉字段,选择 URL 并单击 Add Landmark 按钮。然后,在 Landmark 字段中输入 http://www.worldclimate.com/cgi-bin/data.pl*。对于 Generic Browser 容器中显示的任何页面,如果它的 URL 以 http://www.worldclimate.com/cgi-bin/data.pl 开头,那么该页面就与这个地标表示匹配。对于 worldclimate.com 中托管的任何位置的天气数据,都使用以这种模式开头的 URL 表示。

接下来,我们来配置将在地标匹配时触发的事件。单击 Add Event 按钮,然后在 Event 下拉字段中选择 ContentComplete。当一个匹配页面完成装载时,该事件将被触发。如前所述,您需要从匹配页面中提取位置名和天气数据。要实现这一步骤,必须定义在触发事件后要执行的相应操作。单击 Add Operation 按钮,选择 data and Publish,然后在右侧的空下拉字段中输入 xpath:/html/body/h2[1]/a[2]。然后,再次单击 Add Operation 按钮来添加另一个操作,选择 location and Publish,然后在空下拉框中输入 xpath:/html/body/pre/table/tbody/tr[2]/td。这个序列表示 xpath 表达式定义的数据元素被选择,并通过所选的可连接属性发布到复合应用程序属性代理中。对于这种情况,将提取显示在 HTML 表中的位置名及其天气数据项。确保地标配置看上去类似于图 4 所示的屏幕截图。

图 4. Generic Browser 容器的地标配置
Generic Browser 容器的地标配置
Generic Browser 容器的地标配置

最后,为了方便组件重用,最好为其指定一个有意义的名称。选择 Component Settings 选项卡,输入一个合适的标题,例如 WorldClimate1。随后,单击 OK 保存新的组件设置。

步骤 5:重用 Generic Browser 容器实例

您已经配置了一个 Generic Browser 容器组件,可以从 worldclimate.com Web 站点针对给定位置提取数据。由于样例应用程序包含两个针对 worldclimate.com 配置了的浏览器容器实例,您现在可以将组件添加到 CAE 面板,从而使它可以供这个或其他应用程序重用。遵循下面的步骤:

  1. 要向面板添加组件,在左侧的页面导航器中右键单击组件,并选择 Add Component To The Palette 选项,如图 5 所示。
  2. 确认要求您切换到相应面板的消息。
    图 5. Generic Browser 容器的地标配置
    Browser 容器的地标配置
    Browser 容器的地标配置

这个预配置的 Generic Browser 容器组件现在可以被添加到样例应用程序,其地标配置与 worldclimate.com 匹配。将一个名为 WorldClimate1 的组件从右侧拖拽到中央面板,并在底部将其拖拽到现有组件。您现在应当看到两个 Generic Browser 容器组件以垂直方式对齐。

注意,在 CAE 中,组件可以被任意拖拽到主面板,从而根据需求重新排列次序。要区分两个组件,最近一次添加的组件应当使用另一个不同的名字,比如 WorldClimate2。要进行重命名,右键单击 Page Navigator 中的组件,然后选择 Edit Component Properties,在 Component Settings 页面上添加一个新的标题,然后单击 OK 确认。

步骤 6:添加并配置 Symphony Spreadsheet 容器

要向样例应用程序添加最后一个组件,即 Symphony Spreadsheet 容器,您需要切换回位于 CAE 右侧的 CAE 面板中的 Component Library 面板。Symphony Spreadsheet 容器可以在 Containers 类别中找到。要向应用程序添加一个实例,将该组件拖拽到应用程序面板上两个现有浏览器容器组件的右侧。

要配置这个组件,右键单击页面导航器中的 Symphony Spreadsheet 来启动组件属性窗口。您需要为这个组件提供来自浏览器容器的数据;具体来说,每个浏览器容器发布用户在 worldclimate.com Web 站点中查询的位置的名称和天气数据。因此,每个浏览器容器将发布两个属性。

您需要在 Symphony Spreadsheet 容器中创建 4 个可连接属性来使用这些数据。遵循以下步骤:

  1. 在组件属性窗口中选择 Advanced 选项卡,并添加具有如下名称的属性:location1、location2、data1、data2。确保它们都被标记为可连接。
  2. 从本文的下载小节下载 Lotus Symphony 电子表格文件,并将其保存到本地文件系统。
  3. 输入文件路径,作为 initialFile 首选参数的值。

    因此,Symphony Spreadsheet 容器将加载并显示这个电子表格,该电子表格包含一个表格和一个图表。表由浏览器容器提供的位置名称和数据填充,而图表用来可视化地表示数据。您可以使用 Lotus Symphony 或 OpenOffice 打开电子表格文件,以进一步查看。高级首选参数现在应当类似于图 6(确保 initialFile 首选参数指向文件系统中的电子表格文件)。

    图 6. Symphony Spreadsheet 容器的高级属性
    Symphony Spreadsheet 容器的高级属性
    Symphony Spreadsheet 容器的高级属性
  4. 单击 Landmarks 选项卡。在这里,只需要配置 Symphony Spreadsheet 容器组件,使它接收来自复合应用程序属性代理的相应数据项。
  5. 对于 Type of Landmark,从下拉列表中选择 Spreadsheet。该选项是惟一可用于这种容器的类型。
  6. 单击 Add Landmark 按钮。因为您不需要区分不同的电子表格文件,因此在这里可以使用通配符,输入 asterisk (*)。换句话说,这个地标配置确保事件可在任何情况下触发。
  7. 单击 Add Event 按钮,然后选择 Data Change 作为事件类型,表示当来自属性代理的数据发生变化时,将执行相应的操作。

由于您希望接收由浏览器容器发送的数据,所以需要使用类型 Receive 创建 4 个操作。创建这 4 个操作,为每一个操作(前一步骤中创建的 location1、location2、data1、data2)选择一个不同的可连接属性,然后为所有 4 个操作选择 Receive。随后,为这些操作添加相应的值,如表 1 所示。

表 1. 用于 Symphony Spreadsheet 容器的地标的操作
可连接属性类型
location1ReceiveSheet3!$A2
location2 Receive Sheet3!$A3
data1Receive Sheet3!$B2:$N2
data2Receive Sheet3!$B3:$N3

这些值表明电子表格中的哪些单元格应当填充通过可连接属性接收的数据,这些数据来自复合应用程序框架的属性代理。例如,值 Sheet3!$A2 表示电子表格的第一行的第二个单元格,将使用位置名进行填充;Sheet3!$B2:$N2 定义了一组单元格,将填充各个位置的天气数据(值表示一年 12 个月中的平均降雨量)。

地标配置应当看上去类似于图 7 所示的屏幕截图。

图 7. Symphony Spreadsheet 容器的地标配置
Symphony Spreadsheet 容器的地标配置
Symphony Spreadsheet 容器的地标配置

如果您愿意的话,可以在 Component Settings 页面中重命名组件。单击 OK 关闭组件属性窗口,然后保存组件的设置。

步骤 7:连接组件

现在,所有三个组件都得到了正确配置,可以在它们之间建立合适的连接,以实现组件通信。提取自 Generic Browser 容器的数据被显示到 Symphony Spreadsheet 容器中;因此,需要从浏览器容器创建到电子表格容器的连接。遵循以下步骤:

  1. 在左侧的页面导航器中右键单击名为 WorldClimate1 的浏览器组件,然后选择 Wiring。在 CAE 窗口中,将在一个新的选项卡中打开连接窗口。
  2. 要创建连接,从浏览器容器中将源属性拖拽到 Symphony Spreadsheet 容器中对应的目标操作。源属性和目标操作之间的映射应当遵循表 1 中给出的映射。
  3. 右键单击名为 WorldClimate2 的组件,单击 Select 作为连接源,然后使用 data2 和 location2 在 Symphony Spreadsheet 容器中创建等效的连接。
表 2. 用于创建连接的映射
源组件源属性 目标组件目标操作
WorldClimate1 数据Symphony Spreadsheet 容器设置 data1
WorldClimate1位置 Symphony Spreadsheet 容器设置 location1
WorldClimate2 数据Symphony Spreadsheet 容器设置 data2
WorldClimate2位置 Symphony Spreadsheet 容器设置 location2
  1. 选择 File - Save and Close,然后在确认窗口中单击 Yes 以保存应用程序并退出 CAE。

样例应用程序现在已经完全组装并配置完毕,并且将在 Lotus Notes 的主窗口中显示其内容。

步骤 8:测试应用程序

在上方浏览器的 search 字段中输入一个城市名,并单击 Search 按钮。您将看到一个匹配位置列表,可以单击其中的相应链接。在另一个页面,如果可用的话,单击名为 Average Rainfall 的链接以访问相应位置的数据。当页面完成加载时,将看到在 Symphony Spreadsheet 容器的电子表格图表中会显示红色的数据。对低一级浏览器容器中的感兴趣的位置重复这一过程,您将看到使用绿色显示的图表。图 8 展示了 Dublin(Ireland)和 Vancouver(BC,Canada)国际机场的平均降雨量的可视化数据。

图 8. 比较 Dublin 和 Vancouver 的平均降雨量
比较 Dublin 和 Vancouver 的平均降雨量
比较 Dublin 和 Vancouver 的平均降雨量

如果希望对多个位置进行比较,那么需要将预配置浏览器容器添加到应用程序,修改 Symphony Spreadsheet 容器的地标配置,将浏览器组件连接到电子表格容器,然后修改电子表格中的图表以处理更多数据。

结束语

本文简要介绍了 8.5 发布版的新的通用应用程序容器框架。通过分步描述,本文展示了如何使用 Generic Browser 和 Symphony Spreadsheet 容器创建一个可以比较两地天气数据的样例应用程序。不需要编写任何代码;相反,所有必要的组装和配置步骤都是在复合应用程序编辑器中完成的。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=426313
ArticleTitle=在复合应用程序中使用 Generic Browser 和 Symphony Spreadsheet 容器
publish-date=09072009