$PROPERTY(instance,propertyname,index1,index2,index3... )
説明
$PROPERTY は、指定されたクラスにあるインスタンスで、プロパティの値を取得または設定します。この関数は、ObjectScript プログラムが、あるクラスの既存のインスタンス内の任意のプロパティの値を選択することを許可します。最初の引数はクラスのインスタンスでなければならないため、実行時に算出されます。プロパティ名は、実行時に算出することもできれば、文字列リテラルとして指定しておくこともできます。文字列の内容は、クラスで宣言されたプロパティの名前と正確に一致する必要があります。プロパティ名は、大文字と小文字を区別します。
プロパティが多次元であるとして宣言されている場合は、プロパティ名の後の引数は、多次元配列へのインデックスとして扱われます。最大で 255 の引数をインデックスに使用できます。
$PROPERTY は割り当て式の左側にも記述できます。$PROPERTY が割り当て演算子の左にある場合は、値の割り当て先の場所を指定します。右側にある場合は計算で使用する値であることを示します。
instance が有効なメモリ内 OREF ではない場合、<INVALID OREF> エラーが発生します。propertyname が有効なプロパティではない場合、<PROPERTY DOES NOT EXIST> エラーが発生します。index1 を指定し、かつ propertyname が多次元でない場合、<OBJECT DISPATCH> エラーが発生します。
多次元として宣言されていないプロパティから多次元値を取得したり、多次元ではないプロパティに多次元値を設定したりしようとすると、<FUNCTION> エラーが発生します。
例
以下の例は 現在の NLS 言語プロパティ値を返します。
SET nlsoref=##class(%SYS.NLS.Locale).%New()
WRITE $PROPERTY(nlsoref,"Language")
以下は、$PROPERTY を関数として使用する例です。
SET TestName = "%Library.File"
SET ClassDef = ##class(%Library.ClassDefinition).%OpenId(TestName)
FOR i = "Name", "Super", "Persistent", "Final"
{
WRITE i, ": ", $PROPERTY(ClassDef, i), !
}
以下は、割り当て演算子の右と左の両方で $PROPERTY を使用する例です。
SET TestFile = ##class(%Library.File).%New("AFile")
WRITE "Initial file name: ",$PROPERTY(TestFile,"Name"),!
SET $PROPERTY(TestFile,"Name") =
$PROPERTY(TestFile,"Name") _ "Renamed"
WRITE "File name afterward: ",$PROPERTY(TestFile,"Name"),!
以下の例は、現在のオブジェクト (この場合は SQL シェル) からプロパティ値を返します。$PROPERTY は、最初の引数を省略して指定されています。
USER>DO $SYSTEM.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter <command>, 'q' to quit, '?' for help.
[SQL]USER>>set path="a,b,c"
path="a,b,c"
[SQL]USER>>! WRITE "The schema search path is ",$PROPERTY(,"Path")
The schema search path is "a,b,c"
[SQL]USER>>