Uso
do SDT: carga
Seguindo
o exemplo do estruturado ?Cliente?, uma vez criado o SDT
é possível
definir variáveis baseadas nele desde qualquer objeto GeneXus.
Podemos
instalar esta variável, por exemplo, recorrendo a Base de Datos com o código:
For Each
Where CliID = &CliId
&Cliente.Nombre
= Clinom
&Cliente.Identidad =
CliDoc
&Cliente.Nacionalidad=
&Nacionalidad
&CLiente.Direccion.Empresa = Clidir
&Cliente.Telefonos.Add(CliTel)
Endfor
Uso
do SDT: carga via XML
Também
podemos instalar a informação desde um XML, simplesmente com o código
&Cliente.FromXml(&ClienteXml)
Uma vez
instalado o xml se obtém os dados do cliente, acessando os ítens do SDT, de uma
forma mais clara que tradicionalmente com o tipo de dados
Xmlreader.
Similarmente
pode-se salvar o conteúdo de um SDT em um xml com:
&ClienteXML
=
&Cliente.ToXml()
O
conteúdo do string &CLienteXml será:
Cliente xmlns = "name_Kb"
Nombre
CliNom /Nombre
Identidad ... /Identidad
Nacionalidad ... /Nacionalidad
Direccion
Empresa
CliDir /Empresa
Personal CliDir2 /Personal
/Direccion
Telefonos
item CliTel1 /item
item CliTel2 /item
/Telefonos
o mesmo
string pode ser gerado com os tipos de dados XML, mas é bastante mais complexo,
precisam-se as seguintes linhas de código:
&FileXml.opentoString()
&filexml.WriteNSStartElement('Cliente', , "name_kb")
&filexml.WriteElement('Nombre', CliNom )
&filexml.WriteElement('Identidad',
& )
&filexml.WriteElement('Nacionalidad', & )
&filexml.WriteStartElement('Dirección')
&filexml.WriteElement('Empresa',
CliDir )
&filexml.WriteElement('Personal',
CliDir2 )
&filexml.WriteEndElement()
&filexml.WriteStartElement('Telefonos')
&filexml.WriteElement('Item',
CliTel1 )
&filexml.WriteElement('Item',
CliTel2 )
&filexml.WriteEndElement()
&filexml.WriteEndElement()
&ClienteXML =
filexml.resultingString()
&filexml.Close()
Uso
do SDT: Proveer/consumir
Agora
estamos em condições de fornecer/consumir em um Webservice os dados do cliente.
Para fornecer simplesmente deve-se definir um procedimento con call protocol
SOAP e retornar por parâmetro uma variável do tipo Cliente. Para consumir
deve-se utilizar o WSDL inspetor e ele mesmo se encarrega de criar os SDT
necessários para poder consumi-lo.
Também
se poderia passar ou receber o cliente em qualquer outro objeto GeneXus , sem
necessidade de acessar a base de dados. Antigamente isto implicava passar n
parâmetros, algo como:
Call('WtrabCliente',
&CliNom, &CLiDoc, &Clidir, &Clitel1, &CLitel2)
Agora se
traduz em:
Call('WtrabCliente',
&cliente)
Especificação,
geração, knowledge manager
O objeto
SDT se especifica através dos objetos que o invocam (que tem variáveis baseadas
no estruturado). É possível exportar/consolidar um ou mais estruturados através
do knowledge manager.
Na
próxima edição das Notícias GeneXus comentaremos a definição de estruturados
mais complexos (coleções) suas propriedades e mais casos sobre
Webservices.