文章
· 九月 11, 2023 阅读大约需 3 分钟

第二十五章 Classes - 基于数据类型的属性

第二十五章 Classes - 基于数据类型的属性

基于数据类型的属性

当定义属性并将其类型指定为数据类型类时,可以使用特殊选项来定义和使用该属性,如本节中所述。

数据类型类

数据类型类使能够强制执行有关属性值的规则集。

IRIS 提供的数据类型类包括 %Library.String%Library.Integer%Library.Numeric%Library.Date等等。因为 %Library 包的类名可以缩写,所以可以缩写其中的许多类;例如, %Date%Library.Date的缩写。

每个数据类型类都具有以下特征:

  • 它指定编译器关键字的值。对于属性,编译器关键字可以执行以下操作:

    • 使属性成为必需的
    • 指定属性的初始值
    • 控制如何将属性映射到 SQLODBCJava 客户端
  • 它指定影响细节的参数值,如下所示:

    • 数据类型允许的最大和最小逻辑值
    • 字符串可以包含的最大和最小字符数
    • 小数点后的位数
    • 如果字符串超过最大字符数是否截断
    • 显示格式
    • 如何转义任何特殊的 XMLHTML 字符
    • 可在任何用户界面中使用的逻辑值和显示值的枚举列表
    • 字符串必须匹配的模式(自动使用模式匹配运算符)
    • 导入或导出到 XML 时是否尊重或忽略 UTC 时区
  • 它提供了一组方法来在存储(磁盘上)、逻辑(内存中)和显示格式之间转换文字数据。

可以添加自己的数据类型类。例如,以下显示了 %Library.String的自定义子类:

Class MyApp.MyType Extends %Library.String
{

/// The maximum number of characters the string can contain.
Parameter MAXLEN As INTEGER = 2000;

}

覆盖数据类型类的参数

当定义属性并将其类型指定为数据类型类时,可以覆盖该数据类型类定义的任何参数。

例如,数据类型类中的 %Integer 定义了类参数 (MAXVAL),但没有为此参数提供任何值。可以在属性定义中覆盖它,如下所示:

Property MyInteger As %Integer(MAXVAL=10);

对于此属性,最大允许值为 10

(在内部,这是有效的,因为数据类型类的验证方法是方法生成器;当编译器为类生成代码时,将使用提供的参数值。

同样,每个 %String 类型的属性都有一个排序规则类型,它确定值的排序方式(例如大小写是否有效)。默认排序规则类型是 SQLUPPER

再例如,数据类型类定义 DISPLAYLISTVALUELIST 参数,可以使用它们来指定要在用户界面中显示的选项及其相应的内部值:

Property Gender As %String(DISPLAYLIST = ",Female,Male", VALUELIST = ",F,M");

使用其他属性方法

属性有许多自动关联的方法。这些方法由数据类型类生成,可以从 ObjectScript 访问。

例如,如果定义一个具有三个属性的类 Person

Class MyApp.Person Extends %Persistent
{
Property Name As %String;
Property Age As %Integer;
Property DOB As %Date;
}

每个生成的方法的名称都是属性名称与继承类中的方法名称相连接。可以从 ObjectScript 访问这些生成的方法,如下例所示。可以通过直接从继承的类调用关联的方法来从 Python 访问相同的信息。例如,类中的 %Date 以及 DOB 属性关联的一些方法是:

 Set x = person.DOBIsValid(person.DOB)
 Write person.DOBLogicalToDisplay(person.DOB)
x = iris.cls("%Date").IsValid(person.DOB)
print(iris.cls("%Date").LogicalToDisplay(person.DOB))

其中 IsValid 是属性类的方法,LogicalToDisplay 是数据类型类中 %Date的方法。

讨论 (0)1
登录或注册以继续