内容


复合应用程序组件库 V2.0

Comments

复合应用程序的一大优点就是,组成复合应用程序的组件可以供其他应用程序重用。开发良好的、可重用的组件,可以为技术资源方面的投资带来更大的回报,而 IBM® 已经将这种实践应用于复合应用程序。IBM 内部使用的复合应用程序中已经使用了本文描述的组件。很多组件并非 IBM 专用的,OpenNTF.org 上会定期在一个 “保持原样(as-is)” 的无支持库中发布它们。

最近,这个库的第二个发行版已经发布,其中包含很多新组件,包括一些 side-shelf 组件和一些插件特性。对于希望进一步修改组件以供自己使用的客户,还提供了源代码。本文讨论这个库的 2.0 版中的新组件,并展示如何使用它们增加复合应用程序的价值。

发布内容

在这个库的第一个发行版中,Eclipse 更新站点、IBM® Lotus® Notes® 组件和文档都包括在一个 NSF 文件中。最新的库包含更多的组件,并且这种趋势不会减弱。Version 2 则有更多的 NSF 文件,这些文件可分为以下三类:

  • 更新站点。该文件(cl_us_2.nsf)包含 Eclipse 组件和 Lotus Notes 组件的代码。要在企业中部署和使用组件,这是该库中惟一必需的部分。
  • 文档。该文件(cl_doc_2.nsf)包含一个简单的数据库,其中包含用于每个组件的文档。这里还有 Eclipse 组件的源代码,这些源代码可以在 Information 类别的附件中找到。
  • 单元测试/例子。库中的组件被组合成特性。每个特性有一个相应的复合应用程序,其中包含用于组件的单元测试(cl_basic_2.nsf、cl_misc_2.nsf、cl_nav_2.nsf、cl_notes_2.nsf、cl_util_2.nsf、cl_view_2.nsf、cl_w32_2.nsf)。这些测试可用于调试安装,并确保组件被正确设置和部署。

这些内容还可以作为例子演示如何使用每个组件。通过测试接口,可以使用组件的 API,了解它们的行为。还可以在复合应用程序编辑器中打开单元测试,看看它们是如何装配的。

特性

为便于部署,库中提供的组件被组合成特性。至于为什么将某些组件组合到一起,与技术没有多大关系,但是我们尽量按常见的分组方式来组合它们。由于提供了源代码,可以随意将组件重新打包为需要的特性组。

基本组件

这些组件提供基本的控件。当需要快速创建情境应用程序以便快速部署或创建原型时,这些组件比较有用。如果以后的需求超出了这些组件提供的功能,那么可以创建包含这些组件的功能的专用组件。

  • Checker。该组件为用户提供一个包含可配置文本的复选框。可以设置一个高级的组件属性,以定义该组件有多少个动作,以及它传播的字段的数量。默认情况下,有 4 个字段,即 Field1、Field2、Field3 和 Field4。当设置了 Field1 动作,并且该复选框被选中时,那么将用相同的值触发 Field1 属性。这种组件的行为类似于一种通透(pass-through)网关。

    此外,可以用输入值的组合覆盖组件属性的默认值。例如,通过将高级组件属性 field1Mask 设为 F1 1:%FIELD1% 2:%FIELD2%,可以传播含有硬编码文本的 field1 属性,为 field1 和 2 动作设置的值被添加到其中。同样,可以使用类似的替代参数设置在复选框设置 buttonMask 旁边显示的文本。

  • Chooser。该组件通过可配置组合框为用户提供一个按钮,和 Checker 一样,它支持数目不等的动作和属性。它还支持 field1mask 值,以便更改传播属性值的方式。与 Checker 中的 buttonMask 类似,它有一个 displayMask 高级组件属性,该属性可以控制如何显示下拉窗口中的每行文本。

    传递给动作的值应该是以逗号分隔的值列表。当下拉窗口中的第一个值被选中时,则使用列表中的第一个值,当第二个值被选中时,则使用列表中的第二个值,依此类推。选定后,根据列表的索引值计算所有属性。这种计算可用于向用户显示一组文本,并将另一组文本提供给动作。

    例如,假设要创建一个拾色器 Chooser。您希望用户根据颜色名称选取颜色,但是您自己需要使用十六进制 RGB 值用于输出。所以,可能需要两个字段,第一个字段用于颜色名称列表,第二个字段用于十六进制值列表。在高级组件属性中,可以设置 numFields=2,以获得两个字段,然后设置 displayMask=%FIELD1%,将颜色名称用于显示(如图 1 所示)。另外设置 field1Mask =%FIELD2%,以传播第二个列表中的十六进制值,当一个项被选中时将用该值作为 field1 属性的值。

    图 1. 在 Chooser 组件上设置高级组件属性
    在 Chooser 组件上设置高级组件属性
    在 Chooser 组件上设置高级组件属性

    图 2 展示了连接到使用以上设置的 Tester 组件的 Chooser 组件。可以看到,这里将颜色名称用于组合选择,而当选中一种颜色时,则传播十六进制值。

    图 2. 使用 Chooser 组件按名称选择颜色值
    使用 Chooser 组件按名称选择颜色值
    使用 Chooser 组件按名称选择颜色值
  • Clicker。该组件为用户提供一个具有可配置文本的按钮。它类似于 Checker,可以设置属性和动作的数量,并且可以更改传播属性值和按钮文本。当单击按钮时,所有属性都被触发。
  • Constants。该组件传播常量值。可以通过一个高级组件属性设置传播的属性的数量。可以通过附加的高级组件属性设置这些属性的值。当需要为另一个组件上的某个动作提供静态值时,这个组件比较方便。例如,如果在 Chooser 组件中显示的选项总是一样,那么可以创建一个包含这些值的 Constants 组件,并将它连接到 Chooser。请观看 YouTube 上的演示
  • Database open。该组件是一个按钮,通过它可以选择 Lotus Notes 数据库。它类似于 File - Open - Lotus Notes Application 窗口,但是当选择一个数据库时,它以属性的形式传播数据库的 Lotus Notes URL。
  • File open。该组件是一个按钮,通过它可以选择文件。它类似于 File - Open - File 窗口,但是当选择一个文件时,它以属性的形式传播数据库的 File URL。通过附加的高级组件属性,可以设置一系列符合要求的文件扩展名和文件名。

信息组件

这些组件将根据上下文把额外的信息引入到复合应用程序。可以将它们连接到其他源组件,为用户提供一个指示板视图,以显示应用程序中正在发生的事情。

  • Contextual bookmark。该组件跟踪对 Lotus Notes 文档、视图、数据库和 Web 页面的引用。它可以显示页面、应用程序或全局范围内的引用。例如,拖拽到应用程序范围的文档将显示在该组件在此应用程序的任何页面上的实例中。但是,它们不会显示在该组件在其他应用程序的实例中。
  • Personal information。该组件显示一个 Lotus Notes 文档或一个属性中关于一组用户的信息。如果给定一个 Lotus Notes 文档,它会搜索该文档中的所有字段来查找姓名,并用发现的姓名填充组件顶端的下拉窗口。如果在一个属性中给定一个列表,那么它将使用那个列表。选中的姓名作为单独的属性传播。该组件以编程方式使用与 Lotus Sametime® business card 组件(见图 3)相同的代码,并且可以通过定制使之以选项卡方式显示或进行扩展。
    图 3. 将 personal information 组件拖到邮件文件中
    将 personal information 组件拖到邮件文件中
    将 personal information 组件拖到邮件文件中
  • Productivity editor。该组件使用 productivity 编辑器以只读方式显示文档。可以通过一个高级组件属性和动作指示它从文件、URL 或是 Lotus Notes 附件进行装载。如果装载电子表格,那么任何指定的行列将自动成为属性和动作。这个编辑器可用于将电子表格添加到应用程序中,并重新填充数据,以用于报告生成或业务逻辑(如图 4 所示)。
    图 4. 电子表格中指定的行列自动发布为属性和动作
    电子表格中指定的行列自动发布为属性和动作
    电子表格中指定的行列自动发布为属性和动作
  • Lotus Sametime buddy list。该组件显示 Lotus Sametime 支持的人员列表。为该组件提供的列表可能还有一个附加的信息字段,该字段也将显示。可以选择显示一个 Group Chat 按钮,以便与所有选中的人员聊天。该组件的一个妙处就是,可以用应用程序中当前持有焦点的项中涉及的人员的名字填充该组件。这将导致生成良好的上下文和实用性。
  • Lotus Sametime business card。基本情况下,该组件显示来自 Lotus Sametime 的名片信息。但是,可以通过 Eclipse 扩展点加以扩展,显示特定公司或特定领域的信息。这些附加的区域可以使用选项卡显示,或者垂直叠放显示。

导航组件

复合应用程序默认的导航器不能调整大小和位置。导航组件不仅提供同等的特性,而且可以以多种方式显示页面数据,并且可以定位布局中的任何位置。但是,为了用户界面的一致性,必须将导航器添加到复合应用程序中的每个页面。这些组件不支持对导航器执行拖拽并将鼠标悬停在上方的跨页面拖放操作。

  • Button bar。该组件是一个页面导航器,它水平地显示创建的一系列按钮。按钮以页面名称命名,并且以页面图像为标记(如果有的话)。单击一个按钮时,将导航到相应的页面。这种导航器不支持子页面。
  • Drop-down navigator。该组件是一个页面导航器,它显示一个组合框(如图 5 所示)。下拉窗口中显示每个页面的名称,初始焦点位于当前页面上。当选择一个项时,将导航到具有该名称的页面。这种导航器可以缩进显示子页面的名称,因此支持子页面。
    图 5. 下拉导航器
    下拉导航器
  • Tab。该组件是一个页面导航器,它显示为选项卡形式(如图 6 所示)。每个顶级页面都有自己的选项卡,当选中一个选项卡时,将导航到相应的页面。这种导航器不支持子页面。
    图 6. Tab 导航器
    Tab 导航器
    Tab 导航器
  • Tool bar。该组件是一个页面导航器,它显示为一个基于按钮的工具栏。具有子页面的页面被显示为简单的按钮,按钮旁有附加的下拉箭头。这种导航器只支持顶级页面和第一级子页面。
  • Tree。该组件是一个页面导航器,它显示为一个树。该组件可以表示整个页面层次结构,并可从此控件中进行选择。

Lotus Notes 组件

这些基于 Lotus Notes 的组件将 LotusScript® 独有的一些特性带入到复合环境中。

  • Calendar entry creator。该组件根据 iCalendar 记录创建日程表条目。该组件对于为基于 Eclipse 的组件添加我们熟悉的 “click here to add to calendar” 功能十分方便。请观看 YouTube 上的演示
  • Document viewer。该组件接受一个 Lotus Notes URL 并显示它。该组件可用于预览或者根据上下文动态呈现 Lotus Notes 元素。
  • Execute script。该组件通过一个动作执行 LotusScript。整个 LotusScript 程序可以作为 action 值传递,从而最大限度实现复杂逻辑的参数化。

实用组件

这些组件提供普通的实用功能。它们最常见的用法是作为其他组件之间的桥梁,将组件组装成一个应用程序。

  • Converter。该组件将标准类型转换成通用字符串类型,或者将通用字符串类型转换成某种标准类型。虽然该组件在很大程度上被 Lotus Notes 8.0.2 中忽略强类型检查的功能取代,但是如果需要支持较早版本的 Lotus Notes,那么这个组件比较方便。
  • Eclipse selection。该组件将当前选择的 Eclipse 对象转换成一个字符串。一个组件就是一个 Eclipse ViewPart。可以将已有的 Eclipse ViewPart 作为组件快速部署到复合应用程序中,但是还需要做一些附加的工作,才能使它们可以与其他组件交换信息。

    很多 Eclipse ViewPart 已经被设为 Eclipse selection 状态,所以该组件可以作为那些纯 Eclipse ViewPart 与其他组件之间的桥梁。

    该组件监视当前的 Eclipse selection 状态,当它改变时,将该 selection 的字符串值作为属性传播。然后,可以将该属性链接到其他组件上的动作。通过这种方法,可以将已有的 Eclipse ViewPart 作为组件部署,获得与复合应用程序中其他组件的交互性。

  • Lotus Notes name。该组件执行 Lotus Notes 姓名查找,并从姓名和地址簿中提取姓名、标识名、Internet 地址和最多 4 个其他字段。例如,该组件对于驱动 telephony 组件或者将目录中的特定上下文添加到应用程序中都很有用。
  • Lotus Notes URL processor。该组件使用一个 Lotus Notes URL(可以进行设置以响应当前选择的文档)。然后,可以在 @formulas 中设置任意数量的字段,以便根据给定的 URL 计算值。该组件最简单的用法是从一个文档提取字段,并将它们传播到其他组件。如果对要从中获取文档的数据库不具备设计者权限,那么这个组件非常有用。
  • Page namer。该组件是用于动态地重命名页面的一个实用组件。它可以非常方便地显示特定上下文。
  • Regular expression processor。该组件在一个动作中使用一个文本块。可以在其中使用正则表达式设置一些高级组件属性,以便获得具有匹配文本的一些属性的输出。可以将该组件与 Lotus Notes URL processor 结合使用来解析从 Lotus Notes 文档提取的字段的内容。
  • View utility。该组件是控制视图可见性的一个实用组件。很多时候,需要将屏幕上的组件设为可见或不可见,最大化或最小化。虽然可以在 Eclipse 中通过编程实现这一点,但是这种方法必须设计到组件中,并且无法从 LotusScript 进行访问。然而,通过这个组件则可以在装配时完成这个工作。
  • Web launcher。该组件接受一个 URL,并在环境内部或外部启动 Web 浏览器,以显示那个 URL。通常情况下的确可以访问 URL,但是,每当上下文发生改变就装载该页面的行为并不合理,因为这增加了可能不必要的开销。大多数 Web 页面被设计为全屏显示。虽然可以使用 Web clipper 组件(后面会提到)内联地显示页面的一部分,但是如果 URL 来自多种不同的站点,这不是好的解决方案。

    这个组件允许您在 Lotus Notes 外部或在 Lotus Notes 环境的单独的选项卡中装载 Web 页面。可以同时使用该组件和 clicker 组件为复合应用程序增加 “Click here to show Web page” 功能。

可视组件

这些组件用于以多种方式可视化显示一个数据范围。

  • Chart。该组件是一个基本的饼形图组件,它用于显示权重值数据。权重决定饼形图中楔形的宽度。当一个楔形被选中时,与之关联的值被传播。它使用与标记云(tag cloud)组件相同的数据格式,所以它可以由 Lotus Notes to tag cloud calculator 驱动,例如显示一个讨论数据库中每一类文章的数量的饼形图。
  • Mockup。这个纯视觉组件用于模拟和原型化用户界面(如图 7 所示)。它可以采用多种其他控件的外观,并且如果需要快速显示复合应用程序的外观,这个组件会很方便。还可以使用它在页面上绘制标签。

    图 7. 用 mockup 组件为复合应用程序建立原型
    用 mockup 组件为复合应用程序建立原型
    用 mockup 组件为复合应用程序建立原型
  • Lotus Notes join - table。该组件在表格中显示来自多个 Lotus Notes 源的经过计算的值。可以在高级组件属性中以 Lotus Notes URL 的形式指定每个源数据库或视图。对于每个源,可以选择添加一个 @formula,用于分析每个文档,以决定是否将它包括在表中。然后,对于每个源,可以提供附加的 @formula,以计算用于每个列的值。

    结果合并在一个表中显示。该组件将在 Lotus Notes client 和提供信息的服务器上产生大量的负载。所以,最好将它用于较小的数据集。

  • Lotus Notes join - tree。该组件在树形视图中以和 Lotus Notes join - table 组件相同的方式显示经过计算的值。
  • Lotus Notes to tag cloud。该组件计算来自一个 Lotus Notes 视图或数据库的标记云信息。可以使用高级组件属性指定用于计算关键字和权重的信息源和字段。如果使用另一个高级组件属性指定用于存储用户的字段,那么会显示两个按钮,以便在所有文档和当前用户的文档之间作出选择。对于 tag cloud、chart 或其他可兼容组件,可以将权重值的字符串作为属性传播。
  • Lotus Notes view to tag cloud。该组件是一个组合控件,它将 Lotus Notes to tag cloud、constants 和 tag cloud 组件集中在一起(如图 8 所示)。 它可以用于高级组件属性中定义的任何分类 Lotus Notes 视图,并且根据每种类别中文章的数量显示类别。

    图 8. 将标记云添加到数据库
    将标记云添加到数据库
    将标记云添加到数据库
  • Table。该组件显示由一个动作设置的值组成的表。焦点和选择状态通过一个属性传播。该组件适合快速显示任意数据。
  • Tag cloud。该组件显示一定范围的关键字,这些关键字由给定的值确定权重。该组件可以返回选择和焦点状态,并且提供了一个滑块控件,以便控制显示的标记的数量。
  • Web clipper。该组件显示一个 Web 页面并提取值。Web 应用程序通常可以为复合应用程序增加很多价值。但是,大多数 Web 页面被设计为填满整个屏幕。但是如果使用 web clipper 组件,则可以通过指定与包含的 HTML 匹配的正则表达式,对 Web 页面进行裁剪,选择性地显示某些部分。因此,可以创建 Web 应用程序的组件,而不必对它们作任何更改。请观看 YouTube 上的演示

Win32 组件

这些组件依赖于 Microsoft® Windows®,它们提供只在 Windows 操作系统上可用的特性。

  • Flash player。该组件播放 Flash 文件,Flash 文件可以从磁盘、Web 或 Lotus Notes 附件读取。这个组件对于将多媒体集成到应用程序很有用。请观看 YouTube 上的演示
  • OLE/ActiveX container。该组件提供 ActiveX 文档或控件,其中很多已经被设计为作为组件使用,并且很适合复合应用程序。要实现更紧密的集成,对于公布更深入集成的属性和动作的特定 OLE 组件,可以使用该组件的源代码为其创建包装器。
  • Reparent。该组件可以将 Win32 应用程序重新定义(reparent)为一个组件。按照设计,它将应用程序以界面形式集成到复合应用程序中,提供上下文但不提供集成。但是,提供了源代码,可以以此为基础创建特定应用程序的包装器,并构建那些集成连接(integration bridge)。请观看 YouTube 上的演示
  • Windows spy。该组件显示 Microsoft Windows 桌面中的所有窗口。该组件适合用于处理 Windows 应用程序的类名,以便和 reparent 组件一起使用。

其他组件

这个集合不是按特性组合而成的,它只是其他组件的一个普通集合。

  • WSDL editor。该组件用于编辑 WSDL 文件。它不能提供 property broker 编辑器中的一切功能,但是大多数情况下它可以满足大部分需求。
  • CA XML viewer。通过该组件可以在图形用户界面中查看复合应用程序(CA)XML 文件。虽然是只读形式,但是它可以作为一个起点,在此基础上创建用于迁移复合应用程序的管理工具。
  • Tester。该组件可以帮助使用标准值对组件进行单元测试。可以使用该组件可视化地输入值,然后将值发送到进行测试的组件上的动作。同样,可以看到测试的组件如何传播属性值。库中的几乎每个组件都有一个使用该组件的单元测试。它对于隔离问题和探索组件功能很有用。
  • Bookmark side shelf。该组件是部署为 side-shelf 组件的书签实用工具。

菜单特性

除了组件外,Lotus Notes 8 还支持其他类型的新增特性。本节讨论将附加菜单添加到 Lotus Notes 的一些特性。

  • Export a Lotus Notes document to IBM Lotus Symphony™。通过这个向导可以将选择的 Lotus Notes 文档导出到 Lotus Symphony 文档、电子表格或演示中。在使用该组件之前,必须创建一个模板 Lotus Symphony 文档、电子表格或演示,并将形式为 $(name) 的输入标记输入到文档的文本中。然后,选择文档,调用菜单功能,并选择模板。

    然后,可以将 Lotus Notes 文档中的字段映射到 Lotus Symphony 文档中的输入标记。完成这些后,Lotus Symphony 文档便显示在 Lotus Notes 中,以供进一步的编辑。如图 9 所示。

    这是从 Lotus Notes 文档创建库存材料(stock material)的一种好方法。请观看 YouTube 上的演示

    图 9. 将 Lotus Notes 文档导出为 Lotus Symphony 文档
    将 Lotus Notes 文档导出为 Lotus Symphony 文档
    将 Lotus Notes 文档导出为 Lotus Symphony 文档
  • Lotus Notes view to Lotus Symphony spreadsheet。通过该向导可以基于一个视图逐步创建一个电子表格。该向导显示视图中的列,可以从这些列中进行选择,然后 Lotus Notes client 中会显示一个 Lotus Symphony 电子表格,其中包含所选列的数据。然后,可以用新的电子表格创建图表、数据透视表等。请观看 YouTube 上的演示
  • Situational application wizard。通过该组件可以基于当前的书签选择创建临时的复合应用程序。对于选择的文件夹中的每个书签,在复合应用程序中创建一个页面。可以选择将选定的组件添加到每个页面或单独的页面中。完成后,可以直接使用生成的复合应用程序,或者对它进行编辑,以进行进一步的定制。这个向导适合快速创建情境应用程序或个人生产力应用程序,从而解决比较迫切的需求,这些需求可以在以后进行增强。

结束语

复合应用程序改进了创建应用程序的方式。在此基础之上增加一个包含可重用组件的组件库,您可以更快、更容易地通过共享组件开发解决方案,从而获得更多的好处。通过开发供个人使用或供他人使用的组件库,或者使用他人开发的组件,您就可以实现这些好处。

组件重用确实非常有用,这一点可以从 OpenNTF.org 站点 的下载统计得到证明。IBM 内部和外部开发的一些复合应用程序已经在使用本文描述的组件。请使用可重用组件为您的应用程序开发环境提速。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=388423
ArticleTitle=复合应用程序组件库 V2.0
publish-date=05112009