前のトピック: 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(derived-expr)となります。 LOCAL でも DERIVED でもなく、フィールド名も指定しない場合は、フィールドの名前は属性の名前と同じであると見なされます。

DERIVED として宣言した変数は、その値の取得時にのみ生成されます。 DERIVED のオペランドには、属性名と文字列定数をスペースで区切ったリストが含まれています。 派生値のどの属性も単純な値(つまり、相互参照できない値)であり、派生変数よりも前に宣言する必要があります。 派生属性の値は、その構成要素値の値を連結したものです。

派生式内の文字列定数には、以下のいずれかの形式で環境変数への参照が含まれることがあります。

${var}

${var#pattern}

${var#pattern#replacement}

このように指定した値は、domsrvr 起動時に環境変数の値で置き換えられます。 #pattern オペランドはオプションです。 指定すると正規表現として扱われ、環境変数の値のどこに指定しても置き換えられます。 #replacement オペランドは、指定しないとデフォルトでは Null となります。 # は固定区切り文字であるため、パターンには # シンボルを含めることができません。 ほかのメッセージで派生属性を使用することについて制限はありません。 標準属性と同じように動作します。 生成元の属性のいずれかが変更されるたびに、派生属性のホットリンクが発生します。

value_type

属性の値のデータ型が以下のいずれかであると見なします。

STRING を指定すると、STRING に続けて整数でサイズを指定できます。 サイズを指定しないと、データベース内の値が使用されます。

UUID は、特定のデータベース レコードの一意の識別子として使用される 16 バイトのバイナリ データです。

SREL は、属性が別のオブジェクトを参照するようにするものです。 SREL を指定した場合は、obj2 _name を指定して属性が参照するオブジェクトを特定する必要があります。

srel_name は「名前付きの」SREL です。 「単純な」SREL と同じく、「名前付きの」ものも、単一の関係を表す一種の MAJIC OBJECT 属性であり、別のテーブル(ob2 _name)にある行を一意に識別します。 「単純な」SREL 属性は通常、別のテーブルの[ID]フィールドにマップされますが、「名前付きの」SREL は 2 つ以上の属性(name、name2 など)を参照先のテーブルの 2 つ以上の属性にマップして、参照先のテーブルの行を一意に識別します。

access_type

属性へのアクセスを定義します。 有効な値は以下のとおりです。

説明

CONST

変更は不可です。

PRIVATE

読み取り専用

PUBLIC

読み取り/書き込みアクセス(デフォルト)

WRITE_NEW

オブジェクトを作成し、そのオブジェクトを保存する前に限り、書き込むことができます

status_type

属性のステータスが以下のいずれかであることを示します。

DISPLAY_NAME string

「必要な属性がありません。」など、この属性に関するメッセージ内の属性名の代わりに使用される文字列を指定します。

ONステートメント

value_type が INTEGER、STRING、DATE、または SREL である場合に限り、以下のいずれかを使用します。

ON_NEW DEFAULT|SET value|NOW

オブジェクトを初めて作成するときに属性の値を設定することを示します。

説明

DEFAULT

現在の Null 値を value または NOW に変更します。

SET

現在の値を value または NOW に変更します。

value

属性のデータ型に応じて、数値または文字列値を指定します。

現在の日時

属性が DATE 型である場合に指定します。指定すると、属性は現在の日時に設定されます。

以下の例では、90 がオブジェクトの作成時にデフォルトとして設定される値です。

ON_NEW DEFAULT 90 ;
ON_CI DEFAULT|SET value|NOW

属性をデータベースにチェックインするときに属性の値を設定することを示します。 ON_NEWの各パラメータの説明を参照してください。

ON_DB_INIT DEFAULT|SET value|NOW

データベースから属性のインスタンスを生成するときに属性の値を設定することを示します。 ON_NEWの各パラメータの説明を参照してください。

この例では、データベースの Notify_Log_Header テーブルにあるフィールド(nlh_start など)に値が保存される名前付きの属性(start_date など)を定義しています。 フィールド名に続けて、各属性のデータ型を指定しています。 オプションの各パラメータでは、一部の属性へのアクセスを定義し、属性が必須であることを示し、一部の属性の値を現在の日時に設定するタイミングを指定しています。

たとえば、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 ;} ;

};