Tivoli 服务台 6.0 开发工具包接口设计器指南
本节涉及下列主题:
在 TSD 脚本应用程序可以开始与主机进行交互前,必须将此应用程序初始化。EHLLAPI 使用句柄引用已建立起来的连接,并说明 EHLLAPI 类型的变量,具体如下所示:
conn:EMUCONNECTION;
下一步,此句柄必须与特定的终端会话关联。用下列 EHLLAPI 命令将句柄与会话关联:
EMUConnect(conn, 'A');
在此命令中,句柄 conn 与终端会话 A 关联。
因为所有 EHLLAPI 命令都要求指定连接,因此接口应用程序必须建立这些连接。
EHLLAPI 支持到终端会话的多个连接,因此接口应用程序可能与下列实例相似:
VARIABLES conn1:EMUCONNECTION; conn2:EMUCONNECTION; ACTIONS EMUConnect(conn1, 'A'); EMUConnect(conn2, 'B'); END;
TSD 脚本解释器将各种属性与这些连接关联。例如,在一个连接上看守时间限制可能设置为一秒钟,而在另一个连接上看守时间限制可能设置为 10 秒钟。发布看守命令时,TSD 脚本解释器从指定的连接句柄中获得正确的时间限制。
按键可指示主机执行一些操作。例如,编辑数据时,可能希望清除字段。可按名为 ERASE_EOF 的控制键(擦除至字段结尾)来清除字段。
即使主机所需的处理较复杂,提交此数据可能只需按 ENTER 键即可。
EHLLAPI 提供通过控制键向主机发送数据的命令。此命令接受代表控制键的整数代码。TSD 脚本还有内置的常数,可用作这些整数的助记符。代表按 ENTER 的代码如下所示:
EMUPressKey(conn, $EMUEnter);
每次应用程序向主机提交要处理的数据时,都需要经历一段时间,以等待来自主机的响应。因此接口必须可暂停并等待一段时间。这段时间称为看守时间。
有几个 TSD 脚本命令赋予应用程序执行看守进程的能力。发出这些命令之一时,应用程序将暂停,直到满足特定的条件或超出了看守时间限制。看守命令的返回代码指示执行了哪些操作。
应用程序必须等待满足的条件取决于具体情况。一般地,应用程序等待输入禁止器消失。其他看守可能包括:
例如,如果希望应用程序等待输入禁止器消失,则发出下列命令:
EMUWaitForNoX(conn);
当使用 EMUWaitForNoX 命令时,要特别注意大型机应用程序使用 X 指示器的情况。一些应用程序允许 X“弹回”,即允许 X 暂时消失,几秒钟后再出现。
EMUWaitForNoX 命令有一个可选参数,称为稳定时间。稳定时间指定在 TSD 脚本解释器认为看守成功完成之前,X 必须经历的时间。未指定稳定时间时,使用缺省值 500 毫秒。
本文提及的上一个命令(指定可选稳定时间为 1 秒)与下列实例相似:
EMUWaitForNoX(conn, 1000);
指定看守命令的关键是设置看守命令,以给予用户尽可能多的信息。例如,假定您使用大型机应用程序,该应用程序请求您输入名称和地址,并希望您按 ENTER 键来处理此数据。
此例的看守命令可以是:
rc := EMUWaitForStringAt(conn, 'ADD OPERATION SUCCESSFUL',11,11);
按 ENTER 后,X 在 OIA 中出现一段时间,然后在位置 11 处出现一条消息,11 表示输入操作成功,例如:
MSG000695 ADD OPERATION SUCCESSFUL
以前的返回代码表示此操作已完成,且已成功插入。如果返回代码指示看守失败,则必须检查此返回代码,以查看大型机是否仍在处理或插入是否失败。请注意此附加代码只在出错时执行。
如果使用:
rc :=EMUWaitForNoX(conn);
则只知道主机完成了处理。仍要检查此代码,看是否出现成功消息,且对此命令的每个实例都要执行此项检查。
即使两个代码段都需要进行同样的检查,第一个方法也简化了成功的处理。
除非出错,否则不进行其他检查。因此,成功的操作(您经常所希望的)比失败的操作运行快。
EHLLAPI 提供了许多工具来输入和编辑数据。其中包括执行下列操作的命令:
对于用户在当前主机光标位置输入一个字符串的情况,下列实例中显示了一个样本命令:
EMUTypeIn(conn, 'HELLO WORLD');
请注意当主机光标位于非击键区时,不能执行 TypeIn 命令。
如果某个命令序列经常使用,可编写特定的 TSD 脚本命令来替换此命令序列。在输入您提供的字符串之前,此命令按 ERASE_EOF。此命令与下例相似:
EMUClrTypeIn(conn, 'HELLO WORLD');
大多数应用程序使您能在屏幕上的字段之间切换,或使用箭头键。除非不使用每个字段,否则,一般情况下,在字段之间切换更快。在那种特殊情况下,可考虑使用移动光标命令,直接转至所需的字段。
应仔细检查每个字段的最大长度。当光标处于主机屏幕上的无效位置时,如果 EHLLAPI 接口尝试输入,则主机将锁定键盘直到按 RESET。为避免出现此问题,一定要确保输入数据的长度比接收字段的长度短,或在 EMUTypeIn 或 EMUClrTypeIn 命令中指定了截断长度。
因为大多数大型机应用程序是数据条目应用程序,因此许多 EHLLAPI 脚本由一些重复的简单操作组成:
这些操作序列经常使用,因此编写了一些高级函数来执行这些重复操作。这些函数称为映射。映射或映射函数可将主机位置与 TSD 脚本记录字段关联。
应用程序可调用一个 TSD 脚本命令 EMUMapUpload 来填写所有字段。TSD 脚本解释器处理映射文件条目的速度比处理更为简单的 EHLLAPI 命令序列的速度快得多。因此系统特别引入了映射文件的概念。根据抓重点的规则,如果屏幕上有五个或六个以上的字段时,应考虑使用映射文件。有关详细信息,请参见“映射文件和映射公用程序”。
使用读取命令比使用发送命令简单。首先,主机光标位置在读取操作中不起作用。其次,应用程序可从主机屏幕上的任意位置读取数据。
最简单的读取命令与下列实例相似:
EMUFillBuffer(conn, inString, row, column, length);
此命令读取行和列开头处的长度字符,并将结果值放入变量 inString。
如果要从屏幕读取数据字段,则需要知道每个要读取的字段的最大长度。如果要查看字段的总长度,主机应用程序必须清除所有数据字段,以准备输入新数据。一般情况下,用下划线字符填充空字段,这样可查看每个字段的最大长度。
与发送命令一样,也有下载屏幕数据的映射命令。
EMUMapDownload 使您能从主机屏幕读取许多字段,并将字段值放入 TSD 脚本记录变量的字段中。
可能存在这样的情况:您希望捕捉整个主机屏幕(或其中的某些距形区域)并将它保存在文本文件中。其中,大多数情景是您的应用程序遇到了不能识别的屏幕。
为了记录尽可能多的类似事件,此应用程序将当前屏幕捕捉到文本文件,然后发出有关此问题的警报。负责审查此问题的人员使用此文件将事件连为一个整体,并弄清楚应用程序是如何得到此屏幕的。TSD 脚本提供 EMUOutFile 命令将屏幕变为文件。
一般情况下,您已经了解自己希望接口执行什么操作。本节在您开始编写接口之前,帮助您加深对接口规范的理解。
设计接口的第一步是确保熟悉为其编写接口的应用程序。
应反复使用目标应用程序,直到确切知道如何执行下列操作:
此外,应了解此应用程序的下列“细节”。
工作时,记录执行特定操作所需的步骤。这些步骤最终成为您的接口代码。
查找“隐藏的”需求。分析应用程序必须处理的数据类型。在呼叫/问题管理时,让接口处理具有最高优先级的打开的问题,而关闭那些优先级大多数为“当时间允许时”的问题。
在将您公司(或部门)所用的商业规则以硬代码方式制成接口之前,要充分理解这些规则,应确定这些规则在当前形势下是否仍适用。在设计接口前确定并解决这些问题。
确保用某种方法标识所用的屏幕。大型机应用程序在屏幕的某处通常有标识符。接口代码在处理数据条目前应检查是否显示了正确的屏幕,如果未显示正确的屏幕,此接口可调用错误例行程序然后退出。这是一个简单有效的方法,可提供对未来问题的良好跟踪性。
并发是编写接口前必须要解决的另一个问题。在某些情况下,两个系统包含“相同”数据,可能同时对这两个系统中的相同数据对象进行更改。
首先,确定应用程序如何检测这样的事件。常用方法是检查要覆盖的记录的更新时间和日期。
其次,确定检测到“冲突”后应该采取何种操作。此操作应像将目标记录捕捉到平面文件然后向一些管理员发送警报那么简单。可能要应用一个商业规则,例如规定记录的“拥有者”比进行更改的任何其他用户有优先权。
设计接口时,通常使用自顶向下的方法(从一般到特殊)更为有效。但是,实现接口时,通常最好使用自底向上的方法。使用这种方法标识和实施此接口所完成工作的最小单位。然后可分别测试每个部分。这些部分最终可变为执行高级功能的模块的组件。
下列过程帮助深入学习有关测试功能的事项。
应分别测试所有例行程序。输出结果不可见的例行程序可使用 TSD 脚本调试器来查看结果。否则,需要编写一个事件组以显示结果。
测试查询数据的例行程序时,建议尽量少锁定 SQL 表。使用 SQLSelect 在一个取来和上载循环圈中循环会使 SQL 表的锁定时间超过所需时间或可接受的时间。
测试所有例行程序后,可测试主例行程序的步骤。主例行程序可能需要做一些初始化工作,其中包括:
注意:特别注意将一个例行程序组件插入另一个例行程序组件的地方。确保例行程序组件始终使主机应用程序处在已知屏幕。
结构化主例行程序,以使一个例行程序组件出现关键故障时,在处理中做出合适的暗示。也就是说,如果某个例行程序组件指示存在不可恢复的故障时,主例行程序应不能继续运行。
编写接口应用程序时,应带有错误处理部分。在接口操作期间,可能发生一些事件。
有几个选项可处理错误,检测到的错误类型不同,处理错误所用的选项也不同。选项包括:
最好的方法是上述选项的组合。可安装一般错误处理例行程序,此程序用于通知用户并记录相关信息。以后可修改此例行程序,以处理大多数可恢复的错误。不可恢复的错误始终会导致向用户发送警报。
Tivoli 服务台 6.0 开发工具包旧 API 指南