当定义属性并将其类型指定为数据类型类时,可以使用特殊选项来定义和使用该属性,如本节中所述。
数据类型类使能够强制执行有关属性值的规则集。
IRIS 提供的数据类型类包括 %Library.String、 %Library.Integer、 %Library.Numeric、%Library.Date等等。因为 %Library 包的类名可以缩写,所以可以缩写其中的许多类;例如, %Date 是 %Library.Date的缩写。
每个数据类型类都具有以下特征:
它指定编译器关键字的值。对于属性,编译器关键字可以执行以下操作:
SQL、ODBC 和 Java 客户端它指定影响细节的参数值,如下所示:
XML 或 HTML 字符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。
再例如,数据类型类定义 DISPLAYLIST 和 VALUELIST 参数,可以使用它们来指定要在用户界面中显示的选项及其相应的内部值:
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的方法。