記事
· 2021年6月4日 3m read

ユーザーが作成したクラス一覧をプログラムで取得する方法

これは 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>

 


関連記事:ルーチン一覧をプログラミングで取得する方法

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください