Artigo
YURI MARX GOMES · Jan. 16, 2021 3min de leitura

Criando e listando definições de XData

Oi Comunidade InterSystems!

A linguagem ObjectScript do InterSystems IRIS possui a capacidade de estender classes utilizando um recurso muito interessante chamado XData.

Trata-se de uma seção em sua classe que pode ser utilizada para criar definições personalizadas a serem utilizadas dentro da própria classe e também externamente.

Para criar uma ou mais definições de XData para sua classe é muito fácil, veja o exemplo:

Class dc.Sample.Person Extends (%Persistent, %JSON.Adaptor, %Populate)
{
 
Property Name As %VarString;
 
Property Title As %String;
 
Property Company As %String;
 
Property Phone As %VarString;
 
Property DOB As %Date(MAXVAL = "$piece($horolog, "","", 1)");
 
/// Index for property DOB
Index DOBIndex On DOB;
 
ClassMethod AddTestData(amount As %Integer = 10)
{
    d ..Populate(amount)
}
 
/// Documentation for Person
XData PersonDocHtml [ MimeType = text/html ]
{
<h1>This is the Person class</h1>
}
 
XData PersonDocMarkdown [ MimeType = text/markdown ]
{
<h1>This is the Person class</h1>
}

Veja que logo após as definições dos métodos, basta adicionar uma ou mais seções XData com três seções: XData NomeSecaoXData [MimeType = TipodeMimeType]. O conteúdo então é colocado entre {}.

Todos os elementos XData são armazenados na classe persistente %Dictionary.XDataDefinition. Isto significa que é possível recuperar as definições utilizando linguagem SQL, internamente ou externamente, veja o exemplo:

ClassMethod Generate()
{
    Set qry = "SELECT * FROM %Dictionary.XDataDefinition WHERE MimeType IN ('text/markdown','text/html')"
    Set stm = ##class(%SQL.Statement).%New()
    Set qStatus = stm.%Prepare(qry)
    If qStatus'=1 {Write "%Prepare failed:" Do $System.Status.DisplayError(qStatus) Quit}
    Set rset = stm.%Execute()
    While rset.%Next() {
        Write "Row count ",rset.%ROWCOUNT,!
        Write rset.parent
        Write ": ",rset.Description,!!
    }
    Write !,"End of data"
    Write !,"Total row count=",rset.%ROWCOUNT
}
 
}

Neste exemplo, todos os elementos XData com Mime Type markdown e html são recuperados e então tem o nome da classe onde se encontra o XData e a descrição do XData. Caso queira recuperar conteúdo, basta obter a propriedade Data.

Trata-se de uma funcionalidade muito interessante, pois podemos catalogar a documentação de todas as classes de uma aplicação e ter o fácil acesso a elas. Fantástico!

 

 

20
1 0 0 15