クラスのコンパイル時に、定義済みのプロパティ、クエリ、またはインデックスごとに対応する複数のメソッドが自動的に生成されます。 これらのメソッドは非常に便利です。 この記事では、その一部について説明します。
ClassMethod PropertyGetStored(id)このメソッドは、データ型プロパティの場合は論理値を返し、オブジェクトプロパティの場合はIDを返します。 これはクラスのデータグローバルへの、ラップされたグローバル参照であり、特異なプロパティ値を取得する上でもっとも手早い方法です。 このメソッドは、保存されたプロパティでのみ利用できます。
Method PropertyGet()プロパティgetterである。 再定義可能です。
Method PropertySet(val) As %Statusプロパティsetterである。 再定義可能です。
Method PropertySetObjectId(id)このメソッドはIDでプロパティ値を設定するため、オブジェクトを開いてプロパティ値として設定する必要はありません。
Method PropertyGetObjectId()このメソッドは、プロパティ値のIDを返します。
Method PropertySetObject(oid)このメソッドは、OIDでプロパティ値を設定します。
Method PropertyGetObject()このメソッドは、プロパティ値のOIDを返します。
ClassMethod PropertyDisplayToLogical(val) ClassMethod PropertyLogicalToDisplay(val) ClassMethod PropertyOdbcToLogical(val) ClassMethod PropertyLogicalToOdbc(val) ClassMethod PropertyXSDToLogical(val) ClassMethod PropertyLogicalToXSD(val)
ClassMethod PropertyIsValid(val) As %Statusvalが有効なプロパティ値であるかどうかをチェックします。
ClassMethod PropertyNormalize(val)正規化された論理値を返します。 **注意事項** * 関係はプロパティであり、これらのメソッドで取得/設定できます。
ClassMethod IndexExists(val) As %Booleanこのvalを持つオブジェクトが存在するかどうかに応じて、1または0を返します。valはインデックス付きのプロパティの論理値です。
ClassMethod IndexExists(val, Output id) As %Boolean
このvalを持つオブジェクトが存在するかどうかに応じて、1または0を返します。valはインデックス付きのプロパティの論理値です。 また、オブジェクトIDがある場合は、第2引数として返します。
ClassMethod IndexDelete(val, concurrency = -1) As %Statusインデックスの値がvalのエントリを削除します。
ClassMethod IndexOpen(val, concurrency, sc As %Status)インデックスの値がvalの既存のオブジェクトを返します。 **注意事項:** a)インデックスは複数のプロパティに基づいている可能性があるため、メソッドシグネチャは、入力として複数の値を持つように変更されます。例として、次のインデックスを見てみましょう。
Index MyIndex On (Prop1, Prop2);この場合、IndexExistsメソッドには次のシグネチャがあります。
ClassMethod IndexExists(val1, val2) As %Booleanval1はProp1値に対応し、val2はProp2値に対応します。 その他のメソッドも同じロジックに従います。 b)Cachéは、IDフィールド(RowID)にインデックスを作成するIDKEYインデックスを生成します。 ユーザーが再定義することが可能で、複数のプロパティを含むこともできます。 たとえば、クラスにプロパティが定義されているかをチェックするには、次を実行します。
Write ##class(%Dictionary.PropertyDefinition).IDKEYExists(class, property)c)すべてのインデックスメソッドは、論理値をチェックします。 d) ドキュメント
ClassMethod QueryFunc(Arg1, Arg2) As %SQL.StatementResultこのメソッドは、クエリの反復処理に使用される%SQL.StatementResultを返します。 たとえば、SamplesネームスペースのSample.Personクラスには、1つのパラメーターを受け入れるByNameクエリがあり、 次のコードを使って、オブジェクトコンテキストから呼び出すことができます。
Set ResultSet=##class(Sample.Person).ByNameFunc("A") While ResultSet.%Next() { Write ResultSet.Name,! }また、[GitHubには、これらのメソッドを実演するデモクラス](https://github.com/eduard93/Utils/blob/master/Utils/GeneratedMethods.cls.xml)があります。