Argomento precedente: Istruzione OBJECT

Argomento successivo: Istruzione opzionale FACTORY

Istruzione opzionale ATTRIBUTES

L'istruzione opzionale nell'istruzione OBJECT che definisce le proprietà dell'oggetto.

Sintassi

ATTRIBUTES [nome_tabella]{
   nome_attributo [nome_campo] tipo_valore [tipo_accesso[tipo_stato][DISPLAY_NAME string]]{
       [ON_NEW DEFAULT|SET valore|NOW ;]
       [ON_CI DEFAULT|SET valore|NOW ;]
	[ON_DB_INIT DEFAULT|SET valore|NOW ;];]};]

Argomenti

table_name

Il nome della tabella nel database che memorizza i valori associati agli attributi nell'oggetto. Se il nome della tabella non è specificato, viene usato nome_oggetto nell'istruzione OBJECT.

nome_attr

Il nome dell'attributo. Ogni attributo di solito corrisponde a un campo (colonna) nella tabella del database.

field_name

Il nome del campo nella tabella del database, LOCAL se l'attributo non corrisponde a un campo o DERIVED (espressione derivata) se l'attributo è derivato da altri attributi. Se non sono specificati né LOCAL, né DERIVED né il nome di un campo, si presuppone che il nome del campo sia uguale al nome dell'attributo.

Una variabile dichiarata come DERIVED viene costruita solo se viene recuperato il relativo valore. L'operando di DERIVED contiene un elenco di nomi di attributo e di costanti di stringa separati da spazi. Tutti gli attributi in un valore derivato devono essere valori semplici, cioè non possono essere xREL, e devono essere dichiarati prima della variabile derivata. Il valore dell'attributo derivato è la concatenazione dei relativi valori costitutivi.

Le costanti di stringa in un'espressione derivata possono contenere riferimenti a variabili di ambiente in uno di questi formati:

${var}

${var#pattern}

${var#pattern#replacement}

Queste specifiche sono sostituite dal valore della variabile di ambiente al momento dell'avvio di domsrvr. L'operando #pattern è opzionale. Se specificato, viene considerato come un'espressione normale e sostituito ogni volta che appare nel valore di una variabile di ambiente. L'impostazione predefinita dell'operando #replacement è null, se non viene specificato. Poiché # è un delimitatore prestabilito, pattern non può contenere un simbolo #. Non esistono limitazioni all'uso di attributi derivati in altri messaggi. Il loro comportamento è identico a quello degli attributi standard. Viene attivato immediatamente un collegamento per un attributo derivato ogni volta che cambia un attributo qualsiasi da cui esso deriva.

tipo_valore

Identifica il tipo di dati del valore dell'attributo:

Se si specifica STRING, è possibile specificare la dimensione con un numero intero dopo STRING. Se non si specifica una dimensione, viene usato il valore nel database.

UUID è composto da 16 byte di dati binari ed è usato come identificativo univoco per determinati record del database.

SREL stabilisce un riferimento tra l'attributo e un altro oggetto. Se si specifica SREL, è necessario specificare nome_oggetto2 per identificare l'oggetto a cui si riferisce l'attributo.

srel_name specifica uno SREL "denominato". Come uno SREL "semplice", uno SREL "denominato" è un tipo di attributo MAJIC OBJECT che rappresenta una singola relazione, che identifica in modo univoco una riga in un'altra tabella (nome_oggetto2). Un attributo SREL "semplice" di solito corrisponde al campo "id" in un'altra tabella, mentre in uno SREL "denominato" due o più attributi ( name, name2, … ) corrispondono a due o più attributi nella tabella di riferimento che ne identificano in modo univoco una riga.

access_type

Definisce l'accesso all'attributo. I valori validi sono:

Valore

Descrizione

CONST

Non modificabile.

PRIVATE

Sola lettura.

PUBLIC

Lettura/scrittura (impostazione predefinita).

WRITE_NEW

Può essere scritto solo quando viene creato l'oggetto e prima di salvarlo.

tipo_stato

Indica lo stato dell'attributo:

DISPLAY_NAME string

Specifica una stringa da usare al posto del nome di un attributo nei messaggi che riguardano questo attributo, ad esempio "manca un attributo obbligatorio".

Istruzioni ON

Usare una di queste istruzioni solo quando tipo_valore è INTERO, STRING, DATA o SREL.

ON_NEW DEFAULT|SET valore|NOW

Indica di impostare il valore di un attributo quando l'oggetto viene creato per la prima volta:

Valore

Descrizione

DEFAULT

Cambia un valore corrente nullo in valore o NOW.

SET

Cambia un qualsiasi valore corrente in valore o NOW.

valore

Specifica un valore numerico o un valore stringa, a seconda del tipo di dati dell'attributo.

NOW

Specifica che questo attributo è del tipo DATE; imposta l'attributo sulla data e sull'ora correnti.

Nell'esempio seguente, 90 è il valore predefinito impostato quando l'oggetto viene creato:

ON_NEW DEFAULT 90 ;
ON_CI DEFAULT|SET valore|NOW

Indica di impostare il valore di un attributo quando l'attributo viene archiviato nel database. Vedere la descrizione di ogni parametro per ON_NEW.

ON_DB_INIT DEFAULT|SET valore|NOW

Indica di impostare il valore di un attributo quando viene creata un'istanza dell'attributo dal database. Vedere la descrizione di ogni parametro per ON_NEW.

Esempio

Questo esempio definisce gli attributi con nome start_date i cui valori sono memorizzati nei campi nlh_start nella tabella Notify_Log_Header nel database. I nomi dei campi sono seguiti dal tipo di dati di ogni attributo. Parametri opzionali definiscono l'accesso ad alcuni attributi, indicano che l'attributo è obbligatorio e quando impostare il valore di alcuni attributi sulla data e sull'ora correnti.

Ad esempio, viene definito un attributo chiamato last_mod; il valore viene impostato sulla data e sull'ora in cui l'attributo viene archiviato nel database. Viene definito anche un attributo chiamato contact; il valore è una singola relazione memorizzata nel campo nlh_c_addressee del database. L'oggetto a cui si fa riferimento è 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 ;} ;

};