openUI

OpenUI 语句允许用户与界面基于 consoleUI 的程序交互。该语句定义用户和程序事件并指定如何响应每个事件。

OpenUI 语句的语法如下所示:


OpenUI 语句
OpenAttributes
OpenAttributes 定义一组属性-值对,用逗号将每一对隔开,如以下示例中所示:
  allowAppend = yes, allowDelete = no
每个属性都会影响用户交互,并且在某些情况下会覆盖在 OpenableElements 中引用的 consoleUI 变量的属性。属性如下所示:
allowAppend
指定用户是否能在屏幕上的 arrayDictionary 的末尾插入数据,如果设置为 yes,则有如下含义:
  • 用户通过将光标移至 arrayDictionary 行来插入一行数据,该 arrayDictionary 行跟在包括数据的最后一行之后
  • 该用户操作会将与该 arrayDictionary 绑定的元素追加至动态数组
  • 用于变量类型ArrayDictionary
  • 属性类型Boolean
  • 示例allowAppend = no
  • 缺省值yes;但在 openUI 属性 displayOnly 设置为 yes 时,缺省值为 no
allowDelete
指定用户是否能从屏幕上的 arrayDictionary 删除一行;如果设置为 yes,则有如下含义:
  • 用户通过将光标移至某行并按 ConsoleLib.key_delete 中引用的键来删除该行。
  • 该用户操作会删除与该 arrayDictionary 绑定的动态数组中的相关元素。
  • 用于变量类型ArrayDictionary
  • 属性类型Boolean
  • 示例allowDelete = no
  • 缺省值yes;但在 openUI 属性 displayOnly 设置为 yes 时,缺省值为 no
allowInsert
指定用户是否能在屏幕上的 arrayDictionary 中插入一行;如果设置为 yes,则有如下含义:
  • 用户通过将光标移至现有行并按 ConsoleLib.key_insert 中引用的键来插入该行。
  • 新行光标所在的行之前
  • 该用户操作会将与该 arrayDictionary 绑定的元素插入至动态数组
  • 用于变量类型ArrayDictionary
  • 属性类型Boolean
  • 示例allowInsert = no
  • 缺省值yes;但在 openUI 属性 displayOnly 设置为 yes 时,缺省值为 no
bindingByName

指示如何将一系列变量与一系列 ConsoleField 绑定;明确地说,是否将每个变量名与 ConsoleField 名相匹配。变量名列示在 BindClause 中,而 ConsoleField 名是 ConsoleField 名称字段中的值。

  • 用于变量类型ConsoleForm、ConsoleField 或 Dictionary;而不是 arrayDictionary
  • 属性类型Boolean
  • 示例bindByName = yes
  • 缺省值no
值如下所示:
no(缺省值)
将变量与 ConsoleField 按位置相匹配:
  • 列表中的每个变量的位置;以及
  • consoleForm 中的每个 ConsoleField 的位置。

不管 consoleField 是显式列示在 openUI 语句中还是列示在字典声明中,它们的顺序都将定义 consoleField 的顺序以便按位置进行绑定。(它们的顺序还将定义用户输入的跳进顺序,如 ConsoleUI 部件和相关变量中所述。)

yes
将变量与 ConsoleField 按名称相匹配。

如果 consoleField 已列示或者在字典声明中(当绑定列表中没有匹配的变量时),consoleField 的用户输入会被忽略。同样,没有与任何字段匹配的绑定变量也会被忽略。

在运行时,至少一个 consoleField 和变量必须绑定在一起;否则将发生错误。

color
指定 ConsoleField 中的文本的颜色。该值覆盖在 ConsoleField 声明中指定的颜色。
  • 用于变量类型ConsoleForm、ConsoleField、ArrayDictionary 或 Dictionary
  • 属性类型ColorKind
  • 示例color = red
  • 缺省值white
值如下所示:
defaultColorwhite(缺省值)
白色
black
黑色
blue
蓝色
cyan
青色
green
绿色
magenta
品红色
red
红色
yellow
黄色
currentArrayCount
指定与屏幕上的 arrayDictionary 绑定的动态数组中的可用元素的数目。如果未指定此值,则表示所有元素都可以在 arrayDictionary 中使用。
  • 用于变量类型ArrayDictionary
  • 属性类型INT
  • 示例currentArrayCount = 4
  • 缺省值none
displayOnly
指定 consoleField 是否仅供显示。如果设置为 yes,则用户不能修改该数据,该数据是受保护的,不能更新它们。
  • 用于变量类型ArrayDictionary、Dictionary、ConsoleField 和 ConsoleForm
  • 属性类型Boolean
  • 示例displayOnly = yes
  • 缺省值no
help
指定用户按 ConsoleLib.key_help 中标识的键时要显示的文本。

此帮助文本是用于 openUI 命令的。在某些情况下,与该键相关联的文本更加特定于上下文。例如,菜单中的每个选项可以有自己的帮助消息。

  • 用于变量类型ConsoleForm、ConsoleField、ArrayDictionary 或 Dictionary
  • 基本类型String
  • 示例:help = "Update the value"
  • 缺省值Empty string
helpKey
指定用于搜索资源束的访问键,该资源束包含在出现以下情况时将显示的文本:
  • 光标在 OpenableElements 中标识的 ConsoleUI 变量(如 ConsoleForm)中;并且
  • 用户按了 ConsoleLib.key_help 中标识的键。
如果同时指定 helphelpKey,则使用 help
  • 用于变量类型ConsoleForm、ConsoleField、ArrayDictionary 或 Dictionary
  • 属性类型String
  • 示例helpKey = "myKey"
  • 缺省值Empty string

资源束是由系统变量 ConsoleLib.messageResource 标识的,如 messageResource 中所述。

highlight
指定显示 ConsoleField 时要使用的特殊效果(如果有的话)。该值覆盖在 ConsoleField 声明中指定的等效值。
  • 用于变量类型ConsoleForm、ConsoleField、ArrayDictionary 或 Dictionary
  • 属性类型HighlightKind[]
  • 示例highlight = [reverse, underline]
  • 缺省值[noHighLight]
值如下所示:
noHighlight(缺省值)
不会有特殊效果。使用此值将覆盖任何其它值。
blink
没有效果。
reverse
反转文本和背景色,这样的话(举例来说),如果显示是黑底白字的,则背景变为白色的,而文本变为黑色的。
underline
在受影响区域下面加下划线。下划线的颜色就是文本的颜色,即使同时指定了值 reverse 也是如此。
intensity
指定显示字体的强度。
  • 用于变量类型ConsoleField、ConsoleForm、ArrayDictionary 或 Dictionary
  • 属性类型IntensityKind[]
  • 示例intensity = [bold]
  • 缺省值[normalIntensity]
值如下所示:
normalIntensity(缺省值)
不会有特殊效果。使用此值将覆盖任何其它值。
bold
使文本以粗体字显示。
dim
当输入字段被禁用时,适当地让文本以较弱的强度出现。
invisible
除去任何有关“ConsoleField 在表单上”的指示。
isConstruct

指定 openUI 语句是否用于创建选择标准以供在 SQL 语句(如 SELECT)中使用。

  • 用于变量类型ConsoleField、ConsoleForm 和 Dictionary
  • 属性类型Boolean
  • 示例isConstruct = no
  • 缺省值yes
值如下所示:
no(缺省值)
与以往一样,每个 ConsoleField 与变量绑定。
yes

openUI 语句必须与字符类型的单个变量绑定。该变量不提供 ConsoleField 的初始值,但会接收用户输入,已经该用户输入的格式以供在 SQL WHERE 子句中使用。

maxArrayCount
指定与屏幕上的 arrayDictionary 绑定的动态数组中的最大行数。达到最大数目后,用户将无法再插入行。
  • 用于变量类型ArrayDictionary
  • 属性类型INT
  • 示例maxArrayCount = 20
  • 缺省值none
setInitial
指定在用户修改 ConsoleField 的初始值(如 consoleForm 声明中定义的那样)之前是否显示该值。(可通过设置 ConsoleField 的 initialValue 字段来指定初始值。)
  • 用于变量类型ConsoleField、ConsoleForm、Dictionary 和 ArrayDictionary
  • 属性类型Boolean
  • 示例setInitial = yes
  • 缺省值no

如果 setInitial 的值为 no,则一开始将提取并显示绑定变量的值。

OpenableElements
可对其运行 openUI 语句的 ConsoleUI 变量:
  • ConsoleForm
  • consoleField 或下列其中一项:
    • 一个 consoleField 列表,每个 consoleField 用逗号隔开
    • 一个 dictionary,它是在 consoleForm 中声明的,并且引用该 consoleForm 中的一组 consoleField
    • 一个 arrayDictionary,它是在 consoleForm 中声明的,并且引用该 consoleForm 中的一组 consoleField 数组
  • Menu
  • Prompt
  • Window
BindClause
与 ConsoleUI 变量绑定的基本变量、记录或数组的列表。绑定变量的特征取决于对其运行 openUI 语句的 consoleUI 变量的特征:
  • 对于 consoleField,可以指定基本变量。
  • 对于屏幕上的 arrayDictionary,可以指定记录数组,以 arrayDictionary 中的每一行为一个元素;并且如果 arrayDictionary 中的每行表示单个值,可指定基本变量数组。
  • 对于一个字典或一列 consoleField,可指定一列基本变量。或者可以指定记录数组,每个元素包含与 consoleField 绑定的一系列字段。此替代方法相当于将动态数组与屏幕上的 arrayDictionary(只有一行)绑定;可以追加、插入或删除记录以更改动态数组,在任何情况下,一次只能显示一个记录。
  • 对于提示,可以指定接收用户响应的基本字段。

有关绑定的详细信息,请参阅有关 OnEventBlock(后面会讲到)以及 ConsoleUI 部件和相关变量的部分。

OnEventBlock
事件块是一种编程结构,它包括零到多个事件处理程序,每个事件处理程序包含为响应特定事件而编写的代码。下面是一个以 OnEvent 头开始的事件处理程序:
  OnEvent(eventKind: eventQualifiers)
eventKind
其中一个事件。有效值在事件类型中作了描述。
eventQualifier
进一步定义事件的数据。这种数据可能是输入的 ConsoleField 或按下的击键。

响应指定事件的 EGL 语句在一个 OnEvent 头与下一个 OnEvent 头(如果有的话)之间,如后面的示例中所示。

用户继续与程序交互,并且在发生与事件处理程序相关联的事件时,该程序将运行该事件处理程序。如果 openUI 语句用于显示提示,则用户程序交互不会循环:
  1. 事件处理程序(可能是其中一个)捕获用户击键并作出响应
  2. openUI 语句结束

窗口没有可用的事件块。

考虑用以下示例来指导用户与 ConsoleForm 之间的交互:
		openUI {bindingByName=yes}
			 activeForm
			 bind firstName, lastName, ID
			 OnEvent(AFTER_FIELD:"ID")
				  if (employeeID == 700)
        firstName = "Angela";
        lastName = "Smith";
				  end
  end
该代码执行下列操作:
考虑有关上述示例的以下详细信息:

可通过以 exit openUI 的格式发出 exit 语句来结束 openUI 语句。

事件类型

ConsoleUI 支持下列事件:
BEFORE_OPENUI
EGL 运行时开始运行 OpenUI 语句。此事件可供基于窗口的变量之外的所有 ConsoleUI 变量使用。
AFTER_OPENUI
EGL 运行时将停止运行 OpenUI 语句。此事件可供基于窗口的变量之外的所有 ConsoleUI 变量使用。
ON_KEY:(ListOfStrings)
用户按了特定键,如“ESC”、“F2”或“CONTROL_W”之类。可通过隔开每个字符串来标识多个键,如以下示例中所示:
  ON_KEY:("a", "ESC") 

此事件可供基于窗口的变量之外的所有 ConsoleUI 变量使用。

BEFORE_FIELD:(ListOfStrings)
用户已将光标移到指定的 ConsoleField 中,它是由与 ConsoleField 名称字段的值匹配的字符串来表示的。可通过隔开每个字符串来标识同一 consoleForm 中的多个 ConsoleField,如以下示例中所示:
  BEFORE_FIELD:("field01", "field02") 
AFTER_FIELD:(ListOfStrings)
用户已将光标移出指定的 ConsoleField,它是由与 ConsoleField 名称字段的值匹配的字符串来表示的。可通过隔开每个字符串来标识同一 consoleForm 中的多个 ConsoleField,如以下示例中所示:
  AFTER_FIELD:("field01", "field02") 
BEFORE_DELETE
对于屏幕上的 arrayDictionary,用户按了 ConsoleLib.key_deleteLine 中指定的键,但 EGL 运行时还未删除行。该程序可以调用 consoleLib.cancelDelete 以避免删除该行。
BEFORE_INSERT
对于屏幕上的 arrayDictionary,用户按了 ConsoleLib.key_insertLine 中指定的键,但 EGL 运行时还未插入行。该程序可以调用 consoleLib.cancelInsert 以避免插入该行。
BEFORE_ROW
对于屏幕上的 arrayDictionary,用户将光标移到行中。
AFTER_DELETE
对于屏幕上的 arrayDictionary,用户按了 ConsoleLib.key_deleteLine 中指定的键,并且 EGL 运行时已删除行。
AFTER_INSERT
对于屏幕上的 arrayDictionary,用户按了 ConsoleLib.key_insertLine 中指定的键;EGL 运行时已插入行;并且光标离开已插入的行。

在将更改落实至数据库之前,可以编辑该行;就像 AFTER_INSERT 处理程序中经常发生的那样。

AFTER_ROW
用户从屏幕上的 arrayDictionary 中的行移动光标。
MENU_ACTION:(ListOfStrings)
用户选择了 menuItem,它是由与 menuItem 名称字段的值相匹配的字符串来表示的。可通过隔开每个字符串来标识多个 menuItem,如以下示例中所示:
  MENU_ACTION:("item01", "item02") 

isConstruct

当属性 isConstructyes 时,放在与 openUI 命令绑定的变量中的文本的格式是以特殊方式定义的,如以下示例中所示:
  1. openUI 语句将针对由 3 个 ConsoleField(employeeagecity)组成的 ConsoleForm 运行,并且每个字段与同名的 SQL 表列相关联。

    通过设置 consoleField 属性 SQLColumnName 将 consoleField 与 SQL 表列相关联;必须设置 consoleField 属性 dataType,如 ConsoleField 属性和字段中所示。

  2. 用户执行下列操作:
    • employee 字段留为空白
    • age 字段中输入以下内容:
        > 25
    • city 字段中输入以下内容:
        = 'Sarasota'
  3. 当用户离开屏幕上对其运行 openUI 语句的变量时,绑定变量接收以下内容:
      AGE > 28 AND CITY = 'Sarasota'

就像显示的那样,EGL 将运算符 AND 放在用户提供的每个子句之间。

下表显示有效的用户输入和生成的子句。短语简单 SQL 类型指的是未结构化也非类似 LOB 类型的 SQL 类型。

符号 定义 受支持的数据类型 示例 生成的子句(对于名为 C 的字符列) 生成的子句(对于名为 C 的数字列)
= 等于 简单 SQL 类型 =x, ==x C = 'x' C = x
> 大于 简单 SQL 类型 >x C > 'x' C > x
< 小于 简单 SQL 类型 <x C < 'x' C < x
>= 不小于 简单 SQL 类型 >=x C >= 'x' C >= x
<= 不大于 简单 SQL 类型 <=x C <= 'x' C <= x
<> 或 != 不等于 简单 SQL 类型 <>x 或 !=x C != 'x' C != x
.. 范围 简单 SQL 类型 x.y 或 x..y C BETWEEN 'x' AND 'y' C BETWEEN x AND y
* 字符串的通配符(如下一个表中所述) CHAR *x 或 x* 或 *x* C MATCHES '*x' 不适用
? 单字符通配符(如下一个表中所述) CHAR ?x, x?, ?x?, x?? C MATCHES '?x' 不适用
| 逻辑或 简单 SQL 类型 x|y C IN ('x', 'y') C IN (x, y)

等号(=)可以表示 IS NULL;而不等号(!= 或 <>)可以表示 IS NOT NULL。

MATCHES 子句是通过用户指定下表中描述的其中一个通配符生成的。

符号 作用
* 匹配零或多个字符。
? 匹配任何单一字符。
[ ] 与任何用括号括起来的字符相匹配。
-(连字符) 在方括号内的字符之间使用时,连字符与两个字符之间的范围内的任何字符(包括这两个字符)相匹配。例如,[a-z] 与小写范围内的任何小写字母或特殊字符相匹配。
^ 在方括号中使用时,初始插入标记与未包括在方括号内的任意字符相匹配。例如,[^abc] 与 a、b 或 c 之外的任意字符相匹配。
\ 是缺省转义字符;下一个字符是字面值。允许任何通配符包括在字符串内并且不充当通配符。
方括号外部的任何其它字符 必须完全匹配。
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.