Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

リテラル・プロパティの定義と使用

リテラル・プロパティは、あらゆるオブジェクト・クラスで定義できます。リテラル・プロパティは、リテラル値を保持し、データ型クラスに基づいています。この章では、このようなプロパティを定義して使用する方法について説明します。

前述したように、トピックのいくつかは、他の種類のプロパティにも適用できます。

コレクションを使用した作業” の章、“ストリームを使用した作業” の章、“オブジェクト値プロパティの定義と使用” の章、“リレーションシップの定義と使用” の章および “プロパティ・メソッドの使用とオーバーライド” の章も参照してください。

リテラル・プロパティの定義

リテラル・プロパティをクラス定義に追加するには、以下のいずれかのような要素をクラスに追加します。

Property PropName as Classname;
Property PropName as Classname [ Keywords ] ;
Property PropName as Classname(PARAM1=value,PARAM2=value) [ Keywords ] ;
Property PropName as Classname(PARAM1=value,PARAM2=value) ;

以下はその説明です。

  • PropName は、プロパティの名前です。

  • Classname は、このプロパティが基づくクラスです。これを省略すると、Classname%StringOpens in a new tab であると見なされます。このプロパティをリテラル・プロパティとして定義するには、Classname を省略するか、Classname をデータ型クラスの名前として指定します。この章で後述する、“一般的なデータ型クラス” を参照してください。カスタムのデータ型クラスも使用できます。

  • Keywords はプロパティ・キーワードを表します。このドキュメントで前述した “コンパイラ・キーワード” を参照してください。この章の後続のセクションでは、追加のキーワードについて説明します。

  • PARAM1PARAM2 などはプロパティ・パラメータです。使用可能なパラメータは、プロパティで使用されるクラスによって異なります。この章の後続のセクションでは、最も一般的なプロパティ・パラメータのリストを示します。

プロパティ・パラメータを含める場合は、パラメータを括弧で囲み、プロパティ・キーワードの前に置きます。プロパティ・キーワードを含める場合、キーワードは角括弧で囲みます。

例えば、クラスでは %IntegerOpens in a new tab データ型クラスを使用して、Count プロパティを定義できます。

Property Count As %Integer;

%IntegerOpens in a new tab がデータ型クラスなので、Count はデータ型プロパティになります。

データ型パラメータを使用して、データ型プロパティの許容値を制限できます。例えば、タイプ %IntegerOpens in a new tab のプロパティには、MAXVAL パラメータを指定できます。

Property Count As %Integer(MAXVAL = 100);

データ型プロパティ値を空文字列に設定するには、以下の形式のコードを使用します。

 Set object.Property = $C(0)

すべてのプロパティに照合タイプがあります。これにより、値を並べる方法 (先頭文字の大文字化が有効かどうかなど) が決まります。文字列の既定の照合タイプは、SQLUPPER です。照合の詳細は、"InterSystems SQL の使用法" の “InterSystems IRIS® SQL の基礎” の章にある “データ照合” を参照してください。

プロパティの初期値式の定義

既定では、新しいオブジェクトを作成したときに、それぞれのプロパティは NULL になります。その代わりに、特定のプロパティの初期値として使用するように、ObjectScript 式を指定できます。式はオブジェクトが作成されるときに評価されます。

プロパティの初期値式を指定するには、プロパティ定義に InitialExpression キーワードを含めます。

Property PropName as Classname [ InitialExpression=expression ] ;

この expression は ObjectScript 式です (この式には、別の言語を使用できない点に注意してください)。詳細は、"クラス定義リファレンス" の "InitialExpression" を参照してください。

必須としてのプロパティの定義

このオプションは、永続クラスのプロパティにのみ適用されます。(このオプションはリテラル・プロパティだけでなく、任意の種類のプロパティに適用されます。)

既定では、新しいオブジェクトを保存するときに、InterSystems IRIS は、そのオブジェクトのプロパティが NULL 以外の値を持つことを必要としません。プロパティは、NULL 以外の値を必要とするように定義できます。そのためには、プロパティ定義に Required キーワードを含めます。

Property PropName as Classname [ Required ] ;

これにより、プロパティに NULL 値を持つオブジェクトを保存しようとすると、InterSystems IRIS は以下のエラーを発行するようになります。

ERROR #5659: Property required

Required キーワードは SQL アクセスを使用したこのクラスのデータの挿入または変更の方法にも影響を及ぼします。特に、レコードの挿入または更新をする際に値が欠落しているとエラーが発生します。

計算プロパティの定義

InterSystems IRIS では、計算プロパティを定義できます。計算プロパティの値は ObjectScript で計算されます (他のプロパティに基づく場合もあります)。一般的なフレーズの計算プロパティ (または計算フィールド) には、以下のバリエーションの両方が含まれます。

  • Always computed (常に計算) — このプロパティの値は、アクセスされるときに計算されます。インデックスを定義していない限り、データベースに格納されません。インデックスを定義していれば、そのインデックスが格納されます。

  • Triggered computed (トリガによって計算) — このプロパティの値は、トリガされたときに再計算されます (詳細は下記を参照)。

    プロパティが永続クラスで定義される場合、その値はデータベースに保存されます

どちらの場合も、オブジェクト・アクセスや SQL クエリを使用するかどうかに関係なく、再計算が実行されます。

プロパティ・キーワードは 5 つあります (SqlComputedSqlComputeCodeSqlComputeOnChangeTransientCalculated)。これらはプロパティ計算の是非と、計算方法を制御します。SqlComputeCode を指定する代わりに、PropertyComputation メソッドに計算コードを記述できます。Property は計算プロパティの名前です。詳細は、"計算プロパティ値" を参照してください。

以下のテーブルに可能な組合せをまとめます。

プロパティが計算されるかどうかを判断する方法
SqlComputed キーワード Calculated キーワード Transient キーワード プロパティの計算タイプ
True (さらに、SqlCompute Code キーワードまたは PropertyComputation メソッドを定義済み) True True Always computed (常に計算)
False
False True
False Trigger computed (トリガによって計算) (この場合は SqlComputeOnChange も指定可能)
False True True 計算されない
 
 
 
False
False True
False

計算プロパティを定義するには、以下の手順を実行します。

  • プロパティ定義に SqlComputed キーワードを含めます。(つまり、SqlComputed キーワードを true に指定します。)

  • プロパティ定義に SqlComputeCode キーワードを含めます。このキーワードの値には、SqlComputeCode に記載された規則に従い、プロパティの値を設定する ObjectScript コードの行を中括弧で囲んで指定します。例えば以下のようにします。

    Class Sample.Population Extends %Persistent
    {
    Property FirstName As %String;
    Property LastName As %String;
    Property FullName As %String [ SqlComputeCode = {set {*}={FirstName}_" "_{LastName}}, SqlComputed ];
    // ...
    
    }
    

    ObjectScript または Python などの他の言語を使用して PropertyComputation メソッドを指定し、プロパティの値を設定することもできます。例えば以下のようにします。

    Class Sample.Population Extends %Persistent
    {
    Property FirstName As %String;
    Property LastName As %String;
    Property FullName As %String [ SqlComputed ];
    // ...
    
    ClassMethod FullNameComputation(cols As %Library.PropertyHelper) As %String
    {
        return cols.getfield("FirstName")_" "_cols.getfield("LastName")
    }
    // ...
    }
    
    Class Sample.Population Extends %Persistent
    {
    Property FirstName As %String;
    Property LastName As %String;
    Property FullName As %String [ SqlComputed ];
    // ...
    
    ClassMethod FullNameComputation(cols As %Library.PropertyHelper) As %String [ Language = python ]
    {
        return cols.getfield("FirstName") + " " + cols.getfield("LastName")
    }
    // ...
    }
    
  • プロパティが常に計算されるようにするには、プロパティ定義で Calculated キーワードを true に指定します。

    また、プロパティがトリガによって計算されるようにする場合は、Calculated および Transient キーワードをプロパティ定義に含めません。(つまり、必ず両方のキーワードを false にします。)

  • プロパティがトリガによって計算される場合は、必要に応じて SqlComputeOnChange を指定します。

    このキーワードは 1 つ以上のプロパティを指定できます。これらのプロパティの値が変更されると、トリガされたプロパティは再計算されます。プロパティ名には、SqlFieldName で指定された名前 (この章で後述) 以外を使用する必要があります。以下に例を示します (意図的に改行を入れてあります)。

    Property messageId As %Integer [ 
    SqlComputeCode = { set {*}=$Select({Status}="":0,1:$List($List($Extract({Status},3,$Length({Status}))))) }, 
    SqlComputed, SqlComputeOnChange = Status ];
    

    その他の例を示します (意図的に改行を入れてあります)。

    Property Test2 As %String [ SqlComputeCode = { set {*}={Refprop1}_{Refprop2}}, SqlComputed, 
    SqlComputeOnChange = (Refprop1, Refprop2) ];
    

    SqlComputeOnChange の値には、値 %%INSERT または %%UPDATE も含めることができます。詳細は、"SqlComputeOnChange" を参照してください。

このフィールドのインデックス付けを予定している場合は、非決定的コードではなく、決定的コードOpens in a new tabを使用します。非決定的コードは、古いインデックス・キー値を確実に削除することができないため、InterSystems IRIS は非決定的コードの結果に対するインデックスを保持できません。(決定的コードは、同じ引数を渡された場合はいつでも同じ値を返します。例えば、$h を返すコードは、$h が関数の制御外で変更されているため、非決定的です。)

"クラス定義リファレンス" の "Calculated" キーワードも参照してください。この章で後述する、“計算プロパティの SQL プロジェクションの制御” も参照してください。

多次元プロパティの定義

多次元になるプロパティを定義できます。つまり、プロパティを多次元配列のように機能させるということです。これを行うには、プロパティ定義に MultiDimensional キーワードを含めます。

Property PropName as Classname [ MultiDimensional ] ;

このプロパティは、以下の点で他のプロパティとは異なります。

  • InterSystems IRIS は、このプロパティにプロパティ・メソッドを提供しません (このドキュメントで後述する “プロパティ・メソッドの使用とオーバーライド” を参照)。

  • オブジェクトを検証または保存するときに、無視されます。

  • アプリケーションにそれを明示的に保存するコードが含まれていない場合、ディスクに保存されません。

  • Java などのクライアントに公開することはできません。

  • SQL テーブルに格納できず、SQL テーブルでも公開されません。

多次元プロパティはあまり使用されませんが、オブジェクトの状態に関する情報を一時的に格納する場合に有用な方法を提供します。

この章で後述する、“多次元プロパティの値の指定” も参照してください。

一般的なデータ型クラス

InterSystems IRIS は多数のデータ型クラスを提供します。これらの中で、最も一般的に使用されるクラスを以下に示します。

一般的なデータ型クラス
クラス名 保持する値 メモ
%BigIntOpens in a new tab 64 ビットの整数 このクラスは %IntegerOpens in a new tab と類似しています (OdbcType および ClientDataType を除く)。
%BinaryOpens in a new tab バイナリ・データ 実際のバイナリ・データを Unicode (またはその他) に変換せずにクライアントへ送信、またはクライアントから受信します。
%BooleanOpens in a new tab ブーリアン値 可能な論理値は 0 (false) および 1 (true) です。
%CharOpens in a new tab 固定長の文字フィールド  
%CounterOpens in a new tab 整数。固有のカウンタとしての使用を目的としています タイプ・クラスが %CounterOpens in a new tab のプロパティには、新しいオブジェクトが保存されたとき、または SQL を使用して新しいレコードが挿入されたときに、値が割り当てられます (そのプロパティに値が指定されていない場合)。詳細は、"インターシステムズ・クラス・リファレンス" の "%CounterOpens in a new tab" を参照してください。
%CurrencyOpens in a new tab 通貨値 このクラスは、Sybase または SQL Server から InterSystems IRIS への移行のためにのみ定義されます。
%DateOpens in a new tab 日付 論理値は InterSystems IRIS $HOROLOG 形式になります。
%DateTimeOpens in a new tab 日付と時間 このクラスは、主に T-SQL の移行と datetime datetime/smalldatetime の動作を %TimeStampOpens in a new tab データ型にマップするために使用されます。この場合、DisplayToLogical() メソッドと OdbcToLogical() メソッドは、T-SQL アプリケーションでサポートされている不正確な datetime 値を処理するロジックを提供します。
%DecimalOpens in a new tab 固定小数点 論理値は小数点形式の数です。"サーバ側プログラミングの入門ガイド" の “インターシステムズ・アプリケーションでの数値の計算” を参照してください。
%DoubleOpens in a new tab IEEE 浮動小数点数 論理値は IEEE 浮動小数点数です。"サーバ側プログラミングの入門ガイド" の “インターシステムズ・アプリケーションでの数値の計算” を参照してください。
%EnumStringOpens in a new tab 文字列 %StringOpens in a new tab の特殊サブクラスです。これにより、possible 値の列挙セットを (DISPLAYLIST および VALUELIST を使用して) 定義できます。%StringOpens in a new tab とは異なり、このプロパティの表示値は、このタイプの列を ODBC 経由でクエリするときに使用されます。
%ExactStringOpens in a new tab 文字列 EXACT の既定の照合を使用する %StringOpens in a new tab のサブクラスです。
%IntegerOpens in a new tab 整数  
%ListOpens in a new tab $List 形式のデータ 論理値は $List 形式のデータです。
%ListOfBinaryOpens in a new tab $List 形式のデータ (各リスト項目はバイナリ・データ) 論理値は $List 形式のデータです。
%NameOpens in a new tab “姓と名” 形式の名前 %NameOpens in a new tab データ型は、%Storage.Persistent クラスと併用すると、特別なインデックス作成がサポートされます。詳細は、"インターシステムズ・クラス・リファレンス" の "%NameOpens in a new tab" を参照してください。
%NumericOpens in a new tab 固定小数点  
%PosixTimeOpens in a new tab 日付と時間の値 このデータ型の論理値は、64 ビット整数としてエンコードされた 1970 年 1 月 1 日 00:00:00 以降からの (または以前の) 秒数になります。%PosixTimeOpens in a new tab%TimeStampOpens in a new tab よりもディスク領域とメモリの使用量が少なく、%TimeStampOpens in a new tab よりもパフォーマンスが向上します。
%SmallIntOpens in a new tab 小さい整数値 このクラスは %IntegerOpens in a new tab と同じです (OdbcType を除く)。
%StatusOpens in a new tab エラー・ステータス・コード InterSystems IRIS クラス・ライブラリの多くのメソッドが、%StatusOpens in a new tab タイプの値を返します。これらの値の使用の詳細は、"インターシステムズ・クラス・リファレンス" の "%StatusOpens in a new tab" を参照してください。
%StringOpens in a new tab 文字列  
%TimeOpens in a new tab 時刻値 論理値は午前 0 時以降の経過秒数。
%TimeStampOpens in a new tab 日付と時間の値 %TimeStampOpens in a new tab データ型の論理値は、YYYY-MM-DD HH:MM:SS.nnnnnnnnn 形式で示されます。h が $H 形式の日付/時刻値の場合は、以下に示すように、$ZDATETIME を使用して %TimeStampOpens in a new tab プロパティ: $ZDATETIME(h,3) の有効な論理値を取得できます。

%PosixTimeOpens in a new tabの説明も参照してください。

%TinyIntOpens in a new tab 非常に小さい整数値 このクラスは %IntegerOpens in a new tab と同じです (OdbcType と、その最大値および最小値を除く)。

特殊な使用を目的とした追加のデータ型クラスが数多くあります。これらの型の大部分は、ここにリストしたクラスのサブクラスです。詳細は、インターシステムズ・クラス・リファレンスを参照してください。

各データ型クラスは、いくつかのキーワードを指定します。これらのキーワードにより、InterSystems SQL でのデータ型の使用方法や、クライアント・システムでのデータ型の投影方法を制御します。

  • SqlCategory — InterSystems SQL エンジンが処理を実行するときに、データ型に使用される SQL カテゴリを指定します。

  • OdbcType — データ型が ODBC 経由でアクセスされた場合、使用される ODBC タイプを指定します。

  • ClientDataType — データ型がクライアント・アプリケーション経由でアクセスされた場合、使用されるデータ型を指定します。

以上のことから、データ型を選択する際には、ニーズに応じた適切なクライアント・プロジェクションを持つクラスを選択する必要があります (該当する場合)。後続のサブセクションを利用して、適切なデータ型クラスを選択してください。適切なクラスがない場合、“データ型クラスの定義” の章で説明するように、独自のデータ型クラスを作成できます。

SqlCategory でグループ化されたデータ型クラス

データ型クラスについては、SqlCategory クラス・キーワードで SQL カテゴリを指定します。InterSystems SQL は、そのタイプのプロパティの値を処理する際に、このカテゴリを使用します。SqlCategory で管理される演算には、比較演算があります (より大きい、より少ない、等しいなど)。他の演算でも使用することがあります。この章でリストされているデータ型の SqlCategory 値を以下のテーブルに示します。

SqlCategory でグループ化されたデータ型クラス
InterSystems IRIS データ型
DATE %DateOpens in a new tab
DOUBLE %DoubleOpens in a new tab
INTEGER %BigIntOpens in a new tab%BooleanOpens in a new tab%CounterOpens in a new tab%IntegerOpens in a new tab%SmallIntOpens in a new tab%TinyIntOpens in a new tab
NAME %NameOpens in a new tab
NUMERIC %CurrencyOpens in a new tab%DecimalOpens in a new tab%NumericOpens in a new tab
POSIXTS %PosixTimeOpens in a new tab
STRING %BinaryOpens in a new tab%CharOpens in a new tab%EnumStringOpens in a new tab%ExactStringOpens in a new tab%ListOpens in a new tab%ListOfBinaryOpens in a new tab%StatusOpens in a new tab%StringOpens in a new tab
TIME %TimeOpens in a new tab
TIMESTAMP %DateTimeOpens in a new tab%TimeStampOpens in a new tab

どのようにリテラル・プロパティが SQL タイプに投影されるかについての詳細は、"InterSystems SQL リファレンス" の “データ型” を参照してください。

OdbcType でグループ化されたデータ型クラス

データ型クラスについては、InterSystems SQL ODBC インタフェースで使用される値と論理データ値を InterSystems IRIS が相互に変換する方法を OdbcType クラス・キーワードで制御します。この章でリストされているデータ型の OdbcType 値を以下のテーブルに示します。

OdbcType でグループ化されたデータ型クラス
InterSystems IRIS データ型
BIGINT %BigIntOpens in a new tab
BIT %BooleanOpens in a new tab
DATE %DateOpens in a new tab
DOUBLE %DoubleOpens in a new tab
INTEGER %CounterOpens in a new tab%IntegerOpens in a new tab
NUMERIC %CurrencyOpens in a new tab%DecimalOpens in a new tab%NumericOpens in a new tab
TIME %TimeOpens in a new tab
TIMESTAMP %DateTimeOpens in a new tab%PosixTimeOpens in a new tab%TimeStampOpens in a new tab
VARBINARY %BinaryOpens in a new tab
VARCHAR %CharOpens in a new tab%EnumStringOpens in a new tab%ExactStringOpens in a new tab%ListOpens in a new tab%ListOfBinaryOpens in a new tab%NameOpens in a new tab%StatusOpens in a new tab%StringOpens in a new tab

ClientDataType でグループ化されたデータ型クラス

データ型クラスについては、ClientDataType クラス・キーワードにより、InterSystems IRIS が (そのタイプの) プロパティを Java または Active X に投影する方法を制御します。この章でリストされているデータ型の ClientDataType 値を以下のテーブルに示します。

ClientDataType でグループ化されたデータ型クラス
使用対象
BIGINT %BigIntOpens in a new tab
BINARY %BinaryOpens in a new tab (または、データの Unicode 変換がないことを要求するすべてのプロパティ)
CURRENCY %CurrencyOpens in a new tab
DATE %DateOpens in a new tab
DOUBLE %DoubleOpens in a new tab
DECIMAL %DecimalOpens in a new tab
INTEGER %CounterOpens in a new tab%IntegerOpens in a new tab%SmallIntOpens in a new tab%TinyIntOpens in a new tab
LIST %ListOpens in a new tab%ListOfBinaryOpens in a new tab
NUMERIC %NumericOpens in a new tab
TIME %TimeOpens in a new tab
TIMESTAMP %DateTimeOpens in a new tab%PosixTimeOpens in a new tab%TimeStampOpens in a new tab
VARCHAR %CharOpens in a new tab%EnumStringOpens in a new tab%ExactStringOpens in a new tab%NameOpens in a new tab%StringOpens in a new tab

主要なプロパティ・パラメータ

プロパティによっては、その動作に作用するように、そのプロパティのパラメータを指定できます。例えば、パラメータでは、最大値と最小値、表示に使用する形式、照合、特定のシナリオに使用する区切り文字などを指定できます。パラメータは、インスペクタで指定することも、クラス定義に直接入力して指定することもできます。以下に例を示します。

Property MyProperty as MyType (MYPARAMETER="some value");

一部のパラメータは、あらゆるタイプのすべてのプロパティに使用できます。これらのパラメータは、以下のとおりです。

  • CALCSELECTIVITY — テーブル・チューニング機能でプロパティの selectivity を計算するかどうかを制御します。通常は、このパラメータを既定 (1) のままにしておくことが最良です。詳細は、"SQL 最適化ガイド" の “テーブルのチューニング” を参照してください。

  • CAPTION — クライアント・アプリケーションで、このプロパティに使用するキャプションです。

  • EXTERNALSQLNAMEリンク・テーブルで使用します。このパラメータでは、このプロパティのリンク先の外部テーブルにあるフィールドの名前を指定します。リンク・テーブル・ウィザードは、クラス生成時にこのパラメータをプロパティごとに指定します。リモート・データベースの SQL フィールドの名前は、さまざまな理由 (リモート・データベースのフィールド名が InterSystems IRIS の予約語であるなど) で InterSystems IRIS サーバ上のプロパティ名と異なる必要がある場合があります。リンク・テーブルの詳細は、"InterSystems IRIS SQL ゲートウェイの使用法" の “リンク・テーブル・ウィザード” を参照してください。

    プロパティ・パラメータ EXTERNALSQLNAME には、SQLFieldName コンパイラ・キーワードとは別の用途があり、それらの項目には別の値を保持できます。SQLFieldName では、InterSystems IRIS データベース内の投影された SQL フィールド名を指定します。また、EXTERNALSQLNAME はリモート・データベース内のフィールド名です。

  • EXTERNALSQLTYPEリンク・テーブルで使用します。このパラメータでは、このプロパティのリンク先の外部テーブルにあるフィールドの SQL タイプを指定します。リンク・テーブル・ウィザードは、クラス生成時にこのパラメータをプロパティごとに指定します。"EXTERNALSQLNAME" を参照してください。

  • JAVATYPE — このプロパティの投影先になる Java データ型です。

ほとんどのプロパティ・パラメータは、データ型クラスで定義されるため、クラス固有のものになります。次のセクションを参照してください。

クラス固有のプロパティ・パラメータ

前のセクションには、すべてのプロパティに使用できるパラメータがリストされています。その他の使用可能なパラメータは、プロパティで使用されるクラスによって異なります。この章でリストしたデータ型クラスがサポートするパラメータを以下のテーブルにリストします。パラメータは、3 つの列にグループ分けされています。1) 多くのデータ型クラスに存在するパラメータ、または頻繁に見かけるパラメータ。2) XML および SOAP のコンテキストでのみ意味を持つパラメータ。および 3) 少数のデータ型クラスにのみ出現するパラメータ、またはほとんど見かけないパラメータ。

システム・データ型クラスでサポートされるパラメータ
Data Type Class (データ型クラス) 一般的なパラメータ XML と SOAP のパラメータ あまり一般的でないパラメータ
%BigIntOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE  
%BinaryOpens in a new tab MAXLENMINLEN CANONICALXMLMTOMXSDTYPE  
%BooleanOpens in a new tab   XSDTYPE  
%CharOpens in a new tab COLLATIONCONTENTDISPLAYLISTESCAPEMAXLENMINLENPATTERNTRUNCATEVALUELIST XMLLISTPARAMETERXSDTYPE  
%CounterOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE  
%CurrencyOpens in a new tab* DISPLAYLISTFORMATMAXVALMINVALSCALEVALUELIST XSDTYPE  
%DateOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE  
%DateTimeOpens in a new tab DISPLAYLISTMAXVALMINVALVALUELIST XMLDEFAULTVALUEXMLTIMEZONEXSDTYPE DATEFORMAT
%DecimalOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALSCALEVALUELIST XSDTYPE  
%DoubleOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALSCALEVALUELIST XSDTYPE  
%EnumStringOpens in a new tab COLLATIONCONTENTDISPLAYLISTESCAPEMAXLENMINLENPATTERNTRUNCATEVALUELIST XSDTYPE  
%ExactStringOpens in a new tab COLLATIONCONTENTDISPLAYLISTESCAPEMAXLENMINLENPATTERNTRUNCATEVALUELIST XSDLISTPARAMETERXSDTYPE  
%IntegerOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE STRICT
%ListOpens in a new tab ODBCDELIMITER XSDTYPE  
%ListOfBinaryOpens in a new tab ODBCDELIMITER XSDTYPE  
%NameOpens in a new tab COLLATIONMAXLEN XSDTYPE INDEXSUBSCRIPTS
%NumericOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALSCALEVALUELIST XSDTYPE  
%PosixTimeOpens in a new tab MAXVALMINVAL XMLDEFAULTVALUEXMLTIMEZONEXSDTYPE DATEFORMATINDEXNULLMARKER
%SmallIntOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE  
%StatusOpens in a new tab   XSDTYPE  
%StringOpens in a new tab COLLATIONCONTENTDISPLAYLISTESCAPEMAXLENMINLENPATTERNTRUNCATEVALUELIST XMLLISTPARAMETERXSDTYPE  
%TimeOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XMLTIMEZONEXSDTYPE PRECISION
%TimeStampOpens in a new tab DISPLAYLISTMAXVALMINVALVALUELIST XMLDEFAULTVALUEXMLTIMEZONEXSDTYPE  
%TinyIntOpens in a new tab DISPLAYLISTFORMATMAXVALMINVALVALUELIST XSDTYPE  

* この特殊な目的のクラスは、InterSystems IRIS への移行にのみ使用します。

Note:

制約という用語は、プロパティ値に制限を適用するキーワードを指します。例えば、MAXVALMINVALDISPLAYLISTVALUELIST、および PATTERN は、すべて制約です。

一般的なパラメータ

前述のテーブルの一般的なパラメータを以下に示します。

  • COLLATION — プロパティ値がインデックスに変換される方法を指定します。

    照合の許容値については、"InterSystems SQL の使用法" の “SQL 入門” を参照してください。

  • CONTENT — 文字列が XML または HTML に変換される可能性があるコンテキストで使用される場合、その文字列のコンテンツを指定します。"STRING" (既定)、"ESCAPE"、または "MIXED" を指定します。

    詳細は、"オブジェクトの XML への投影" を参照してください。

  • DISPLAYLIST — 列挙 (複数選択) プロパティのために、VALUELIST パラメータと併用します。詳細は、“列挙プロパティの定義” を参照してください。

  • ESCAPE — 文字列が特定のコンテキストで使用される場合に、エスケープを行うタイプを指定します。"XML" (既定) または "HTML" のいずれかを使用します。

    既定では、小なり記号、大なり記号、およびアンド記号がそれぞれ <>、および & に変換されます。"XML" の詳細は、"オブジェクトの XML への投影" を参照してください。

  • FORMAT — 表示値の形式を指定します。FORMAT の値については、$FNUMBER 関数の format 引数で指定した形式文字列を使用します。タイプ %NumericOpens in a new tab または %DecimalOpens in a new tab のプロパティの場合は、オプション "AUTO" も使用できます。このオプションは末尾のゼロを抑制します。

  • MAXLEN — 文字列の最大文字数を指定します。既定は 50 です。他の多くのパラメータと同様に、このパラメータは、InterSystems IRIS によるデータの検証方法に影響します。これは、フィールドがどのように xDBC クライアントに投影されるかにも影響することに注意してください。

  • MAXVAL — データ型の論理値の最大値を指定します。

  • MINLEN — 文字列の最小文字数を指定します。

  • MINVAL — データ型の論理値の最小値を指定します。

  • ODBCDELIMITER — ODBC を使用して投影されるとき、%List 値の構成に使用する区切り文字を指定します。

  • PATTERN — 文字列がマッチするパターンを指定します。PATTERN の値は、有効な InterSystems IRIS パターン・マッチング式である必要があります。パターン・マッチングの概要については、"ObjectScript の使用法" の “演算子” の章の “パターン・マッチング” のセクションを参照してください。

  • SCALE — 小数点以下の桁数を指定します。

  • TRUNCATE — 文字列を MAXLEN の長さまで切り捨てるかどうかを指定します。1 は True で、0 は False です。このパラメータは、Normalize() メソッドと IsValid() メソッドによって使用されますが、xDBC クライアントには使用されません。

  • VALUELIST — 列挙 (複数選択) プロパティに使用します。詳細は、“列挙プロパティの定義” を参照してください。

XML と SOAP のパラメータ

“XML と SOAP のパラメータ” の列にあるパラメータの詳細は、"オブジェクトの XML への投影" を参照してください。"Web サービスおよび Web クライアントの作成" も参照してください。

あまり一般的でないパラメータ

前述のテーブルの、あまり一般的でないパラメータを以下に示します。

  • STRICT (%IntegerOpens in a new tab の場合) には、整数の値が必要になります。既定では、プロパティが %IntegerOpens in a new tab 型の場合に、整数以外の数値を指定すると、InterSystems IRIS はその値を整数に変換します。プロパティに対して STRICT が 1 の場合には、InterSystems IRIS は値を変換せず、検証は失敗します。

  • DATEFORMAT.

    • %DateTimeOpens in a new tab の場合は、表示または ODBC 入力値に数値の日付形式が指定されているときに、このパラメータで日付部分の順序を指定します。有効なパラメータは mdy、dmy、ymd、ydm、myd、および dym です。 既定の DATEFORMAT は mdy です。

    • %PosixTimeOpens in a new tab の場合は、このパラメータで表示値の形式を指定します。許容される値については、$zdatetime 関数と $zdatetimeh 関数の fformat パラメータを参照してください。

  • PRECISION (%TimeOpens in a new tab の場合) では、保持する小数点以下の桁数を指定します。値が "" (既定) の場合、システムはソース値で入力された小数点以下桁数を保持します。値が 0 の場合、最も近い秒に丸められます。

  • INDEXNULLMARKER (%PosixTimeOpens in a new tab の場合のみ) では、%PosixTimeOpens in a new tab 型プロパティのインデックスの添え字に使用する、既定の NULL 指標値を宣言します。既定値は –1E19 です。"SQL 最適化ガイドの" の “インデックスの定義と構築” の章にある “NULL のインデックス付け” を参照してください。

  • INDEXSUBSCRIPTS (%NameOpens in a new tab の場合) では、プロパティ値で区切り文字としてコンマを使用して、インデックス内のプロパティで使用される添え字の数を指定します。この数は、%Storage.Persistent クラスが使用します。2 の値は、プロパティ値の最初のコンマ部分は最初の添え字に、プロパティ値の 2 番目のコンマ部分は 2 番目の添え字に保存されることを示します。

列挙プロパティの定義

数多くのプロパティが、VALUELIST パラメータと DISPLAYLIST パラメータをサポートしています。これらを使用して、列挙プロパティを定義します。

プロパティに有効な値のリストを指定するには、VALUELIST パラメータを使用します。VALUELIST のフォームは、区切り文字で区切った論理値のリストで、区切り文字が最初の文字になります。以下はその例です。

Property Color As %String(VALUELIST = ",red,green,blue");

この例で VALUELIST は、有効な値が “red”、“green”、“blue” であることを指定し、区切り文字としてコンマを使用します。同様に、

Property Color As %String(VALUELIST = " red green blue");

上の文は同じリストを指定しますが、区切り文字としてスペースを使用しています。

プロパティはリストの値に限定され、データ型の妥当性検証コードは、その値がリストにあるかどうかだけを調べます。リストがなければ、値は特に限定されません。

DISPLAYLIST は、リストがある場合、プロパティの LogicalToDisplay() メソッドで返される対応する表示値を表す追加リストです。

表示値を取得する方法の例は、この章で後述する、“プロパティ・メソッドの使用法” のセクションを参照してください。

リテラル・プロパティの値の指定

リテラル・プロパティに値を指定するには、以下に示すように SET コマンド、OREF、およびドット構文を使用します。

 SET oref.MyProp=value

oref は OREF、MyProp は対応するオブジェクトのプロパティです。value は、リテラル値に評価される ObjectScript 式です。以下に例を示します。

 SET patient.LastName="Muggles"
 SET patient.HomeAddress.City="Carver"
 SET mrn=##class(MyApp.MyClass).GetNewMRN()
 set patient.MRN=mrn

リテラル値は、プロパティ・タイプに対して有効な論理値にする必要があります。例えば、%BooleanOpens in a new tab に基づくプロパティには、1 または 0 を使用します。もう 1 つ例を挙げると、列挙プロパティの場合、値は、VALUELIST パラメータで指定された項目のいずれかにする必要があります。

多次元プロパティの値の指定

多次元プロパティについては、プロパティの添え字に応じて値を指定できます。以下に例を示します。

 set oref.MyStateProp("temp1")=value1
 set oref.MyStateProp("temp2")=value2
 set oref.MyStateProp("temp3")=value3

多次元プロパティは、オブジェクトで使用するための一時的な情報を保持する際に役立ちます。このようなプロパティはディスクに保存されません。

プロパティ・メソッドの使用法

それぞれのプロパティは、生成されたクラス・メソッドのセットをクラスに追加します。これらのメソッドには、propnameIsValid()propnameLogicalToDisplay()propnameDisplayToLogical()propnameLogicalToODBC()propnameODBCToLogical() などが含まれます。propname はプロパティの名前です。これらのメソッドの一部は、%Property クラスから継承され、その他のメソッドはプロパティが基づくデータ型クラスから継承されます。メソッドの詳細とリストは、“データ型クラスの定義” の章を参照してください。

InterSystems IRIS はこれらのメソッドを内部的に使用し、ユーザもこれらを直接呼び出すことができます。どの場合も、引数はプロパティ値です。例えば、Sample.Person に論理値 MF (および表示値 MaleFemale) を持つ Gender という名前のプロパティがあるとします。次のように、指定されたレコードに対してこのプロパティの論理値と表示値を表示できます。

MYNAMESPACE>set p=##class(Sample.Person).%OpenId(1)
 
MYNAMESPACE>w p.Gender
M
MYNAMESPACE>w ##class(Sample.Person).GenderLogicalToDisplay(p.Gender)
Male

リテラル・プロパティの SQL プロジェクションの制御

このドキュメントで前述したように、永続クラスは SQL テーブルとして投影されます。そのクラスでは、すべてのプロパティが SQL に投影されます。ただし、以下の例外を除きます。

このセクションでは、リテラル・プロパティについて詳しく説明します。

フィールド名の指定

既定では、プロパティ (SQL に投影される場合) は、そのプロパティと同じ名前の SQL フィールドとして投影されます。別のフィールド名を指定する場合は、プロパティ・キーワード SqlFieldName を使用します (プロパティ名が SQL 予約語の場合にも、このキーワードを使用できます)。例えば、"Select" という名前の %StringOpens in a new tab プロパティがある場合、投影された名前を以下の構文で定義できます。

Property Select As %String [ SqlFieldName = SelectField ];
Note:

SQL 予約語であるプロパティ名を使用する場合、SQL 文で使用するときに二重引用符を付けることで、対応するフィールド名をエスケープすることもできます。以下に例を示します。

SELECT ID, Name, "Select" FROM SQLUser.Person

列番号の指定

システムでは、各フィールドに一意の列番号が自動的に割り当てられます。列番号の割り当てを制御するには、以下の例で示すように、プロパティ・キーワード SqlColumnNumber を指定します。

Property RGBValue As %String [ SqlColumnNumber = 3 ];

SqlColumnNumber に指定する値は 1 より大きい整数にする必要があります。SqlColumnNumber キーワードを引数なしに使用すると、InterSystems IRIS はテーブルで保持されていなくて固定位置を持たない列番号を割り当てます。

指定された SQL 列番号を持つプロパティがある場合、InterSystems IRIS は他のプロパティに列番号を割り当てます。割り当てられた列番号の開始値は、指定された SQL 列番号に続く最高値です。

SqlColumnNumber キーワードの値は継承されます。

データ型クラスとプロパティ・パラメータの影響

特定のプロパティで使用されるデータ型クラスは、SQL プロジェクションに影響を与えます。具体的には、データ型の SQL カテゴリ (SqlCategory キーワードで定義) により、プロパティを投影する方法を制御します。該当する場合は、プロパティ・パラメータも影響を与えます。

例えば、以下のようなプロパティ定義を考えてみます。

Property Name As %String(MAXLEN = 30);

このプロパティは、最大長が 30 文字の文字列フィールドとして投影されます。

計算プロパティの SQL プロジェクションの制御

InterSystems IRIS では、ObjectScript または Python を使用して計算した値を持つ計算プロパティを定義できます。他のプロパティに基づいて、このプロパティを定義することもあります。詳細は、この章で前述した “計算プロパティの定義” を参照してください。以下のテーブルでは、可能な組合せをまとめて、どのバリエーションが SQL に投影されるかを示しています。

SqlComputed キーワード Calculated キーワード Transient キーワード プロパティの計算タイプと投影
True (さらに、SqlCompute Code キーワードまたは PropertyComputation メソッドを定義済み) True True プロパティは常に計算され、SQL プロジェクションがあります*
False
False True
False プロパティはトリガによって計算され、SQL プロジェクションがあります*
False True True プロパティは計算されず、SQL プロジェクションはありません
False
True
False
False True
False
True
False プロパティは計算されませんが、SQL 投影はあります (既定)*

* このテーブルは、SQL プロジェクションを禁止するような別のキーワードがプロパティに使用されていないことを想定しています。例えば、プロパティはプライベートでないことを想定しています。

FeedbackOpens in a new tab