Rubrica de perguntas frequentes da InterSystems
As definições de classe criadas pelos usuários são armazenadas em classes de definição de classe. Elas podem ser usadas para obter uma lista de definições de classes a partir de um programa.
Observação: as classes de definição de classe se referem a todas as classes contidas no pacote %Dictionary.
Na amostra de código abaixo, uma lista de definições de classe é obtida usando o método query Summary da classe %Dictionary.ClassDefinitionQuery.
Class ISJ.Utils
{
ClassMethod ClassInfo()
{
#dim ex As %Exception.AbstractException
try {
set currentNS=$NAMESPACE
while (1) {
read "Please specify namespace: ",x
if x'="" quit
}
set $NAMESPACE=x
write !!
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
if $extract(name,1,3)="csr" continue
write name,!
}
set $NAMESPACE=currentNS
}
catch ex {
write "Error occured: ",ex.DisplayString(),!
set $NAMESPACE=$get(currentNS)
}
}
}
Veja um exemplo de execução a seguir.
Ao executar o método da classe, será preciso especificar um namespace, então especifique o nome do namespace que você deseja referenciar.
USER>do##class(ISJ.Utils).ClassInfo()
Please specify namespace : USER
CSPX.Dashboard.BarChart
CSPX.Dashboard.Chart
CSPX.Dashboard.ChartSeries
CSPX.Dashboard.FuelGauge
<skip>
INFORMATION.SCHEMA.VIEWTABLEUSAGE
ISJ.Utils
Test.JSONTest
Test.Person
Test.REST
Test.VSCode.REST
USER>
Artigo relacionado: Como obter a lista de rotinas programaticamente