Tema anterior: Instrucción OBJECTTema siguiente: Instrucción opcional FACTORY


Instrucción opcional ATTRIBUTES

La instrucción opcional dentro de la instrucción OBJECT que define las propiedades del objeto.

Sintaxis

ATTRIBUTES [nombre_tabla]{
   nombre_atributo [nombre_campo] tipo_valor [tipo_acceso[tipo_estado][DISPLAY_NAME string]]{
       [ON_NEW DEFAULT|SET valor|NOW ;]
       [ON_CI DEFAULT|SET valor|NOW ;]
	[ON_DB_INIT DEFAULT|SET value|NOW ;];]};]

Argumentos

table_name

El nombre de la tabla en la base de datos que almacena los valores asociados a los atributos del objeto. Si no se especifica el nombre de la tabla, se usa el nombre_objeto en la instrucción OBJECT.

nombre_atributo

El nombre del atributo. Cada atributo suele asignarse a un campo (columna) de la tabla de la base de datos.

nombre_campo

El nombre del campo en la tabla de la base de datos, LOCAL si el atributo no se asigna a un campo o DERIVED (derived-expr) si el atributo se deriva de otros atributos. Si no se especifica ni LOCAL, DERIVED, ni un nombre de campo, se asume que el nombre del campo es el mismo que el nombre del atributo.

Una variable declarada como DERIVED se construye sólo cuando se recupera su valor. El operando de DERIVED contiene una lista de nombres de atributo y de constantes de cadena separados mediante espacios. Todos los atributos de un valor derivado deben ser valores simples (esto es, no pueden ser valores xREL) y deben declararse antes en la variable derivada. El valor del atributo derivado es la concatenación de los valores de sus valores constituyentes.

Las constantes de cadena incluidas en una expresión derivada pueden contener referencias a variables de entorno en uno de los siguientes formatos:

${var}

${var#pattern}

${var#pattern#replacement}

Estas especificaciones se sustituyen por el valor de la variable de entorno a la hora de inicio de domsrvr. El operando #pattern es opcional. Si se proporciona, se trata como una expresión regular y se sustituye allí donde aparezca en el valor de la variable de entorno. Si no se especifica, el valor predeterminado del operando #replacement es nulo. Ya que # es un delimitador fijo, el patrón no puede contener un símbolo #. No hay restricciones para el uso de atributos derivados en otros mensajes. Se comportan del mismo modo que los atributos estándar. Cada vez que cambia alguno de los atributos a partir de los cuales se generó un atributo derivado, se desencadena un vínculo activo para el atributo derivado.

tipo_valor

Identifica el tipo de datos del valor del atributo como:

Si se especifica STRING, puede especificarse el tamaño en forma de un entero que siga a STRING. Si no se especifica tamaño, se emplea el valor de la base de datos.

UUID son 16 bytes de datos binarios empleados como identificador exclusivo para ciertos registros de base de datos.

SREL remite el atributo a otro objeto. Si se especifica SREL, debe especificarse nombre_objeto2 para identificar el objeto al que remite el atributo.

nombre_srel especifica una SREL “con nombre”. Al igual que una SREL “simple”, una SREL “con nombre” es un tipo de atributo MAJIC OBJECT que representa una relación única, que identifica de forma exclusiva una fila en otra tabla (nombre_objeto2). Un atributo SREL “simple” se asigna, por lo general, al campo “id” de otra tabla; sin embargo un atributo SREL “con nombre” se asigna a dos o más atributos ( nombre, nombre2, … ) en la tabla a la que se hace referencia, que identifican de forma exclusiva una fila en dicha tabla.

access_type

Define el acceso al atributo. Los valores válidos son:

Valor

Descripción

CONST

No puede modificarse

PRIVATE

Sólo lectura

PUBLIC

Acceso de lectura/escritura (valor predeterminado)

WRITE_NEW

Puede escribirse sólo cuando se crea el objeto, antes de guardarlo

tipo_estado

Indica el estado del atributo como:

DISPLAY_NAME string

Especifica una cadena que utilizar en lugar del nombre de atributo en mensajes concernientes a este atributo, como el que determina que falta un atributo obligatorio.

Instrucciones ON

Utilice una de ellas sólo cuando tipo_valor sea INTEGER, STRING, DATE, o SREL.

ON_NEW DEFAULT|SET valor|NOW

Indica que se defina el valor de un atributo cuando el objeto se cree por primera vez:

Valor

Descripción

DEFAULT

Cambia un valor actual nulo por valor o NOW.

SET

Cambia cualquier valor actual por valor o NOW.

valor

Especifica un valor numérico o un valor de cadena, dependiendo del tipo de datos del atributo.

AHORA

Especifique este valor si el atributo es de tipo DATE; define el atributo como la fecha y hora actuales.

En el siguiente ejemplo, 90 es el valor definido como predeterminado cuando se crea el objeto:

ON_NEW DEFAULT 90 ;
[ON_CI DEFAULT|SET valor|NOW ;]

Indica que se defina el valor de un atributo cuando se compruebe el atributo en la base de datos. Consulte la descripción de cada parámetro para ON_NEW.

ON_DB_INIT DEFAULT|SET valor|NOW

Indica que se defina el valor de un atributo cuando se creen instancias para él desde la base de datos. Consulte la descripción de cada parámetro para ON_NEW.

Ejemplo

Este ejemplo define atributos con nombres como start_date cuyos valores se almacenan en campos como nlh_start en la tabla Notify_Log_Header de la base de datos. Los nombres de campo van seguidos de cada tipo de datos de atributo. Los parámetros opcionales definen el acceso a algunos de los atributos, indican que el atributo es obligatorio y cuándo definir el valor de algunos de los atributos como la fecha y la hora actuales.

Por ejemplo, se define un atributo llamado last_mod; su valor se define como la fecha y hora actuales cuando el atributo se devuelve a la base de datos. Se define también un atributo llamado contact; su valor es una relación única almacenada en el campo de la base de datos nlh_c_addressee. El objeto al que se hace referencia es 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 ;} ;

};