これは InterSystems FAQ サイトの記事です。
ユーザーが作成したクラス定義は、クラス定義クラスの中に格納されます。
クラス定義一覧をプログラムから取得する方法として、「クラス定義クラス」を利用することができます。
メモ:クラス定義クラスとは、%Dictionary パッケージに含まれるクラス全般のことをさします。
以下サンプルコードでは、%Dictionary.ClassDefinitionQuery クラスの Summary クエリを利用してクラス定義一覧を取得しています。
Class ISJ.Utils
{
ClassMethod ClassInfo()
{
#dim ex As %Exception.AbstractException
try {
set currentNS=$NAMESPACE
while (1) {
read "ネームスペースを指定してください : ",x
if x'="" quit
}
set $NAMESPACE=x // ネームスペースの移動
write !! // 見やすくするために2回改行
Set statement = ##class(%SQL.Statement).%New()
Do statement.%PrepareClassQuery("%Dictionary.ClassDefinitionQuery","Summary")
set rs = statement.%Execute()
while rs.%Next() {
set name=rs.%Get("Name")
if name["%" continue // %つきのクラスは飛ばす
if $extract(name,1,3)="csp" continue // csp.*は飛ばす
if $extract(name,1,3)="csr" continue // csr.*は飛ばす
write name,!
}
set $NAMESPACE=currentNS
}
catch ex {
write "エラー発生 : ",ex.DisplayString(),!
set $NAMESPACE=$get(currentNS)
}
}
}
実行例は以下の通りです。
クラスメソッドを実行すると、「ネームスペースを指定してください」と出るので、参照したいネームスペース名を指定してください。
USER>do ##class(ISJ.Utils).ClassInfo()
ネームスペースを指定してください : USER
CSPX.Dashboard.BarChart
CSPX.Dashboard.Chart
CSPX.Dashboard.ChartSeries
CSPX.Dashboard.FuelGauge
<省略>
INFORMATION.SCHEMA.VIEWTABLEUSAGE
ISJ.Utils
Test.JSONTest
Test.Person
Test.REST
Test.VSCode.REST
USER>