技术开发 频道

巧用Lotus Forms实现非常好的集成

    版本问题

    安装需要集成的各个产品还应该注意产品的兼容问题,下表列出了集成版本的最低版本要求以及推荐版本要求,仅供读者参考:

    表 2. 版本兼容表

    WebSphere Portal WebSphere Process Server Lotus Form. Server 总结

    WebSphere Portal Version 6.0 WPS 6.0.1 (Business Process Choreographer 6.0.1) Lotus Form. 2.5 or Later 最低配置

    WebSphere Portal Version 6.0.1 WebSphere Process Server 6.0.2 (Business Process Choreographer 6.0.2) IBM Lotus Form. 3.0.1 推荐配置

    注:如要在 Portlet 里面应用 XFDL Forms 必须使用 2.5 版本以上的 IBM Lotus Forms 产品。

    配置部署需要注意的一些事项

    电子表单文件的部署

    想要将电子表单文件镶嵌到 Portlet 里面展示给用户,很容易想到的一个问题就是,我该把电子表单文件放在那里?怎么加载、解析以及提交一个添好的电子表单呢?

    要想使 Portlet 完成电子表单文件的加载解析,您需要实现有 Lotus Form. Server 提供的IBMWorkplaceFormsServerPortlet 类,电子表单的加载解析是由该类中的 doViewEx 方法完成的(您需要在方法中指定加载文件的方式以及位置),电子表单中的 Action 的执行是由该类中另一个方法 processActionEx 完成的(该方法将在后面的章节中讨论)。如何实现 doViewEx 以及 doViewEx 的工作原理并不是本文的讨论重点,您可以参考 Lotus Forms 信息中心了解更多相关内容。

    下面我们就电子表单文件的存放位置小作讨论,实际上您的电子表单文件可以存放在任何位置,只要您在 doViewEx 中可以找到这个位置并找到指定的文件。但是,通常情况下我们在实现 Portlet 时会考虑如下两种选择,读者可以根据自身项目的情况权衡利弊,任选其一:

    表 3. 电子表单部署对照表

    部署位置 优点 缺点 适应的场景

    部署到 Lotus Forms Server 中的某个绝对位置 Translator 与电子表单文件在同一台机器上,加载速度快; 每次对于电子表单文件的修改都要将新文件重新上传到电子表单服务器端; 电子表单文件固定,不会作很多修改,但是 Portlet 可能会根据业务需求进行修改(如修改对于 Action 的处理等);

    打包到 Portlet 实现的 WAR 中 电子表单文件与 Portlet 应用程序绑定在一起,业务逻辑和实现更加模块化; 每次对于 Portlet 的代码进行修改时都不得不把电子表单文件一起同时重新部署; Portlet 的逻辑代码固定,不会作很多修改,不希望经常对电子表单服务器进行改动;

    调用Web Service的注意事项

    完成了 WebSphere Portal Server 与 Lotus Forms Server 的集成后,一个新的问题又摆在了您面前,如何从利用这个电子表单来调用后台的流程呢?

    Lotus Forms 产品组支持以 Web 服务的方式来调用流程,但是对于您要暴露的 Web 服务有一些要求,您在将流程暴露成 Web 服务的时候一定要注意这些问题,下面列出最常见的事项:

    Web Service 的服务和端口名字中都不能含有 “_”;这个是最长碰到的一个问题,因为 RSA, RAD 以及 WID 自动生成的多数的服务名和端口名中都含有 “_”,程序员在使用这些 Web Service 之前一定要对这些名字进行重构或者对于之前的 Web Service 进行进一步的 Mapping 转化成不含有 “_” 的服务;

    Web Service 不可以含有强制 Headers,如 soap:mustUnderstand 等;

    Web Service 只能利用 46 种简单数据类型,不可含有第三方定义的简单类型的扩展数据类型;

    更多的关于 Web Service 的限制条件请参考 Guide to Building and Integrating a Sample Workplace Forms Application。

    XForms Submissions

    如电子表单文件部署一节中所述,解决了定位解析电子表单的任务之后,下一个摆在面前的问题就是如何去提交 Web 服务请求。Lotus Form. Viewer 有一个内置的 Web Service Consumer 支持对于 Web 服务的调用,但是 Lotus Form. Server 并不支持这种机制。不过,Lotus Form. Viewer 和 Lotus Form. Server 都支持利用 XForms Submission 来实现的对于 Web 服务的调用机制。该机制可以通过 HTTP 消息(GET, POST 或者 PUT)将 XML 兼容的数据流转行成 Web 服务的应答和请求。关于如何定义 Submission 中的各个属性以及与 Submission 属性直接相关的数据模型实例 (data model instance) 的定义方法请直接参考 Guide to Building and Integrating a Sample Workplace Forms Application 以及 Lotus Forms Information Center。

    下面关于 Submission 的这个章节是笔者在调试电子表单调用 Web 服务程序时亲身经历的一个问题。

    在调试一个嵌有 XForms Submission 的电子表单文件时 (其中的 Submission 的定义如下图3),笔者遇到了一个奇怪的问题:在 Lotus Form. Designer 中用自带的 Viewer 可以调到 Web Service,但是切换到 Lotus Form. Server 的时候 Web Service 却没有不能成功。由于项目要求在客户提交了表单后,要更新整个 Portlet 页面,提示用户表单的提交状态(成功或者失败),笔者将 Submission 的 replace 属性设置为了 all, 从而实现这个需求。然而与 Lotus Forms Viewer 直接将 submit 的 data 传递给 URL(无论 replace 的值赋成何值)不同,Lotus Forms Server 会自动的忽略掉 replace = all 的所有 submission 的 URL 请求。当 replace 设成 all 时,提交的 URL 会自动的被转到您写的 Portlet,所以当你需要用 replace = all 这个属性,且您的应用场景是 Zero-Print Form(不用 Viewer)的话,您就必须在 Portlet 中写一段解析传过来的数据实例的代码或者利用 DOMActivate 来定义提交的事件。

    图 3. Submission 代码图

    在 Portlet 中取消一些不必要的功能按钮

    本节的内容是一个关于优化实现的问题。当将电子表单集成于 Portal 的环境里时,您可能不再需要电子表单可随时存取其自身 (Save, Open)的功能,因为对于特定的商业流程,有着固定的表单需要用户填写,工作人员可不想给用户太大的权限,然后收集到一堆不知所云的垃圾表单。这时候您就需要关闭 Form. 的一些功能按钮,如下面的清单 1 所示,您可以在 Form. 表单中的 Global Page 设置部分,像示例中一样设置 ufv_settings 属性关闭 Save 和 Open 按钮。这个方法同样也适用于关闭 Print 等按钮。更多关于 ufv_settings 的优化方式请参阅 XFDL 规范。

    清单 1. 屏蔽表单功能代码

    <globalpage sid="global">

    <global sid="global">

    <ufv_settings>

    <menu>

    <save>off</save>

    <open>off</open>

    </menu>

    <ufv_settings>

    </global>

    </globalpage>

    总结

    本文向您总结了集成 WebSphere Portal, Lotus Forms 以及 WebSphere Process Server 的一些经验及建议,希望能对读者有一定的启迪。
 

0
相关文章