为 Webform Server 开发 IBM Lotus Forms

转自:http://www.ibm.com/developerworks/cn/lotus/forms-webform/index.html

简介

IBM Lotus Forms 用于开发和向用户交付数据驱动的、基于 XML 的电子表单(e-forms)。用户可以使用 Lotus Forms Viewer 和 Webform. Server 查看表单。Lotus Forms Viewer 为表单特性提供全面的支持;Webform. Server 不要求在每个桌面都安装客户端应用程序。由于这个原因,Webform. Server 用于广泛的用户群体。

由于 Webform. Server 中 XFDL 到 HTML 的转换,为 Webform. Server 开发 Lotus Forms for Webform. Server 与常规 Lotus Forms 开发实践在以下方面不同:

  • 转换到 HTML 之后的布局调整
  • 从 Webform. Server 打印
  • 表单特性行为差异
  • 浏览器差异
  • Webform. Server 产品限制

在 Lotus Forms 开发过程中,必须小心处理这些差别来满足用户的需求和期望。本文总结了在 Webform. Server 开发下处理 Lotus Forms 开发的最佳实践,讨论前面提到的方面。本文使用最新的 Webform. Server 3.5.1。针对 Lotus 的 IBM 软件服务一直被 Lotus Forms 客户应用到他们的项目上;这些主题是客户在使用 Lotus Forms 和 Webform. Server 3.5.1 时最常遇到的问题。

此外,本文还阐述了帮助客户了解 Webform. Server 行为的总体指导原则。

Webform. Server 的工作机制


图 1. 请求表单
请求表单

图 1 展示了 Webform. Server 如何处理表单请求。客户端浏览器将请求提交给表单应用程序(样例 Webform. Server 应用程序或任意定制应用程序)。然后该应用程序调用 Webform. 服务器转换程序进行从 XFDL 到 HTML 的转换。当 XFDL 转换成 HTML 之后,HTML 被返回到客户端浏览器并重新呈现。

用户完成表单之后,处理表单提交类似于表单请求,如图 2 所示。Web 应用程序和客户端浏览器之间的请求都是 HTML 格式的。


图 2. 提交表单
提交表单

从 Webform. Server 3.5 开始便引入了一个 Ajax 调用,从而改善 Webform. Server 用户的体验。通过引入 Ajax,表单上的一些动态计算不再需要刷新页面。JavaScript. 监听器将行为和事件处理程序转换成一个 Ajax 调用。然后,该调用被传递给 Webform. 服务器转换程序,并由该程序通过 Web 应用程序将 Ajax 响应发送回到客户端浏览器,如图 3 所示。


图 3. Ajax 请求
Ajax 请求 

Lotus Forms Viewer 和 Webform. Server 的区别

Webform. Server 的核心功能是将 XFDL 转换成 HTML。所有 XFDL 项都由一个 HTML 小部件或 Webform. Server 中的 JavaScript. 来呈现。尽管Lotus Viewer 的主要特性在 Webform. Server 中得到支持,但鉴于以下原因还存在一些差别:

  • HTML 存在很多难以克服的限制。
  • JavaScript. 不能用于复制所有功能。
  • Webform. Server 要求用户具有不间断的网络连接。

下面的几个小节描述一些主要的差异。

表单查看布局
文本布局稍微不同。

图 4 显示了在 Lotus Forms Viewer 中的布局。


图 4. Lotus Forms Viewer 中的布局
Lotus Forms Viewer 中的布局

图 5 在浏览器中显示在 Webform. Server 中呈现的代码。


图 5. 在 Webform. Server 中的布局
在 Webform. Server 中的布局

这种外观上的差异很难让这两种布局在 Lotus Forms Viewer 和浏览器中都呈现得很完美。还有两个不受 Webform. Server 支持的 XFDL 项:幻灯和 RTF。

表单打印
在 Lotus Forms Viewer 中,输出直接从 Lotus Forms Viewer 传输到打印驱动程序。在 Webform. Server 中,打印通过其他方式来实现。表单首先被转换成 PDF 文件或 GIF 图像。然后用户使用 Adobe® Acrobat 或 Web 浏览器将 PDF 文件或 GIF 图像传输到打印驱动程序。这种方法导致查看结果和实际的打印结果之间出现差距。

限制检查
在 Webform. Server 中,对用户输入的限制检查不是主动的,而是被动的。在用户从一个项切换到另一个项之前不会检查用户数据。如果数据不匹配格式,将标记为错误。这种方法意味着 Webform. Server 和 Lotus Forms Viewer 给用户带来不同的体验。

附件
在 Webform. Server 中,用户一次仅能将一个文件附加到表单。但是在 Lotus Forms Viewer 中就不存在这种限制。

行为和计算
在 Webform. Server 中不能够正确地重复一个行为。即使将一个行为设置为运行一次,它仍然在每次刷新页面时运行。现在一些计算被转换成 Ajax,但并不是所有都转换。当触发计算时,用户有时仍然能够发现页面被刷新。Webform. Server 不支持某些事件模型,比如 popup/combo 中的激活选项、击键选项和鼠标悬停选项。有一些事件模型计算可以通过转换程序属性配置文件来启用或禁用,比如 focused 和 focuseditem。

提交和电子邮件
数据提交的行为在 Webform. Server 中稍有不同。首先,它支持仅将数据发送到一个 URL。其次,servlet 支持已计算的 URL,但前提是它们提交到运行 Webform. Server 的服务器。在 portlet 中不支持已计算的 URL。

Webform. Server 不支持电子邮件功能;在工具栏上没有电子邮件按钮。即使表单上提供发送电子邮件的按钮,该按钮在浏览器中不起作用。如果用户需要使用电子邮件特性,那么只能将表单保存在本地磁盘,然后通过电子邮件发送它。

XML 数据模型和 XForms
Webform. Server 仍然支持 XML 数据模型,但是不支持针对 XML 模型的 Smart Fill 和为 XML 模型嵌入的 Web 服务调用。

Webform. Server 支持所有与 XForms 相关的特性,包括 XForms 事件、模型和 XPath。一个小区别是 XForms 提交导致刷新表单,但在 Lotus Forms Viewer 中不存在这种情况。

其他区别
其他一些区别包括:

  • Webform. Server 支持 XFDL 6.0 及其以后的版本,而 Lotus Forms Viewer 支持 XFDL 5.0 及其以后的版本。
  • Webform. Server 在 Microsoft® Internet Explorer 中省略不活动单元格,但在 Mozilla Firefox 中显示它们。Lotus Forms Viewer 一般都显示不活动单元格。
  • Webform. Server 的 XForms 模式验证仅限制在服务器端。
  • Webform. Server 不支持拼写检查。

最佳实践:Webform. Server 开发

当您使用 Webform. Server 开发表单时,必须考虑我们刚才提到的差别,以确保表单能够正常工作。下面提供一些使用 Webform. Server 开发表单的最佳实践,这是我们在参与几个 Lotus Forms 服务项目时总结的成果。这些最佳实践可划分成 5 个类别:

在线布局不一致

由于 HTML 中的元素不像 XFDL 中的元素那样存在像素位置,所以当表单被转换成 HTML 时元素位置就不再完全是原来的像素位置。在浏览器中的布局与在 Lotus Forms Viewer 和 IBM Lotus Forms Designer 中的 Design 视图中的布局稍微不同。

在线浏览器的布局和打印纸张布局也不同。您不能根据 Lotus Forms Designer 中的 Design 视图中的位置来创建布局。这种差别可能增加布局开发所需的时间,因为您必须在浏览器中检查每个调整。

图 6 展示了在浏览器中显示的文本。


图 6. 浏览器的文本布局
浏览器的文本布局

图 7 在打印 PDF 文件中显示了相同的文本。


图 7. 在打印中的文本布局
在打印中的文本布局

文本在打印时消失,即使它在浏览器中非常完美。解决该问题的办法是在表单上使用两个标签。一个标签用于在线浏览,另一个标签用于打印。在线浏览标签设置为打印时不可见。清单 1 显示了样例代码片段。


清单 1. 标签和打印标签

     
		……………………..
         508163onoff
      
		……………………..
         520163offon

这种解决办法能够让文本在两种情况下很好地显示。这种方法还适用于字段和其他类似的情况。

表单打印

在 Webform. Server translator.properties 文件中有一些属性用于控制 Webform. Server 的打印行为。表 1 列出了一些常用的打印设置并提供建议设置值。


表 1. 打印设置

名称最佳实践
printOutputFormatpng | pdf | pdfa | gif | plugin/png |plugin/gif建议使用 PDF,它的图像打印效果比较好。
printPDFPageWidthInches默认值:7通常设置为大约比目标纸张的尺寸小 0.5 英寸。对于信纸,设置为 8 或 8.3。
printPDFPageHeightInches默认值:9.5通常设置为大约比目标纸张的尺寸小 0.5 英寸。对于信纸,设置为 10.5 或 10.6。
printPageLayout默认值:shrinktopage在一个方向选项中使用标题。
printRadioToCheck默认值:true如果客户想要使用无线设备发送,那么需要关闭该选项。
printScrollbarsOnFields默认值:true如果文本超出显示范围将被截掉,因此建议将该选项设置为 false。

在打印纸张表单时,有时需要调整页面底部、顶部、左侧和右侧的边沿。为了控制页面边沿,您可以使用表 1 中的 printPDFPageWidthInches 和 printPDFPageHeightInches 来调整边沿。建议为表单元素的界线设置一个标准的 x,y 位置,然后在实际的页面测试之后调整这两个属性。

如果页面内容超出界线并且选择了 shrink-to-page 选项,有时可能导致页面变形。如果选择了 title-in-one-direction 选项,将生成另一个空白页。这种情况将导致一些页面元素在页面界线之外。

有时即使超越界线的元素不可见,但它们会生成一个多余的空白页,从而影响到页面打印。要解决这个问题,必须确保所有页面元素都在页面界线之内,包括不可见的元素。

浏览器差异

尽管 Webform. Server 支持不同版本的 Firefox 和 Internet Explorer,但浏览器支持 HTML 和 CSS 标准的本性导致它们之间出现差异。如果您想要表单在两个浏览器中都完美地呈现,那么必须小心地处理这一差异。其中一个方面就是下拉列表的行为。图 8 显示了在 Firefox 3 中的下拉列表。


图 8. Firefox 3.0
Firefox 3.0

图 9 显示了在 Internet Explorer 7.0 中的下拉列表。


图 9. Internet Explorer 7.0
Internet Explorer 7.0

通过图 8 和图 9 可以看到下拉列表的宽度不一样。在 Internet Explorer 7.0 下拉列表中的项不能完全显示。确保下拉列表能够在两个浏览器中都完全显示的唯一方法是为组合框分配足够的宽度,从而让文本能够在两个浏览器中完全显示。

即使是相同浏览器的不同版本,您也能发现某些行为存在细微的差别。图 10 显示了表单在 Internet Explorer 7.0 中的一个例子。


图 10. Internet Explorer 7.0
Internet Explorer  7.0

图 11 显示了表单在 Internet Explorer 6.0 中的例子。


图 11. Internet Explorer 6.0
Internet Explorer 6.0

要避免该问题,一个最佳实践就是在征得客户同意后在项目中只关注一个类型的浏览器。选择 Internet Explorer 7 或 Firefox 3 比选择 Internet Explorer 6 或 Firefox 2 好,因为前者对 HTML 和 CSS 的支持更好。

表单特性行为

Webform. Server 有一些需要特别关注的独特行为:

页面刷新
页面通常在发生计算或行为之后刷新。如果每个下拉选项或值填充都需要刷新页面,可能会让用户感到烦心。有时候,如果计算或 XForms 事件很复杂,浏览器端的响应时间就会变慢。没有配置能够改变该行为。唯一的解决办法是让表单逻辑保持简单,并将复杂的逻辑从表单作用域移除,比如将其移动到后台 servlet。

按需页面加载
全局表单有一个选项允许您指定在表单打开时加载哪个页面。在图 12 所示的例子中,加载了两个页面 PAGE1 和 SummaryPage,但没有加载其余的页面。当表单比较大时,这个选项能够改善表单的加载速度。在 Webform. Server 中,这个选项能够帮助您避免加载大表单时出现内存不足的错误。


图 12. 页面加载
页面加载

不过,当存在跨页面引用时,该选项还能导致一个问题。如果一个计算引用另一个未加载的页面上的项,该计算将不能完成,因为所引用的项没有加载到内存中。对于这种情况,需要加载被其他页面引用的所有页面。另一个办法是确保被引用的页面在页面导航顺序中首先加载。

XForms-ready 性能
有两个 XForms 事件可用于在表单加载时执行函数:XForms-ready 和 xforms-model-construct-done。在 Webform. Server 中,这两个事件的响应时间是不一样的,因为 Webform. Server 以不同的方式呈现它们。表 2 显示了通过 Webform. Server 呈现表单时的详细性能测试结果。


表 2. 响应时间对比

响应时间xforms-readyxforms-model-construct-done
服务器响应时间8.44 s5.70 s
第一浏览器响应时间13.02 s9.85 s
平均浏览器响应时间10.14 s7.10 s

从表 2 中显示的测试结果可以看到,很明显 xforms-model-construct-done 的性能更好。在调用 xforms-ready 之后,需要再次调用 UI 呈现,但在调用 xforms-model-construct-done 之后,不需要再次调用 UI 呈现。在这里,建议对任何没有调用 UI 更新的逻辑使用 xforms-model-construct-done,以缩短响应时间。

Webform. Server 产品限制

Webform. Server 产品存在一些已知的但又无法解决的限制。例如:在一个打印 PDF 页面上,复选框的边框不能正确显示,并且在实际打印出来的页面上,复选框的颜色是灰色的。这个限制可能会给用户带来困惑,如图 13 所示。


图 13. 复选框
复选框 

Webform. Server 服务支持要点

下面是我们从几个服务项目中学到的技巧:

  • 不可能在所有访问方法(视图、Webform. Server、打印页面)中都实现完美的表单,这是由 Webform. Server 的性质决定的。在开始开发之前,应该和客户达成协议,应该使用哪种访问方法作为开发和测试的基础。
  • 客户需要了解在 Webform. Server 下开发表单需要花费更多时间。此外,还要考虑本文介绍的一些技术和注意事项,这让表单的开发更慢。
  • 存在一些产品限制因素,它们导致 Lotus Forms Viewer、在线布局和打印 PDF 文件之间出现不一致的情况。客户需要了解这些差异并接受项目中存在的风险。

    结束语

    总而言之,为 Webform. Server 开发 Lotus Forms 与为 Lotus Forms Viewer 开发表单不同,前者需要付出更多的努力。通过了解 Webform. Server 的本质并应用本文介绍的最佳实践,您就能够在开发阶段解决潜在的问题,并构建出让客户满意的项目。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14751907/viewspace-631574/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14751907/viewspace-631574/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值