上一主题: OBJECT 语句下一主题: FACTORY 可选语句


ATTRIBUTES 可选语句

OBJECT 语句中的可选语句定义了对象的属性。

语法

ATTRIBUTES [table_name]{
   att_name [field_name] value_type [access_type[status_type][DISPLAY_NAME string]]{
       [ON_NEW DEFAULT|SET value|NOW ;]
       [ON_CI DEFAULT|SET value|NOW ;]
	[ON_DB_INIT DEFAULT|SET value|NOW ;];]};]

参数

table_name

数据库中的表名称,其中数据库存储了与对象中的属性相关的值。如果未指定表名称,则将使用 OBJECT 语句中的 obj_name

att_name

属性名称。每个属性通常会映射至数据库表中的某个字段(列)。

field_name

数据库表中的字段的名称,如果属性未映射至某个字段,则名称为 LOCAL,如果属性从其它属性派生,则名称为 DERIVED(派生表达式)。如果既不是 LOCAL、DERIVED,也不是指定的字段名称,则假设字段名称与属性名称相同。

声明为 DERIVED 的变量只有其值被检索时才被构建。DERIVED 操作数包含一系列属性名称以及用空格分隔的字符串常量。派生值中的所有属性必须为简单值(也就是说,它们不能为 xREL),并且应该在派生变量之前声明。派生属性的值是其值的串联值。

派生表达式中的字符串常量应该包含对以下形式之一的环境变量的引用:

${var}

${var#pattern}

${var#pattern#replacement}

这些指定替换为 domsrvr 启动时的环境变量的值。 #pattern 操作数可选。 如果提供,它将被视为常规表达式,无论它出现在环境变量值中的何处,它都将被替代。 如果未指定,#replacement 操作数将默认为空。 由于 # 是固定分隔符,所以模式不能包含 # 符号。 不存在对其它消息中派生属性的使用的限制。 它们以与标准属性相同的方式工作。 只要任何属性(派生属性根据其建立)发生更改,派生属性的活动表将触发。

value_type

标识属性值的数据类型,如

如果指定 STRING,则可以用一整数(放在 STRING 后)指定其大小。如果未指定大小,则将使用数据库中的值。

UUID 是 16 字节的二进制数据,用作某些数据库记录的唯一标识符。

SREL 引用了另一个对象的属性。如果指定 SREL,则必须指定 obj2_name,以标识属性引用的对象。

srel_name 指定 "named" SREL。与 "simple" SREL 类似,"named" 是一种 MAJIC OBJECT 属性类型,它代表单个相关,唯一标识了另一表 (ob2_name) 中的行。 "simple" SREL 属性通常映射至另一表中的 "id" 字段,然而,"named" SREL 会将两个或多个属性 ( name, name2, … ) 映射至引用表中的两个或多个属性,其中两个或多个属性会唯一标识引用表中的某一行。

access_type

定义对属性的访问权限。有效值是:

描述

CONST

无法更改

PRIVATE

只读

PUBLIC

读/写权限(默认值)

WRITE_NEW

只有在创建对象并在保存对象之前才可以编写

status_type

指明属性的状态,如:

DISPLAY_NAME 字符串

指定用于代替与属性相关的消息中的属性名称的字符串,如 "required attribute missing"

ON 语句

只有在 value_type 是 INTEGER、STRING、DATE 或 SREL 时才使用其中一个 ON 语句。

ON_NEW DEFAULT|SET value|NOW

指明当第一次创建对象时设置的属性值:

描述

DEFAULT

将空的当前值更改为 value 或 NOW。

SET

将任何当前值更改为 value 或 NOW。

指定数值或字符串值,具体取决于属性的数据类型。

NOW

如果属性为类型 DATE,则指定该值;它会将属性设置为当前日期和时间。

在以下示例中,90 为创建对象时设置的默认值:

ON_NEW DEFAULT 90 ;
ON_CI DEFAULT|SET value|NOW

指明当在数据库中检查属性时设置属性的值。请参阅对 ON_NEW 的对每个参数的描述。

ON_DB_INIT DEFAULT|SET value|NOW

指明当从数据库中实例化属性时设置属性的值。请参阅对 ON_NEW 的对每个参数的描述。

示例

本示例定义了具有 start_date 名称的属性,其值存储在数据库 Notify_Log_Header 表的 nlh_start 字段中。字段名称后接每个属性的数据类型。可选参数定义了对一些属性的访问权限、指明属性是必需属性以及通知将一些属性值设置为当前日期和时间的时间。

例如,定义了称为 last_mod 的属性;当在数据库中检查该属性时,它的值会被设置为当前日期和时间。也定义了称为 contact 的属性;它的值是存储在数据库字段 nlh_c_addressee 中的单个相关。引用的对象是 cnt:

ATTRIBUTES Notify_Log_Header {
   start_date         nlh_start          DATE WRITE_NEW {ON_NEW DEFAULT NOW;} ;
   last_mod                              DATE {ON_CI SET NOW ;} ;
   msg_hdr            nlh_hdr            STRING 20 WRITE_NEW ;
   msg_text           nlh_msg            STRING WRITE_NEW ;
   msg_ack            nlh_user_ack       STRING ;
   contact            nlh_c_addressee    SREL cnt WRITE_NEW ;
   notify_method      nlh_cm_method      INTEGER WRITE_NEW ;
   activity_notify    nlh_transition     INTEGER WRITE_NEW ;
   pri_event          nlh_pri            INTEGER WRITE_NEW ;
   notify_type        nlh_type           INTEGER WRITE_NEW ; 
   ack_time           nlh_ack_time       DURATION ; 
   status             nlh_status         INTEGER REQUIRED ;
   end_date           nlh_end            DATE {ON_NEW DEFAULT NOW ;} ;

};