在前面的练习中,您已经学习了基本变量,即 EGL 中最简单的数据部件类型。在此练习中,将学习 dataItem,它们是一些复杂的数据部件。每个 dataItem 都基于单个基本变量,但 dataItem 部件具有额外的 EGL 属性,可配置它以进行特定使用。例如,可以从数字基本变量定义 dataItem 并添加 range 属性,后者指定数据部件的最小值和最大值。通过这种方法,dataItem 可以使您更好地控制应用程序使用基本变量的方式。
与 EGL 中预定义的基本变量不同,必须先定义 dataItem 部件,然后才能从该 dataItem 部件创建变量。要定义 dataItem 部件,需指定它的名称、它的基本类型和它的 EGL 属性。例如,以下代码定义一个名为 myCurrencyDataItem 的 dataItem,它基于 num 基本类型并具有属性 currency = yes,该属性将 dataItem 设置为显示为货币值。
DataItem myCurrencyDataItem num(7,2) {currency = yes} end
定义了 dataItem 部件之后,就可以根据此 dataItem 部件创建变量了,就如在前一个练习中根据基本变量创建变量一样。以下代码创建一个名为 customerAccountBalance 基于 myCurrencyDataItem dataItem 的变量:
customerAccountBalance myCurrencyDataItem;
然后可采用使用从基本变量创建的变量的方式使用该变量。
一般说来,使用 dataItem 比使用基本变量在编码方面要好一些,因为 dataItem 允许您标准化在应用程序中数据的使用。以下是使用 dataItem 而不是使用基本变量的一些理由:
dataItem 通常是在称为数据字典的单个文件中定义的。将所有 dataItem 集中在单个文件中可使得易于管理它们以及导入它们以供在其它 EGL 文件中使用。在下面的步骤中,将创建一个数据字典并在该数据字典中定义一些 dataItem 部件。
如果列示的包不是 data,则单击浏览,单击 data,然后单击确定。
dictionary
“新建 EGL 部件”窗口看起来应如下所示:
dataItem booleanTest char(1) {value = "y", displayName = "Test boolean field", isBoolean = yes} end dataItem charTest char(22) {value = "Mrs. Lewis", displayName = "Last name", inputRequired = yes} end dataItem dateTest char(10) {displayName = "Test data field", dateFormat = "mm/dd/yyyy", value = "10/01/1952"} end dataItem numericCurrencyTest decimal(9,2) {value = 44444.44, currency = yes, numericSeparator = yes, validValues = [[5, 55555]]} end
数据字典通常是按字母顺序组织的,但在此示例中,不需要组织 dataItem,原因是只有四个 dataItem。下面的代码定义以下 dataItem 部件:
在下面的步骤中,将创建一个 PageHandler 和 Web 页面来尝试使用刚才创建的 dataItem。
DataItemTest
package pagehandlers; import data.*; PageHandler DataItemTest {view="DataItemTest.jsp", onPageLoadFunction=onPageLoad} //Variables inputChar charTest; outputChar charTest; inputDate dateTest; outputDate dateTest; inputCurrency numericCurrencyTest; outputCurrency numericCurrencyTest; inputBoolean booleanTest; outputBooleanMessage char(45); //Function definitions Function onPageLoad() End Function moveTestValues(); outputChar = inputChar; outputDate = inputDate; outputCurrency = inputCurrency; if (inputBoolean == "Y") outputBooleanMessage = "Check box is checked. True returned."; else outputBooleanMessage = "Check box is not checked. False returned."; End End End
以下是一些有关刚才插入的代码的技术说明:
选择具有消息标记的输入字段会在页面上每个输入字段的旁边添加一个错误消息字段。
将输入复制到输出
如在上一个练习一样,最后一步是将 PageHandler 中的函数绑定至按钮。
该页面看起来应如下所示:
对此页面上的输入变量和输出变量指定了 EGL 属性,这些属性是根据指定给它们的 dataItem 部件定义来指定的。例如,inputChar 变量基于 charTest dataItem 部件,后者具有属性 inputReqired = yes。此属性使得此变量在将它添加至的任何 Web 表单中都是必需字段。在下面的步骤中,将测试页面并查看指定给 dataItem 部件定义的 EGL 属性如何影响添加至 DataItemsTest.jsp 页面的字段。
Web 页面将在 Web 浏览器中打开。输入字段和输出字段都预先填写了变量的缺省值。
由于 charTest dataItem 具有 EGL 属性 inputRequired = yes,所以该字段旁边的错误消息字段显示如下消息:No input received for required field - enter again。
numericCurrencyTest dataItem 将 EGL validValues 属性设置为 [[5, 55555]],该属性将从此 dataItem 创建的变量限定在 5 到 55,555 之间。OutputCurrency 字段旁边的错误消息显示如下消息:Input not within defined list of valid values - enter again。
这就会将输入字段复制到输出字段。
现在,您可以开始进行练习 1.4:记录了。