内容


定制 Domino Web Access 6.5 的外观

Comments

从一开始,Domino Web Access(以前称为 iNotes Web Access)就专注于提供世界级的、高性能的、可伸缩的 Web 体验。Domino Web Access 总是包含一些配置设置,以便为客户可能想做的事提供现成的选择,以后我们将继续扩展这种可配置性。

但是许多客户不想只是进行一些简单的配置更改,他们想用这些更改以外的一些方法来修改 Domino Web Access,例如,添加或删除菜单项,或者让颜色方案与客户公司所需颜色相匹配。Domino Web Access 设计组对定制投入了越来越多的关注,有了 Lotus Domino 6.5,Domino Web Access 模板就变得更加用户化。

在本文中,将重点介绍用来定制 Domino Web Access 用户界面和屏幕布局的选项。开始,我们将讲述一些关于如何生成 Domino Web Access 页面以及定制这些页面所面临的困难的背景知识。然后将回顾一些 Domino Web Access 6.5 的基本定制。接下来将讨论 Domino Web Access 页面内使用的特殊服务器端标签,以及在皮肤中使用这些标签的方法。我们将简单了解一下基于 Java 的皮肤编辑工具,可以从 Sandbox 下载这个工具。最后,我们将看一下正为 Lotus Domino 7 中的 Domino Web Access 定制所做的一些工作。

定制所面临的困难

与诸如 Notes 客户机之类的典型二进制可执行程序不同,整个 Domino Web Access 用户界面是由 HTML、JavaScript、Cascading Style Sheets 和各种图形文件组成的。Domino Web Access 页面是通过这些使用设计元素的标准 Web 技术拼合在一起的,设计元素位于服务器上的 Notes 数据库 Forms6.nsf 中。可以通过编辑大多数 Domino Web Access 页面的组件来改变这些页面的内容。但是有一些困难。

第一个困难是 Domino Web Access 不是典型 Domino Web 应用程序。这在很多方面都会影响定制工作。知道如何构建 Domino 应用程序在修改 Domino Web Access 页面方面很有帮助,但是 Domino Web Access 的架构没有遵循典型 Domino Web 应用程序的架构。Domino 开发人员将很难标识要修改的正确设计元素。此外,编程挂钩也不同。特别是经常有类似 QueryOpen 和 QuerySave 的请求 —— 但是 Domino Web Access 中没有这些 Notes 表单事件。

另一个困难是 Domino Web Access 中使用的 JavaScript 代码。该代码含义模糊(即简短),从而可提高应用程序的运行时性能。下载到浏览器的字节数越少或从浏览器缓存加载的字节数越少,应用程序的性能就越高,应用程序消耗的带宽越少。所以要在类似编译的过程中优化 Domino Web Access 代码,以便加快下载。Domino Web Access 源代码是在文本文件中维护的。构建新应用程序版本之后,会对源代码运行一种特殊的工具,以便创建 Forms 文件。这种模糊处理工具会删除所有元素,并用下面左边更简短(但含义更模糊)的名称替代右边那些有意义的对象名称。该过程生成下载较快、但是对编程人员来说比较难读的代码。可以下载完整的转换表。一个小的 128 KB 的文件示例如下所示:

BdA	IERichTextArea_insertHTML
BdB	CSequentialAsyncAction_doCommited
BdC	CCSFormControler_getRepeatingDatesAreaHtml
BdD	ShimmerException_getMessageFmt
BdE	CCSFormControler_registerRescheduleDialog
BdF	CResPickControler_disableFields
BdG	FixupButtonWidths
BdH	CCSFormControler_getCurrentWinDocCtx
BdI	redirView
BdJ	NSRichTextArea_getDataTextFormat
BdK	IERichTextArea_adjustHeightToFitInWindow
BdL	theWelcomeFrameset
BdM	NPW_focusCaret
BdN	isDirectoryInFileset
BdO	CCSMeetingAction_grantPerform
BdP	sCategorie

从 Lotus Domino 7 开始,Forms 文件将包含名为 ObfuscationList 的 File Resource 设计元素,该元素将存储适当的映射。

皮肤给开发人员带来了另一组难题。在 Domino Web Access 中,创建用户界面元素的代码被组织为皮肤和皮肤组件。皮肤布局从来都不容易获得。不过,最近我们开发了皮肤编辑工具来帮助开发人员修改皮肤和创建新的皮肤组(skin group)。有关的详细信息,请参阅本文后面的“处理皮肤”一节。

在 Lotus Domino 7 中,皮肤现在是指 File Resource 设计元素,可以轻松地使用传统文本编辑器导出并修改这些元素,然后使用 Domino Designer 重新导入。

Domino Web Access 模板

Domino Web Access 模板与其他 Domino 模板不同。它完全从标准邮件模板(Mail6.ntf)继承而来。该继承允许邮件用户利用标准模板的各种功能从 Notes 客户机访问邮件文件,它还允许使用 Domino Web Access 从浏览器访问同一邮件文件。下图显示了 Domino Web Access 模板(对于标准邮件模板,该模板为 iNotes6.ntf)与用户的邮件文件(图中的 JUser.nsf)之间的关系。

图 1. 标准邮件模板和用户的邮件文件
标准邮件模板和用户的邮件文件
标准邮件模板和用户的邮件文件

Domino Web Access 模板还特别引用单独的数据库 Forms6.nsf,该数据库包含 Domino Web Access 设计元素。Domino Web Access 使用的所有表单、子表单和大多数图形都位于这个数据库中,该数据库位于服务器上的 <domino data>\iNotes\ 子目录中。(邮件视图中使用的一些图像包含在 Domino icons 目录中或包含在邮件模板中。)Forms6.nsf 是数据库(而不是模板),因为 Domino Web Access 直接向这个数据库发出 URL 来检索许多共享页面和元素。因为性能和磁盘空间消耗的缘故,这些页面和元素集中在 Forms6.nsf 中,而不是分布在单个邮件数据库中。访问某台服务器上的邮件文件的所有 Web 浏览器都使用这组设计元素,这些元素还被缓存在服务器上,以便获得更好的性能。

在将用户的邮件文件设置为使用 iNotes6.ntf 模板时,它会继承这个模板中的所有设计元素,同时还继承对共享 Forms 文件的引用。这两种源(模板和 Forms 文件)提供了构建单独 Domino Web Access 页面的资源。

iNotes6.ntf 模板数据库包含其他一些元素,比如支持从 Personal Address Book 和 Personal Journal 的 Notes 客户机到 Domino Web Access Contacts 和 Notebook 区域的双向同步。还有一些仅由 Domino Web Access 使用的大纲和视图,用来显示日历、日志条目和 TOC(Table of Contents 或 Top 级菜单)。

定制警告

虽然可以定制 Domino Web Access,并且本文也讨论了许多定制项目,但是我们必须先进行免责声明:

IBM Lotus Support 既不认可也不支持使用改变的模板或其他定制的 Domino Web Access 安装。对于说明由定制模板而导致一些事件的客户,IBM Lotus Support 将指示该客户恢复普通模板,以查看问题是否仍然存在。如果仍然存在问题,IBM Lotus Support 将解决该问题,因为它存在于普通模板中。如果该问题在普通模板中不存在,那么 IBM Lotus Support 将建议客户删除所进行的修改,并提交关于下一版本预期功能的改进请求。这个策略也包括 Forms6.nsf 数据库。

您应该据此安排所有定制,避免对之后可能需要 IBM Lotus 支持的重要应用程序进行定制。

一个好的开发方法是备份您打算以某种允许将所有更改倒转回 Lotus Domino 安装的方式修改的任何数据库或设计元素。也就是说,有一些修改应该不会损害 Domino Web Access 的功能。

Lotus Domino 6.5 之前版本的定制

版本 6.5 的 Domino Web Access 版本仅支持有限的定制,大多数更改都是通过使用 Domino Designer 编辑表单数据库中的表单进行。Welcome 页面和视图页面的一些更改包括:

  • 更改徽标。
    可以用其他图像文件替代屏幕左上角的徽标。必须首先为表单数据库创建包含富文本字段的表单来显示图像。然后在名为 hResourcesbyName 的视图中,编辑名为 iwa.gif 的文本,最后用您的图形替代徽标图像。
  • 修改 Table of Contents 中的条目。
    可以重新排序或删除顶级 TOC 中的条目(Welcome、Mail、Calendar、To Do List、Contacts、Notebook 等)。例如,如果不想让用户看到 Welcome 页面,可以将其从 TOC 中删除。
  • 向 Mail 视图中的大纲添加视图或文件夹。
    可以在用户的邮件数据库中创建新的视图或文件夹(只能创建不加分类的),并将它们添加到当前视图左边的大纲中。还可以重新配置这个大纲的默认显示顺序。虽然不能在 Calendar 视图中修改现有视图列,但可以在 Mail 视图中修改它们。

IBM 红皮书 iNotes Web Access Deployment and Administration 中包括关于如何执行这些修改的详细说明。

定制 Domino Web Access 6.5

在 Lotus Domino 6.5 版本中,Domino Web Access 在许多方面进行了改进,其中多个更改设计可用来使客户更容易地进行更改,特别是对 Domino Web Access 的图形外观进行更改。这些更改使人们可以定制 Welcome 页面,向操作栏和 Tools 菜单添加一些项,定制 Domino Web Access Redirect 登录页面以及其他操作。

IBM 红皮书 Domino Web Access 6.5 on Linux 中包括一个非常好的 Domino Web Access 定制示例的集合。

Domino 开发人员可以使用 Domino Designer 修改 Forms6.nsf 数据库中的多个表单。例如,开发人员可以修改 s_MailMemoEdit 子表单,从而使电子邮件中包含地点或部门。开发人员还可以在 Scene_PreSubmit 函数(在 Custom_JS_Extensions 表单内)中编写代码,以验证新的字段。

Domino Web Access 6.5 on Linux 描述了管理员和 Domino 开发人员可以执行的多个定制项目:

  • 修改操作栏
    Redbook 使用两个例子说明了如何向操作栏添加新的菜单选项。一个例子通过添加函数来显示 Web 页面 —— 在下面例子中,该页面为 ITSO IBM Redbook Web 页面:
    图 2. 操作栏
    操作栏
    操作栏

    另一个菜单定制创建函数以显示警报、对话框或两者同时显示,它们会显示一个或多个所选文档的 UNID。这些操作按钮是通过编辑 Forms6.nsf 文件中名为 Custom_JS 的表单来创建的。这两个按钮的条目被添加到名为 Scene_Actions 的函数中。第一个按钮不需要其他代码。第二个按钮需要新的函数 ShowDocUIDs,这个函数显示了包含所选文档 UID 的警报框。

  • 向 Tools 菜单添加子函数
    这个定制将向 Tools 菜单添加一个条目,创建一个包含预填充主题字段的新 Help Request 邮件消息:
    图 3. Tools 菜单
    Tools 菜单

    再次说明,要修改 Forms6.nsf 文件中的 Custom_JS 表单来添加这个条目到 Tools 菜单中,并添加新的函数 SendHelpRequest 来处理消息的创建。

  • 定制 Welcome 页面
    可以定制名为 Custom_WelcomePage 的表单,增加更多的在 Welcome 页面配置的 Edit 对话框内进行 Web 站点选择控制的机会。下面的屏幕显示了要在 Domino Designer 中进行编辑的已打开的 Custom_WelcomePage:
    图 4. Custom_WelcomePage 表单
    Custom_WelcomePage 表单
    Custom_WelcomePage 表单

    Redbooks Web 页面已经通过标题变量中的条目(ITSO)和 URL 变量(http://www.redbooks.ibm.com/)添加到页面列表中。保存表单并重新启动 HTTP 服务器后,ITSO 条目会显示在配置屏幕中可用页面的列表中。将 Domino Web Access 设置为随 ITSO 页面的显示而打开,这将产生如下所示的结果:

    图 5. Domino Web Access 中的 ITSO 页面
    Domino Web Access 中的 ITSO 页面
    Domino Web Access 中的 ITSO 页面
  • 定制横幅
    通过修改 Custom_Banner 子表单,可以用其他图像或文本字符串替代 Domino Web Access 徽标。该子表单包含一行 HTML 代码。要用文本替代徽标,请使用以下这行代码:

    <div><h2><b>Custom text goes here</b></h2></div>

    要用图形替代徽标,则创建图像资源并在子表单中输入到这个图像资源的路径:

    <div><img src="../../../../inotes/forms6.nsf/alt-logo.gif?OpenImageResource"></div>

    还可以通过定制用于横幅背景的图像来更改横幅的外观。这比较复杂。背景图像取自名为 gradblue10.jpg 的文档的附件。可以在 Forms6.nsf 数据库的 hRessourcesByName 视图中找到这个文档。

    没有任何表单显示该文档存在于 Forms6.nsf 数据库中,所以您必须在 Domino Designer 中创建这个文档。将该文档命名为 Image,并在其中创建名为 Body 的字段和指定富文本类型。

    保存该表单后,通过 Notes 客户机打开 hResourcesByName 视图。打开 gradblue10.jpg 文档并分离图像文件。用图形编辑工具修改图像的颜色,然后重新附加该文件,而不更改图像的名称或大小。最后保存并关闭文档。在重新启动 HTTP 服务器时,Domino Web Access 将显示新的背景。

    在 Lotus Domino 7 中,Domino Web Access 使用的所有图像均作为文件存储在 File Resource 设计元素中。这使得提取图像更容易,从而可以用任何图像编辑器来编辑图像,然后重新插入这些图像。

  • 定制 Domino Web Access Redirect 登录和重定向屏幕
    Domino Web Access Redirect 是 Domino Web Access 6.5 中的新功能,使用户可以登录到运行 Domino Web Access Redirect 数据库的服务器中并自动重定向到不同的服务器。这种重定向允许用户访问不同服务器的邮件文件,而无需知道文件或邮件服务器的名称。

    可以将其他功能编码到 Domino Web Access Redirect 中。Redbook 建议您将这些功能集成到门户中,或者修改登录和重定向屏幕,以便与公司的颜色标准和设计标准相匹配。因为这些是正规 Notes 表单,而不是 Domino Web Access 模板,所以可以在 Domino Designer 中对其进行更改和改进 —— 但是注意不要更改登录屏幕上的字段,否则登录过程可能无法正常运行。

    还可以使用 Notes.ini 变量 iNotes_WA_LogoutRedirect 指定 URL,在用户从 Domino Web Access 退出之后,将其重定向到该 URL。可以使用这个变量使用户返回登录页面、公司门户网站页面或定制的 Domino Web Access 退出页面。

处理皮肤

Domino Web Access 初次打入市场时,它利用了许多已经添加到 Lotus Team Workplace(以前称为 QuickPlace)中的 HTML 用户界面开发。QuickPlace UI 中的一个重要概念就是皮肤或主题,它表示某一位置的统一图形外观。该产品中包含许多皮肤;创建新的 Workplace 时,可以选择确定其外貌的皮肤。开发人员可以调整主题的修饰来更改颜色和字体。他们可以定制 Workplace 中的现有表单,并且可以创建其他表单,以为了满足皮肤组的需要才具有的方式来收集信息。

(有关定制 Lotus Team Workplace 的详细信息,请参阅 developerWorks:Lotus 中的“Discovering Lotus Team Workplace customization”一文和 IBM Redbook“Customizing Quickplace”。)

遵循 Lotus Team Workplace 模型,所有 Domino Web Access 表单和子表单都使用 pass-thru HTML(即使未设置这种特殊属性)。该 pass-thru HTML 包含一些特殊标签,当将响应 HTML 放在一起时,由服务器解释这些特殊标签:一个标签用来插入皮肤,一个标签用来插入特定皮肤组件或子表单,其他标签则用来进行其他操作,比如评估计算的块,以及确定持久存储项和仅计算项等。

Domino Web Access 中的所有主页面 —— 所有视图页面,所有读取或编辑对象页面和首选项页面 —— 都使用 iNotes6.nsf 数据库中名为 h_PageUI 的表单。这个表单自身非常简单。但它包括 HTML 以及主体的开始和结束标签,而且还包括一些特殊标签,其中包括:

  • Computed text
    该标签采用“@{ }”形式。在大括号内,可以包含任何公式。在 Domino Web Access 代码中,许多公式在存储到表单或子表单中之前都进行了编译,二进制结果都用 base64 进行了编码。没有编译的公式也可以放在标签之间,并会在运行时被编译和执行。
  • InsertNotesSubForm (<InsertNotesSubform name=formname>)
    该名称可以是任何子表单名称。Domino Web Access 使用计算公式确定许多已插入子表单的名称:这就是它如何可以使用一个表单显示 Domino Web Access 页面的原因。
  • QuickPlaceSkin
    该标签为:<QuickPlaceSkin>。这个标签可插入相关皮肤布局的全部内容。
  • QuickPlaceSkinComponent
    该标签可以有多个参数。在最简单形式中,它包含 <QuickPlaceSkinComponent name=formname>。更复杂的皮肤组件标签会包括 JavaScript,它包含所有指定属性的值,然后还会插入一个子表单。

下图包含这些标签的例子并显示了它们如何创建页面:

图 6. QuickPlace 标签
QuickPlace 标签
QuickPlace 标签

在表单的顶部,InsertNotesSubForm 标签查找具有指定名称的子表单,并在该标签的位置插入子表单的内容。在示例中,这个子表单包含<head> 开始和结束标签,并包含引入公共外部脚本文件和标准样式表的其他标签。

同样,在表单的底部,h_HTMLTailContent 子表单在所有页面的底部调用的一些标准脚本中。我们将一些看不见的 HTML 元素(如 XML 岛)和逻辑(如轮询新的消息和警告)放在这里。

在表单的中间,QuickPlaceSkin 标签在组成页面主体的 HTML 中。这包括一个皮肤,在这个皮肤内,有打包为皮肤组件的其他 HTML,这些组件可以由皮肤重新使用。

名为 PageContent 的皮肤组件包含页面的实际内容。在这个 PageContent 组件内,Domino Web Access 按照“演一场戏”的 QuickPlace 编程约定。场景只是通过特殊命名规则相关的两个子表单。具有场景名称的子表单被发送到 HTML 页面的内容区域,在页面的标头区域发出具有相同场景名称和 _Init 后缀的匹配子表单。

下面的 HTML 是皮肤代码的片断。它包括定义表中屏幕布局的常见标签,以及 QuickPlaceSkinComponent 标签的两个偶然事故。这个标签是在具有指定皮肤组件名的子表单中调用的,它发出了与皮肤组件逻辑进行通信的脚本:

<table cellpadding="0" cellspacing="0" border="0" height="18">
  <tr valign="middle">
    <td class="s-bidi-flip" nowrap width="8">
      <img width=8 height=21 class="s-stretch-y" 
      src="/iNotes/Forms6.nsf/h_ResourcesByName/tools-begin.gif/$FILE/tools-begin.gif
        ?OpenElement&MaxExpires">
    </td>
    <td class="s-tool-text s-tool-bg" nowrap>
</td>
   :
<QuickPlaceSkinComponent name=Logout>
<QuickPlaceSkinComponent name=ShimmerChat Format={
<td class="s-tool-text s-tool-bg-middle" nowrap><Item></td>}>

皮肤编辑器

定制 Domino Web Access 的一个难题之一就是编辑皮肤。可以从 Sandbox 下载皮肤编辑工具。这个工具对 Forms6.nsf 文件进行操作,允许添加、删除或更改视图和表单页面上对象的位置和编辑样式表,以更改对象的颜色和样式。该工具如下图所示:

图 7. Domino Web Access 皮肤编辑工具
Domino Web Access 皮肤编辑工具
Domino Web Access 皮肤编辑工具

Browser Skins 选择框显示可用皮肤组 —— 皮肤组是一组共享相同样式表的皮肤。Domino Web Access Forms 文件包括三个皮肤组:h_ShimmerSkin(用于 Internet Explorer)、h_ShimmerSkin_Gecko(用于 Mozilla)和 h_ShimmerSkin_UB(用于不受支持的浏览器)。用于 Internet Explorer 和 Mozilla 的皮肤组之间的惟一区别是样式表。

Domino Web Access Skins 选择框显示皮肤类型,比如 h_Page、h_ListFolder、h_Edit、h_MailPage、h_Portal,等等。

用于页面的皮肤布局由两个仅计算变量 h_SetSkinGroup 和 h_SkinTypeOverride 确定。h_SetSkinGroup 指定要使用的皮肤组,h_SkinTypeOverride 指定要使用的皮肤类型。有一些默认值。如果正在编辑文档,那么皮肤类型默认为 h_Edit 皮肤。如果 h_Type==“1”(文件夹的 QuickPlace 标识符),那么皮肤类型为 h_ListFolder。否则,皮肤类型为 h_Page。

要对 Domino Web Access 页面进行更改,必须在皮肤编辑器中编辑相应的皮肤类型。为了确定要编辑的皮肤类型,需要在 Web 浏览器中查看页面并显示源代码。(对于 Internet Explorer,则通过调用 View/Source 菜单项或右击显示的页面并选择 View source 来确定要编辑的皮肤类型。)页面上的两个 JavaScript var 定义将标识当前皮肤组和类型:h_CurrentSkinName 和 h_CurrentSkinType。

var h_CurrentSkinName = 'h_ShimmerSkin';
var h_CurrentSkinType = 'h_ListFolder';

Lotus Domino 7 中的新功能

对于 Domino Web Access,正在进行大量的工作使其在 Lotus Domino 的下一版本中更加用户化。本文前面已经讲述了其中一些更改。主要改进包括:

  • 如前所述,公式在其表单和子表单的原始文本中将是可用的。服务器端表单/子表单缓存已经进行了改进,以便在第一次访问表单或子表单时编译公式,然后将编译结果存储到缓存内。用这种方式,不会以牺牲性能为代价来获得可定制性。
  • Domino Web Access 中的所有图像都将存储为 File Resource 设计元素,从而使它们更易于标识和替代。
  • 称为 ObfuscationList.txt 的新 File Resource 设计元素将包含清楚易读的代码名称到简短含义模糊的名称的映射。
  • 皮肤将更容易编辑。对于 Forms7.nsf(Domino 7 Forms 文件),将不需要本文前面提到的皮肤编辑器。所有皮肤都将存储为 File Resource 设计元素。相关设计元素的名称将是皮肤组名称后加上连字符,然后再加上皮肤类型名称。
  • Domino Web Access 7 将支持 QueryOpen 和 QuerySave 代理。
  • 名为 Domino Web Access_tags 的特殊表单将存储包含 Domino Web Access 名称空间的定制标签的定义。在 Forms7.nsf 文件的表单和子表单内的 pass-thru 中,您将看到这些标签。例如:

    <DWA:getvars includeall="0" />

    这个表单将提供一种避免(或至少减少)pass-thru HTML 内出现这么多计算 Notes 公式的方法,并提供了另一种性能改进。

显然,Lotus Domino 7 将标志着 Domino Web Access 的可定制性的重大提高。以后的 developerWorks:Lotus 文章将详细研究当对具有特定 Form 类型的邮件文件中的特定文档进行操作时,Domino Web Access 如何确定要演哪一场“戏”,它如何显示特定 Form 类型的实际字段值,如何通过定制 Notes Dictionary 条目将其他字段添加到特定 Form 类型中,以及如何使用新的 QueryOpen 和 QuerySave 代理功能。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=86328
ArticleTitle=定制 Domino Web Access 6.5 的外观
publish-date=06202005