级别: 中级 William Flynn (wdflynn@us.ibm.com), 咨询师,Host Access Transformation Services, IBM India Software Lab Services and Solutions Sherri Midyette (smidyett@us.ibm.com), 高级软件工程师,Host Access Transformation Services, IBM India Software Lab Services and Solutions
2007 年 5 月 24 日 IBM® WebSphere® Host Access Transformation Services (HATS) 提供了一个工具包和一个运行时,它们可以使用 IBM Software Development Platform,对 3270 和 5250 两种 Web 主机应用程序的外观进行修改。在某些使用 HATS 的自定义和转换功能的领域中,用户往往会需要帮助,本文将为此提供实践指导、最佳实践和提示。这些指导将帮助您简化和加速 HATS V6 和 V7 Web 项目,适用于刚入门和中等水平的 HATS 开发人员。
摘自 IBM WebSphere 开发者技术期刊。
引言
IBM WebSphere Host Access Transformation Services (HATS) 能帮助您为基于字符的 3270 和 5250 主机应用程序创建一个简便易用的图形用户界面 (GUI)。HATS 工具包中所包含的功能,不但使您可以自定义主框架应用程序的用户界面,还可以改善它的导航功能。工具包的迭代开发环境,使您在利用 HAT 工具包及其功能开发和扩展自己的专业技能的同时,逐步自定义主机应用程序的各个元素。
本文将使用各种示例,阐述如何将主机应用程序转换为自定义 Web 应用程序,并且提供了一些提示,帮助您快速实现所需的屏幕转换。本文描述了:
- 您希望对主机应用程序的缺省转换过程做出的典型修改。
- 关于使用选定的 HATS 小部件的提示。
- 在指定可靠的屏幕识别定义时的注意事项。
- 关于使用 HATS Page Designer 功能的提示。
- 在使用多个呈现集以尽量减少对个别主机屏幕的自定义时,可供选择的各个选项。
由于本文的重点在于提供关于屏幕转换的提示,而不是一个循序渐进的指南,因此本文假定您已经掌握了某些关于 HATS 和屏幕转换的一般知识。更多信息,请参阅《HATS User's and Administrator's Guide》和《HATS Programmer's Guide》(包含在 HATS 软件中),亦可参阅下面的参考资料。
此外,本文还重点关注 HATS Web 项目的构建,而不是 HATS V7 中引入的 HAT 富客户端项目。本文中介绍的许多功能也将应用于 HATS 富客户端项目,但与构建富客户端时相比,使用的向导和做出的选择可能会有所不同。
对 HATS 的缺省转换进行优化
如果您是 HATS 的新手,最好是使用缺省呈现以开始您的 HATS Web 项目,缺省呈现是一项十分方便的功能,它将主机组件映射到 Web 小部件(预先编码的通用 Web 应用程序元素)。缺省呈现为主机应用程序提供了一种合理的 Web 表示方法,它把功能键和选择列表映射到 Web 链接,并不加修改地将主机字段显示出来。得到的结果是一个 Web 应用程序,它看起来与原始的主机终端屏幕颇为相似。这是一个好的开始,不过您很快就会希望能探索 HATS 转换功能,所以,您可以根据用户的角色定制应用程序屏幕,使应用程序的美学效果看起来更像是一个 Web 应用程序,您还可以简化主机应用程序的导航功能,为用户提供更高的效率。
不过,首要的事情是,讨论一下在缺省情况下 HATS 为了进行转换而使用的呈现集。
HATS 本身带有一个缺省的呈现集,后者可以应用于 HATS 应用程序中任意一个“未经识别”的屏幕。缺省呈现的重要性在于,它能为多个主机屏幕提供一个一致的外观,而无需您以手动的方式自定义每个屏幕。您可以针对特定的主机应用程序,对缺省的呈现集进行配置和自定义。
使用缺省呈现集呈现的屏幕外观受到的影响不仅仅来自该呈现集本身。这些设置(其中包括缺省呈现集)被统称为缺省转换,它们会影响应用程序中的所有屏幕,并包含下列元素:
- 模板
- 样式表
- 全局规则
- 文本替换
- 主机小键盘
- 应用程序小键盘
您有必要了解修改这些功能的配置的方法和时机,以便调整缺省转换的外观。下一个部分将讨论如何更改缺省呈现集、模板和样式表的配置。其中的主题包括:
呈现集
在 HATS 中,缺省呈现集可以在“Project Settings”部分的 Rendering 选项卡中进行配置(图 1)。
图 1. 项目设置中的 Rendering 选项卡
 | | 各个 ENPTUI 项和子文件都是 5250 主机组件,如果您指定了 5250 主机类型,或是在创建项目时选择了 Add ENPTUI 支持,则 ENPTUI 项和子文件会显示在呈现集中。 |
|
在下列情况中,您需要对缺省呈现集进行优化:
- HATS 没有识别主机屏幕上的特定主机组件,或
- HATS 没有使用您希望使用的小部件呈现主机组件,或
- 您对利用 Field 小部件进行的选择列表和功能键转换感到满意,因此不需要对它们进行特殊的呈现。
在编辑缺省呈现时,取消选中列表中任何您不想使用的项,而不是移除它们。最终的结果相同,但如果需求发生改变,您还可以重新选择这些项。
接下来是一些用来演示缺省呈现集的自定义过程的例子。
修改缺省的呈现集
如果您的缺省呈现集中的某个主机组件(如选择列表、功能键或子文件)未被识别,请先检查主机组件的设置,以确保这些设置被配置为对主机应用程序使用的所有组件变体进行识别。例如,假设在您遇到的问题中,缺省呈现集没有识别出任何一个选择列表,故而没有将这些选择列表作为链接呈现出来。您的主机屏幕选择列表看起来与下面的内容类似:
202. Option description for 202
203. Option description for 203
*
*
213. Option description for 213
Option ...... ______ |
在这个主机屏幕上,用户为“Option”输入一个值,如 202,然后按 Enter。对于用户来说,在 Web 页面上呈现这些项目是一个简单快捷的方案,用户只需点击所需的选项即可,无需手动输入一个值。缺省呈现集中为选择列表提供的设置如图 2 所示。
图 2. 选择列表的设置
注意,令牌 (202) 后定义的分隔符,可以是一个句点接一个空格,也可以是一个破折号接一个空格。在主机屏幕中,分隔符是一个空格,后接一个句点,然后是两个空格。为了确保能识别出选择列表,您必须将一个分隔符(这个分隔符依次由一个空格,一个句点和两个空格组成):" . " 添加到分隔符字段。您还可以移除已经提供的两个分隔符,但您最好是只添加一个新的分隔符即可。
在您改变了分隔符定义(图 3)后,将对主机屏幕上的选择列表进行检测,将选择列表上的项目作为链接呈现出来。您可以在呈现项目中对此进行更改,但更好的做法是回到项目选择列表组件中进行更改;通过这一方法,您可以对缺省项进行配置,使之更适合您要转换的主机应用程序组件。
图 3. 选择列表的设置
在缺省呈现集(或其他转换)已被更改的情况下,您将需要生成某个代表主机屏幕的屏幕截图。屏幕截图可为您进行脱机转换提供方便。
如果要生成屏幕截图,请考虑使用以下方法:
-
如果您是一位具有丰富经验的主机应用程序最终用户,请使用 HATS 终端在应用程序中进行导航。
-
使用 HATS 终端中的 Host Screen Preview 选项卡,以判定屏幕是否经过了适当的转换。
-
如果您希望确保在某个屏幕上出现的主机组机被适当地呈现,那么每当这类屏幕出现时,您都应当对该屏幕进行截图。
-
利用您收集的屏幕截图,您可以脱机操作缺省呈现集,直到您准备再次通过与主机的连接进行测试为止。
-
当您显示某张屏幕截图时,可以使用 Preview 选项卡查看缺省呈现集是如何解读主机屏幕的。
修改模板和样式表
除了缺省呈现集中的设置之外,未识别屏幕的呈现效果还受到应用于该缺省呈现的模板和样式表的影响。模板是一个供 Web 页使用的 HTML 包装对象,它指定的样式表会定义所呈现页面的色彩、字体和整体外观。管理模板和样式表使您能对应用程序的外表进行微调,使之符合您的组织对 Web 应用程序的标准。
HATS 提供了多种示例模板和样式表,您可以修改它们,使之适合您的用途。当您修改一个由 HATS 提供的样式表或模板时,请复制该文件,创建一个专门供您使用的新文件。这样,原始的 HATS 样式表和模板将被保留下来,供日后使用或参考。
在这些示例中有一个空白模板,您可以向它添加自己的图片或链接。该模板是一个 JavaServer™ 页面 (JSP),可以像其他 JSP 一样进行修改。在任何一个 HATS 模板的源代码视图中,您都会看到下列代码,它表示 HATS 转换和应用程序小键盘在模板中的位置:
<HATS:Transform skipBody="true">
<P> Host screen transformation will be shown here </P>
</HATS:Transform>
<HATS:ApplicationKeypad settings="layout:horizontal"/> |
现在我们来看看样式表。要找到您的项目中的样式表,请导航到 HATS Projects 视图,然后选择 Web Content => Common => Stylesheets。一个模板中可能会使用一个或多个样式表。在 Page Designer 中查看模板的 Source 视图,您会看到靠近顶部的代码定义了模板使用的样式表:
<LINK rel="stylesheet"
href="../common/stylesheets/monochrometheme.css"
type="text/css">
<LINK rel="stylesheet"
href="../common/stylesheets/reverseVideoMono.css"
type="text/css"> |
如果您想了解 HATS 是如何使用样式表的,请显示您选择的小部件定义的设置。要找到它们,请在 Project Settings 视图中选择 Rendering 选项卡,再选 Widgets 文件夹,然后选择任意一个小部件。图 4 显示了 Drop-down 小部件的定义。
图 4. drop-down 的设置
注意,样式类被多次引用。打开样式表时您会看到它们的真实定义。由于您开发的是一个 Web 应用程序,您可以使用所有标准样式表技术。如果您在服务器上运行 HATS 项目,您可以从浏览器中查看项目源代码,以判断 Web 页的不同部分使用的样式表类。
图 5 显示的是 Monochrome 主题样式表 (monochrometheme.css) 的一部分,Drop-down 小部件的定义使用了这个样式表。
图 5. Monochrome 主题样式表
您可以在 Drop-down 小部件中修改色彩、字体大小和各种其他参数,以控制缺省转换的外观。
使用样式表管理对齐方式
我们看一个例子,以了解如何使用样式表管理文本对齐方式。假设您有一个 HATS 应用程序,它可以将选择列表作为链接呈现出来,但是公司对于网站的新策略要求您必须使用按钮而不是链接。现在呈现的外观如图 6 所示。
图 6. HATS 的缺省呈现
为了让您的选择列表项目以按钮的形式呈现出来,您必须修改缺省呈现集,规定各个选择列表项目应呈现为按钮而不是链接(图 7)。
图 7. 编辑一个缺省呈现项目
结果,新的主机屏幕呈现如图 8 所示。
图 8. 呈现为按钮
该结果几乎完全满足了您的要求。选择列表项目现在的确是以按钮的形式呈现的,但是每个按钮上的标题文本都是居中显示的,这使它们看起来似乎没有对齐。浏览器也往往会向标题中添加空格,使按钮的长度变化不定。
为了改变文本的对齐方式,您必须调整那些用来控制页面上的按钮的样式表参数。为了确定您需要改变哪些参数,请在图 9 中所示的缺省呈现中查看按钮的定义。
图 9. 按钮设置
在这里,HATS 使用的按钮样式类是 HATSBUTTON。在编辑按钮样式时,有几个选项供您选择。在本例中,样式列表通过缺省转换呈现为按钮,如果您想更改按钮的样式,请单击“Style”输入字段(在 HATS V6.0.4 和更高的版本中可用)旁边的 S 按钮。或者,您还可以在项目一级更改按钮设置(如果您想改变项目中所有按钮的缺省设置的话),此外,您也可以更改页面中某个特定按钮的设置。如果您想更改所有使用某个特定样式表的按钮的样式,您必须在样式表中找到这个定义,然后做出调整。对于本文而言,您将对样式表进行编辑。
在 monochrometheme.css 样式表中的定义如下:
括号之间是空白的,说明目前没有针对按钮样式做出特殊设置。为了使文本向左对齐,可对 monochromeTheme.css 做出如下更改:
INPUT.HATSBUTTON {
text-align: left;
} |
屏幕现在呈现的结果如图 10 所示。
图10. 加入按钮对齐效果的 HATS 缺省呈现
您可能会觉得对齐的字符太靠左了,这使按钮看起来有点不平衡。如果是这样,您可以再次做出更改,在 monochrometheme.css 中加入填充效果:
INPUT.HATSBUTTON {
text-align: left;
padding-left: 4;
} |
主机屏幕的呈现结果如图 11 所示。如果您对按钮的外观感到满意,就无需再进行更改,因为您的 HATS 应用程序已经符合新的公司策略的要求了。否则,您可以按照需要继续自定义按钮样式。
图 11. 加入按钮文本填充效果的 HATS 缺省呈现
这个样式表修改的示例是非常简单的,但是它应该能使您对如何做出此类修改有一个大致的了解。有许多不同的 HATS 小部件和设置都可以用在样式表中,您可以在缺省呈现集或任何的转换中管理它们的外观。您只需编辑样式表,并将任何标准样式设置放入其中。试验各种样式表和模板往往是学习的最佳途径,也是实现某种您需要的外观的最好方法。
使用 Field 小部件
Field 小部件可以确定 HATS 将如何呈现标准字段组件。请不要在您的缺省呈现集中移除字段组件呈现;相反,您要把它当作缺省呈现集中的保留项目,因为它作为一个小部件,可以将未被先期映射呈现的主机组件呈现出来。检查缺省呈现集中的 Filed 小部件并做出更改,使之适合您的主机屏幕。
例如,可能需要做出如下更改:
-
如果带有许多输入字段的屏幕没有合理排列,请将 Field 小部件的对齐方式改为下列的值中的一个。当 HATS 创建某个主机屏幕的 HTML 表示时,它会创建一个 HTML 表格,并将每个项目插入表的各个单元格中:
- 在 normal 对齐方式下,HATS 会在页面中为每个主机字段创建一个单元格。
- 在 word by word 对齐方式下,HATS 会为文本中的每个单词创建一个单元格。
- 在 character by character 对齐方式下,HATS 会为文本中的每个字符创建一个单元格。
-
如果您想在 Web 页面中显示任何扩展属性(如 reverse video),请在 Field 小部件和 Subfile 小部件中启用扩展属性。
依赖于主机屏幕光标位置的功能
您的主机屏幕可能会具有上下文相关的帮助功能;例如,在主机应用程序中,当您将光标移到屏幕的某个字段上时,按一下 F1 键,可以获得该字段的定义。为了使 HATS 支持此功能,您可以将 Field 小部件的定义修改为 Allow positioning on protected text,如图 12 所示。
图 12. Field 设置
HATS V6.0.2 还有一种方法可以让您把光标放在受保护的文本上。该功能是一个与 HTML anchor 标记功能类似的替代方法(允许定位在受保护的文本上),它很重要,因为它能使光标定位于受保护的文本之上,而无需使用链接;如果您用 tab 键在 Web 页面上的各个输入字段间切换,光标不但会停留在输入字段中,而且还能停留在每个受保护的文本项目上。这一功能保留了实际输入字段的自然顺序,如果用户经常使用 tab 键在各个输入字段中导航,这个功能将成为首选项。(详细信息请参阅 HATS V6.0.2(或更高版本)的发布说明 。
使用样式表动态更改屏幕的大小
某些主机应用程序经过编码,可以动态更改屏幕的大小;这种屏幕的大小可以由 24x80 (字符)变为 27x132(或反之)。如果使用的是模拟器,当发生这一变化时,屏幕上的字体大小会自动改变,以使整个屏幕与模拟器窗口相适应。但是如果使用 HATS 缺省呈现集呈现屏幕,当发生这一变化时,字体大小会保持不变。
如果您选择让 Web 页面的行为类似于模拟器,并且让它在使用 HATS 缺省呈现集时自动改变,那么您必须为新的屏幕大小创建一个样式表,然后在您检测到屏幕大小发生变化时使用这个样表。在编辑模式下启动一个现有的样式表作为模板,对它进行更改,然后用新的样式表名称将它保存起来。
我们来看一个更改字体大小的示例。以下是原始的 whitetheme.css 样式表的开始部分,您可以看到,其中的字体大小被设置为 10pt:
BODY {
background-color: white;
color: black;
font-family: sans-serif, arial, tahoma, helvetica;
/* For accessibility compliance: remove the following line */
font-size: 10pt;
}
TD, P, INPUT, A, TH, SELECT {
font-family: sans-serif, arial, tahoma, helvetica;
/* For accessibility compliance: remove the following line */
font-size: 10pt;
} |
以下是 whitetheme_27X132.css 样式表的开始部分,它只是简单地把字体大小从 10pt 更改为 9pt。根据您使用的模拟器和屏幕的分辨率,您可能需要试验不同的字体大小,找出最适合的一种。
BODY {
background-color: white;
color: black;
font-family: sans-serif, arial, tahoma, helvetica;
font-size: 9pt;
}
TD, P, INPUT {
font-family: sans-serif, arial, tahoma, helvetica;
font-size: 9pt;
} |
根据屏幕大小选择一个样式表,这种方法如何呢?在模板中,会像下面这样指定样式表:
<LINK rel="stylesheet"
href="../common/stylesheets/whitetheme.css"
type="text/css"> |
如果要根据当前的屏幕大小指定要使用的样式表,您可以将下列代码添加到模板:
<%
// begin
TransformInfo tInfo =
((TransformInfo)request.getAttribute(CommonConstants.REQ_TRANSFORMINFO));
// Obtain the number of columns in the host screen.
HostScreen hScreen = tInfo.getHostScreen();
int length =0;
If (hScreen != NULL)
length = hScreen.getSizeCols();
// Link to the proper style sheet based on the number of columns
if (length<132)
{
%>
<LINK rel="stylesheet" href="../common/stylesheets/whitetheme.css"
type="text/css">
<%}
else
{
%>
<LINK rel="stylesheet" href="../common/stylesheets/whitetheme_27x132.css" type="text/css">
<%}
// end
%> |
现在,模板会判断原始主机屏幕的列数。如果少于 132 列,会使用 whitetheme.css;如果是 132 列,则会使用 whitetheme_27x132.css。您现在有能力根据屏幕大小改变样式表设置了。通过应用这个简单的概念,您可以根据其他类似的条件,使用多个样式表。
使用多个呈现集
除了 HATS 本身提供的缺省呈现集之外,您还可以创建其他呈现集,在整个 HATS 应用程序中使用它们。如果您有一些屏幕需要进行某种普通转换,而另外几个屏幕组需要进行另一种转换,那么,使用多个呈现集的做法会具有优势。您不必为组中的每一个屏幕创建屏幕识别条件,并对它们一一应用呈现集(虽然您可以这样做)。相反,最好能找到某个方法,使某个特定的呈现集能应用于多个屏幕,而不必为每个单独的屏幕定义唯一的屏幕识别特性。
在我们讨论实现这一目标的两种方法之前,先来回顾一下如何创建呈现集:
-
在 HATS Projects 视图中,选择 Project Settings,然后单击 Rendering 选项卡。
-
要添加一个新的呈现集,请选择屏幕顶部附近的 Add 按钮,以显示 Add Rendering Set 窗口。
-
命名您的呈现集,并指定 Copy new rendering set from existing set,利用主呈现集中列出的项目生成新的呈现集。图 13 显示的是已经创建完毕的新呈现集 CICS-renderingset。
图 13. 多个呈现集
利用通用识别条件将某个呈现集应用于一组屏幕
在本示例中,一个新的呈现集将被应用于符合通用屏幕识别条件的多个屏幕。除了应用呈现集之外,您还可以向这些页面添加一个新按钮。
我们假设您的主机应用程序中拥有几个屏幕,并且这些屏幕的标题的开头一个单词都是“File”。该标题显示在每个屏幕的同一个位置,如图 14 和 15 所示。
图 14. 主终端 -- File add
图 15. 主终端 -- File update
您需要将新的呈现集 CICS-renderingset 应用到所有的“File”屏幕。作为一项额外要求,您还可以自定义呈现集,禁用前景色,以使屏幕的外观不致于太过花哨。
-
编辑 CICS-renderingset 中用来转换字段文本的呈现项目。
-
在 Field 小部件的设置中,取消选中 Use project defaults 和 Enable foreground colors。您现在拥有了一个独特的呈现集,它没有前景色,可以应用于多个屏幕。
现在,假设您希望:
- 将您的呈现集应用到各个“File”屏幕—但是只希望应用于第 12 行以上的部分。
- 将所有“File”屏幕上的第 13 行指令文本,如“CHANGE FIELDS AND PRESS ENTER”替换为一个“Submit”按钮。
- 将 CICS-renderingset 应用到应用程序中的其他屏幕,这些屏幕无需将第 13 行文本替换为一个“Submit”按钮。
为了实现这一目的,您需要创建一个屏幕自定义和转换,将其应用于各个“File”屏幕:
-
创建一个被称为 CICSFiles 的屏幕自定义,然后在选定的长方形区域中输入单词 FILE,以便为屏幕指定识别条件,如图 16 所示,然后再按 Next。
图 16. 创建一个屏幕自定义 -- CICSFiles
-
在“Create a Screen Customization”向导的“Select Actions”页面,对这个转换进行命名:CICSFiles。将“Rendering Options”指定为 /Blank,然后选择 Finish。您现在应该可以在 Page Designer 的 Design 选项卡中看到这个空白页面了。
-
在工具栏中,依次选择 HATS Tools => Insert Default Rendering。这使您能够在为此项目定义的所有呈现集中进行选择。图 17 介绍了您该如何选择所需的呈现集,并把它应用于屏幕的哪个部位。在本例中,您要选择的是 CICS-renderingset,并只把它应用到各个“File”屏幕的前 11 行。
图 17. 插入缺省呈现 (Insert Default Rendering)
-
在您单击了 Finish之后,用鼠标在页面上选择您要插入该呈现集的位置。Design 选项卡页面将显示您要通过应用 CICS-renderingset 进行转换的主机屏幕。
-
您现在准备将 Submit 按钮添加到这一转换中。由于您已经将呈现集应用到屏幕的前 11 行,现在您只需添加一个 Submit 按钮即可。在 Palette 中选择 Form Tags 文件夹(图 18)。选择您想在页面上放置按钮的位置,然后对其进行定义。现在,您已经完成了对您的转换的定义。
图 18. Design 视图 -- File add
-
要查看屏幕自定义的源代码,请选择 Source 选项卡,以验证您是否将正确的呈现集应用到了页面的前 11 行,以及是否已经按计划添加了 Submit 按钮(图 19)。
图 19. Source 视图
图 20 显示的是“File Update”屏幕,它已经应用了您的屏幕自定义和转换。您对 CICS-renderingset 做出的更改(禁用前景色,显示新的 Submit 按钮)也体现在这个屏幕中。
图 20. File update 屏幕
如果您愿意,可以使用相同的方法,将任意呈现集应用到任何一个屏幕。在这种情况下,您需要创建一个屏幕识别条件,用来识别主机应用程序中的某个屏幕。
将一个不同的呈现集应用到可从某个普通主机屏幕访问的所有应用程序
在下一个示例中,将有一个登录屏幕访问您的主机,在该屏幕中,您的用户可以指定一个 CICS 或 TSO 应用程序(图 21)。
图 21. 主机终端 – 登录
CICS 屏幕、TSO 屏幕分别形成两个组,在组内各个屏幕的布局都是类似的,不过这两个组的屏幕布局不同,因此需要向这两种应用程序应用不同的呈现集。
您将需要创建两个新的呈现集,分别用于 CICS 和 TSO 应用程序。这部分将介绍如何针对 CICS 屏幕设置该场景,之后,您只需针对 TSO 屏幕重复同样的过程即可。
您可以重用 CICS-renderingset,它来自先前的示例中的 CICS 屏幕。由于您希望只将这个呈现集应用于 CICS 屏幕,您需要确定:CICS 屏幕是由什么描述的?目前并没有适用于所有 CICS 屏幕的通用识别条件,但是您可以为每次启动 CICS 后经常遇到的第一个 CICS 屏幕创建识别条件,然后用一个全局变量帮助 HATS 了解应当在何时应用 CICS-renderingset。
假设您的屏幕流有一个主屏幕,并且您可以从主屏幕导航到 CICS 或 TSO 应用程序,如图 22 中的流所示。
图 22. 屏幕流
当用户从主屏幕导航到 CICS 应用程序时,将某个全局变量设置为 CICS。当用户继续在各个 CICS 屏幕之间导航时,这个全局变量始终被设置为 CICS。因此,每当这个全局变量被设置为 CICS 时,您都可以应用 CICS 屏幕专用的转换。
类似地,您还可以在用户从主屏幕导航到 TSO 应用程序时设置一个全局变量。只要这个用户还是在 TSO 屏幕之间导航,这个全局变量就始终被设置为 TSO。
-
对于主屏幕而言,应定义它的屏幕转换方法,并设置全局变量,以表明这个屏幕既非 CICS,也非 TSO 屏幕。
-
为在屏幕序列中遇到的第一个 CICS 屏幕创建转换。使用先前的示例中介绍的“插入缺省呈现 (Insert Default Rendering)”方法,指定将 CICS-renderingset 应用到这一转换中。用一个代表所有 CICS 屏幕的术语命名这个转换,如 CICSScreens。
-
接下来,为这个 CICS 屏幕创建一个自定义。对于这个自定义,请像往常那样指定识别条件。然后,在 Actions 选项卡上,设置一个全局变量,将它的值设为 CICS,然后应用您创建的 CICSScreens 转换,如图 23 所示。
图 23. Action 列表
-
您已经完成了第一个 CICS 屏幕的呈现,并拥有了一个全局变量,后者能告诉 HATS,用户已经进入了 CICS 应用程序。不过,在进入了 CICS 应用程序屏幕之后,您希望让 HATS 将 CICS-renderingset 应用于所有未识别的屏幕。要实现这一点,您将需要创建另一个屏幕自定义,它将应用于除了第一个屏幕之外的所有 CICS 屏幕。如果全局变量被设置为 CICS,请指定识别条件,使之与您的屏幕匹配(图 24),因为您知道在识别第一个 CICS 屏幕时就已经对全局变量进行了设置。
图 24. 全局变量条件 (Global variable criterion)
-
这个屏幕是用来自定义所有 CICS 屏幕的。按照您的操作,指定您要应用 CICSScreens 转换。这意味着您的 CICS 屏幕将使用 CICS-renderingset 显示。
-
您将需要按相同的步骤为各个 TSO 主机屏幕指定一个唯一的呈现集。
您是在主屏幕中指定登录信息并将 CICS 或 TSO 作为您的应用程序的,您可能不希望将 CICS 或 TSO 呈现集应用于主屏幕。做为替代,您将希望为主屏幕创建一个转换,或有可能使用缺省转换。
-
在您创建了屏幕转换之后,选择 Project Settings,然后选择 Event 选项卡(图 25)。将 MainScreen 自定义移动到 Screen Customization Priority 列表的顶部,以便在应用程序的用户退出初始的 CICS 或 TSO 屏幕时,主屏幕会被识别。
图 25. 屏幕自定义优先级 (Screen Customization Priority)
您现在已将两个新的呈现集应用于可从主屏幕访问的不同应用程序。您无需为应用程序中的每个面板专门创建一个屏幕自定义,甚至无需确定要应用到每组 CICS 屏幕的屏幕识别元素。相反,您使用 HATS 全局变量以确定主机应用程序的状态,并确定何时应用您的多个呈现集。
高级小部件
通过使用高级预编码元素或小部件,如 calendar、tabbed folder、graphics 和 checkbox 小部件,您可以提高用户的工作效率,并为经过转换的应用程序提供一个专业化的 GUI Web 外观。
Calendar 小部件
Calendar 小部件提供了一个图形日历,用户可以用它选择一个日期,而无需手动输入。当您使用 Calendar 小部件时,HATS 会调用一个 servlet 以呈现内容。如果您使用的是 Page Designer,Calendar 小部件将无法在 Preview 视图中正确地呈现。您将需要使用 Run on Server 选项,并通过设置,使项目使用外部 Web 浏览器。选择 Window => Preferences => Internet => Web Browser,添加您选择的浏览器。您最好使用一个外部 Web 浏览器来呈现您的项目,这样您就可以知道用户看到的屏幕呈现效果是什么样子。
图 26. Calendar 小部件
Checkbox 小部件
使用 Checkbox 小部件呈现一个带有可选项的输入字段。利用 Checkbox 小部件,您将获得一个输入字段组件,该组件有两个值,一个值(缺省值)已被选中,另一个则处于未选中状态(图 27)。
图 27. 复选框设置
您还可以显示一个可能的值的列表,其中没有缺省值,这是因为您没有用在主机屏幕中插入数据的方法定义复选框的初始值。
-
选择您的屏幕自定义,再选 Actions 选项卡,然后选择添加一个操作。
-
在主机屏幕上适当的输入字段位置,选择Insert data,然后按您的想法输入一个值,如2。
-
最后,移动“Insert data”操作,使它在 Apply a Transformation 操作之前运行。现在,当您运行应用程序时,您的主机屏幕会显示一个未被选中的选项,而且有一个数值(2)被映射到这个未选中的方框,如图 28 所示。
图 28. 复选框呈现
选项卡文件夹和图表
设计新的 Web 页,使它只包含必要的用户信息。由于显示本身的特性,很多主机屏幕都会包含不必要的数据,很难在一个页面中进行管理。如果可能,最好能找到一种方法,将忙碌的主机屏幕中的数据切分后分布到多个 Web 页面中。为此,一个常用方法是提供多个连续的新 Web 页面,每个页面包含一部分数据。处理这一问题的另一个直观的方法(如本例所示)是立即在多个可选的选项卡文件夹中显示主机屏幕数据。请看看图 29 中的那个杂乱的主机屏幕。
图 29. 杂乱的主机序幕
这看起来像是一个普通的绿屏应用程序屏幕,但通过仔细分析您会发现,这个屏幕显得有点过于忙碌和复杂了,更重要的是,这个屏幕中提供的用户需要的信息主要集中在左上栏。虽然用户偶尔会需要此处显示的的其他数据项目,但大量的此类数据只会让人分心。
使用一个 HATS tabbed folder,用户需要的主要信息可以按图 30 所示的那样,呈现在 Main System Status 选项卡上。
图 30. Main System Status 选项卡
第二个选项卡是 Complete System Status(图 31),它会将完整的数据呈现在一个单一页面上,因为偶尔会有人需要同时获得所有的数据。每个选项卡文件夹中呈现的屏幕数据不一定要彼此不同;当然,您可以根据需要,在各个选项卡间复制数据。
图 31. Complete System Status 选项卡
我们的下一个示例介绍了如何使用多个图表显示相同的内容。图 32 中以文本格式显示了大量系统状态数据,这可能是一个经验丰富的主机屏幕用户希望看到的。
图 32. System Status 选项卡
第二个选项卡是 Pool Data H (图 33),它用一个水平柱形图表为希望看到可视化效果的用户显示相同的数据。
图 33. Pool Data H 选项卡
第三个选项卡是 Pool Data V (图 34),它显示的也是相同的数据,这回是用垂直柱形图表呈现的,这说明您可以根据用户的偏好,使用不同的图表显示相同的数据。
图 34. Pool Data V 选项卡
为了在 HATS 转换中创建一个选项卡文件夹,请在菜单栏选择 HATS Tools,然后选择 Insert Tabbed Folder。当您创建选项卡文件夹时,HATS 会提供一个选项,让您设置选项卡高度、文件夹高度和文件夹宽度。这些值以像素为单位,是在主选项卡文件夹定义屏幕中设置的(图 35)。
图 35. 插入选项卡文件夹
在您将主机组件插入选项卡文件夹的每个选项卡,并将选项卡文件夹插入您的屏幕转换之后,您可能想调整某些值,您可以在源代码中实现这一操作。例如:
-
在 Page Designer 的 Source 视图中查找选项卡文件夹,更确切的说,是寻找下面这行代码:
var Tabhatsportletid1162407643234TabbedFolder =
new TabbedFolder('Tabhatsportletid1162407643234','0',
'12','30',Tabhatsportletid1162407643234Array,
Tabhatsportletid1162407643234CSSFamily,'400','400'); |
这一行中第一个“400”,是指文件夹的宽度(以像素为单位),第二个“400”是指文件夹的高度。您可以调整选项卡的宽度,使选项卡的标题更易于阅读。HATS 将根据标题长度自动设置每个选项卡的宽度。不过您可以在源代码中覆盖这一行为。
-
对于每个选项卡标题而言,这一行将显示在 Page Designer 的 Source 视图中:
数字“2”表示选项卡的顺序编号。通过以下代码,为选项卡样式添加一个宽度参数:
style="z-index:2;width:200;" |
定义可靠的屏幕识别条件
由于屏幕识别被用来创建屏幕自定义和宏,这使定义屏幕识别条件成为一个关键的步骤,它可以用来确保 HATS 能像您预期的那样呈现您的主机应用程序。
在为某个自定义定义屏幕识别时,您必须通盘考虑整个主机应用程序。HATS 将检查主机应用程序中的每个屏幕,以确定屏幕是否与您的自定义屏幕识别条件匹配。您必须确保您的屏幕识别条件能唯一地定义您希望应用自定义的一个或多个屏幕。
对于所有的屏幕识别而言,HATS 的策略是按照定义屏幕时的顺序选中“第一个适合”而不是“最适合”的屏幕。如果是屏幕自定义事件,将按指定的顺序选择“Screen Customization Priority”列表。如果是宏,将按定义屏幕时的顺序选中后续屏幕。
使屏幕识别条件具有灵活性
当定义屏幕识别条件时,应在不影响屏幕定义的唯一性的前提下,使您的识别尽可能灵活。注意,不要在屏幕识别条件中使用变量;虽然这是个常见的明显错误,但它往往很难追踪,因为这会使某个一向可以被识别的屏幕,在某种情况下(如数据发生改变时)突然之间变得不可识别了。图 36 显示了一个示例。
图 36. 主机终端 -- Main menu 2
要识别这个屏幕,您可能只要检查屏幕上的“i5/OS Main Menu”文本即可,不过,前提是您有把握确定主机应用程序中没有其他屏幕将这一文本作为标题。(您必须与主机程序员或经验丰富的最终用户确认此类前提,并将确认作为一项操作规范。)
如果该文本并非是这个主机屏幕所独有的,请尝试在屏幕的特定区域检查是否有“i5/OS Main Menu”文本。使用这一识别条件而不检查特定位置的文本,这能使您的屏幕识别条件变得更灵活,能够适应文本位置发生微小改变的情况。
图 37. 创建一个屏幕自定义
按照传统主机应用程序的性质,将屏幕标签左移或右移几个字符,并不会被看作是重大的变化。最终用户可能不会注意到这一点,但是如果您创建的识别条件没有灵活到将这一变化考虑在内的程度,那么您的屏幕识别可能会停止工作。
如果您需要具体识别某一屏幕,各种屏幕识别选项都是可以使用的,如字段的总数、输入字段的总数,以及光标的位置等等。不建议将这些选项用于一般的识别,因为这些指标很容易发生改变。
保证屏幕识别条件的唯一性
我们来看两个类似的屏幕。
图 38 中所示的屏幕是在正常情况下显示的,当时没有出现主机错误。不过,您需要运行一组不同的操作,以确定是否是在无错误的条件下显示的,或屏幕上是否有提示某个错误的文本。因此,您的屏幕识别条件可能会寻找“i5/OS Main Menu”,以确定主屏幕是否已经被呈现,然后在屏幕底部寻找“COPYRIGHT IBM CORP”,以便验证您是否处于一个无错误的条件下。我们可以称这个自定义为“主菜单良好”。
图 38. 主菜单良好
图 39 显示了出错条件下的相同主机屏幕:在屏幕的底部显示“Not authorized to change user profile”。这被称为“主菜单错误”
图 39. 主菜单错误
由于您的屏幕识别条件不关心具体的错误信息,它可能只是简单地检查顶部的“i5/OS Main Menu”。但是这个识别条件无法唯一地定义这个屏幕,因为“主菜单良好”的屏幕也符合这个识别条件。为了使识别条件发挥作用,请务必确保 HATS 对两个自定义都进行检查,不过需要使用特殊的检查顺序。如果 HATS 使用下列顺序:
- 主菜单出错
- 主菜单良好
“主菜单良好”的自定义将不会被识别出来,因为只检查了“主菜单出错”的自定义的顶部屏幕标题“i5/OS Main Menu”,而两种屏幕都符合这一条件。不过,如果使用正确的顺序:
- 主菜单良好
- 主菜单出错
则可对两种屏幕进行筛选,以便首先标识出“好”屏幕,然后将“坏”屏幕标识为一个子集。
在 HATS 中,您可以选择 Project Settings,然后选择 Events 选项卡,以设置这一顺序。“Screen Customization Priority”列表如图 40 所示。
图 40. 屏幕自定义优先级 (Screen customization priority)
在列表中,将各个屏幕自定义向上或向下移动,以便按需要为类似的各个屏幕排定标识顺序。
优化屏幕识别的性能
当您运行 HATS 应用程序时,HATS 会按您指定的顺序检查每个新的主机屏幕,以确定该屏幕是否与您的任何一种自定义相匹配。如果您的项目中有大量的自定义,HATS 应用程序的性能可能会受到影响。出于效率方面的考虑,请将最常用的屏幕自定义放在自定义顺序列表的顶部,因为屏幕匹配过程在找到一个匹配项后就会停止。在列表中,您应当把最具体的屏幕识别条件放在较高的位置。
为了对搜索做进一步优化,您可以定义某个屏幕自定义中可能的后续屏幕,这样 HATS 在识别出任何一个与自定义中的条件匹配的屏幕后,会首先检查上述屏幕(选择 Next Screens 选项卡,如图 41 所示)。
图 41. 后续屏幕 (Next screens)
在使用完整的自定义(在 HATS 项目中定义)顺序表之前,HATS 先使用这个屏幕顺序表来检查匹配项。您还可以定义一个特定操作,当某个可能的后续屏幕未能出现时采取这个操作。
使用宏定义的屏幕识别
用宏定义的屏幕识别也应遵循本文中讨论的一般指导原则,不过除此之外还要考虑后续屏幕的顺序。
宏是一些用来在已记录的屏幕序列中导航的指令,是通过处理开发人员的已录制键盘输入实现的。宏标识了一个开始屏幕,在该屏幕上运行操作,然后再等待某几个可能的后续屏幕中的一个。一旦接收到一个后续屏幕,操作就会在这个屏幕上运行,而宏则接着寻找其他后续屏幕。这一过程将持续到宏结束为止。
在宏等待后续屏幕的每个点,HATS 都会再次使用“选第一个适合的,而不是选最适合的”的策略。如果宏在某个点有多个可能的后续屏幕(也就是说,您是用多个路径录制您的宏的),那么那些后续屏幕的顺序可能对屏幕识别的考虑因素有重要意义。对于宏而言,其工作原理与屏幕自定义很类似。
请看图 42 中的 AccountBalance 宏。Operator Instructions 屏幕的后续屏幕是“FileInquiry”和“OperatorInstructionsError”。根据宏的记录,HATS 将首先检查它是否将后续屏幕识别为 FileInquiry,然后才能检查是否是 OperatorInstructionsError。
图 42. 主机终端 -- sign on
假设两个后续屏幕是类似的,FileInquiry 屏幕可以把它们都识别出来,不过OperatorInstructionsError 屏幕有一个只有 OperatorInstructionsError 能够匹配的特定识别条件。
要更改后续屏幕的搜索顺序,请右键单击 Next Screens,查看屏幕 Operator Instructions。显示的对话框(图 43)使您可以添加、移除后续屏幕,以及修改屏幕的顺序。您还可以在高级宏编辑器中更改后续屏幕的顺序。
图 43. 编辑后续屏幕
在 Page Designer 中使用 HATS 组件
Page Designer 是 IBM Rational® Software Development Platform 的一部分,它使您可以创建和设计 Web 页面,它提供了一个 Design 视图,您可以选择 Web 组件(图片、链接、按钮等等),将它们拖放到画布中;如果您需要修改代码,可以使用 Source 视图;而 Preview 视图则用来显示您的 Web 页面的呈现效果。HATS 工具包被集成到 Page Designer 中,您可以在 Design 视图中,像使用任何其他 Web 组件那样使用 HAT 组件。
要添加一个 HATS 组件,您可以拖放 HATS 面板中的某个组件或使用 HATS Tools,要启动后者,您可以使用菜单,或在 Design 视图中单击右键,然后选择 Add a HATS component。此处有一些关于在 Page Designer 中使用 HATS 组件的一些提示。
预填充不会包含空白字段
当创建一个 HATS 屏幕转换时,您可以选择呈现选项 Blank 或 Prepopulated。“Prepopulated”选项会把由项目的缺省呈现生成的一些组件放进 Web 页面。您可以对某个您希望在开始时使用缺省呈现的屏幕使用这一选项,然后修改组件和小部件,以实现您所要的转换。如果您的主机屏幕有一个不含任何值的字段(如没有包含状态信息的状态行),将不会将该字段用于预填充,供显示之用。
在图 44 中,主机应用程序的状态行与版权信息共享屏幕的最下一行。
图 44. Design 视图 -- Sign on
如果您使用了这一转换,当您在主机应用程序上执行某个会导致状态文本出现在主机上的操作时,该 Web 页面不会显示该状态,因为您没有定义一个足够大的区域来作为包含该状态的字段组件。在图 45 显示的主机屏幕中,状态显示在最下一行,且该行不含版权文本。
图 45. 显示状态信息的主机屏幕
要修正您的 Web 页面,请使用 Design 视图拉伸字段组件,使之能覆盖状态显示时可能占用的完整区域。在本例中,您可以拉伸含有版权信息的字段组件,使之延伸到 Web 页面的左边边界,如图 46 所示。这使文本可以占用整行空间进行显示了。
图 46. 在 Sign on 的 Design 视图中显示版权文本
此外,该字段还必须设置为对文本出现时所在的整个行进行检索。编辑字段组件,以使选定的部分能从第 1 列一直扩展到第 80 列。现在,无论是您的状态行还是版权信息都能像主机应用程序开发人员计划的那样显示了。
通常,当您预填充您的 Web 页面时,请使用一份屏幕截图,其中包含了进行呈现时所需的足够信息。这种方法将生成主机页上所有或大多数主机组件的呈现标记,只需要您做一点点工作(或者根本不用再费神),添加所有缺少的主机组件。例如,如果您使用的屏幕截图只显示了某个表格的一部分,之后应用程序在运行时会显示完整的表格,但您的表格只有生成了标记的那一部分(即屏幕截图中显示的那一部分)才会被呈现出来。
HATS V7 提供了一个新设置,它允许您在某个预填充转换创建时使之包括空字段。
将 HATS 组件放置在 Design 视图中
如果您使用 HATS Tools 菜单插入 HATS 组件,您不会自动看到您的组件被添加到 Design 视图。在您定了义了 HATS 组件之后,请选择 Finish,您的光标将变成十字形状,这说明您应当划出一个长方形的区域,HATS 组件将被插入到页面这个区域中。
如果您使用 Palette 视图中的 HATS Component 面板,您应当在您要添加的 HATS 组件上单击,然后单击 Design 视图中用于放置该 HATS 组件的单元格。在定义了 HATS 组件之后,您可以调整您选择的单元格的大小。
结束语
本文描述了几种最佳实践和提示,以帮助您更快、更有效地开发 HATS 应用程序。如果您致力于自定义缺省转换,您的整个应用程序会从一个更具内聚力的外观中获益,而且这也使您没有必要为那么多个别屏幕进行自定义。利用多个呈现集,您可以进一步减少需要自定义的屏幕数量,方法是将其他呈现组应用到各组屏幕。屏幕识别是使 HATS 按照预期显示和执行的一个关键的部分。使您的识别条件兼具唯一性和灵活性。使用 Page Designer 预填充您要自定义的任何屏幕,然后对屏幕的布局做出具体更改。最后,您要为特定主机应用程序指定主机组件和小部件设置。HATS 的即开即用型缺省转换适用于许多主机屏幕,但为了获得您喜爱的 Web 自定义,您有可能需要修改您的设置。
如果您遵循了这些指导原则,您就可以减少构建 HATS 项目时的必要工作,并使您的新 Web 应用程序具有您想要的外观。
参考资料
作者简介  | |  |
William (Bill) Flynn 是一位 HATS 咨询师,他在 IBM 工作了 25 年,最近的 4 年一直在从事主机集成 (Host Integration) 工作。Bill 拥有加利福尼亚州立大学奇科分校的计算机科学硕士学位。 |
 | |  |
Sherri Midyette 是一位高级软件工程师,12年来,她就职于北卡罗莱纳的 Research Triangle Park,从事 Host Integration 产品方面的工作。她是 Host Integration 产品其中两个版本的首席程序员,在 Host Integration 组件化活动中也担任了同一职务。Sherri 毕业于北卡罗莱纳州立大学,拥有计算机科学学士学位。 |
对本文的评价
|