Uso del SDT: carga
Siguiendo el ejemplo del estructurado "Cliente", una vez creado el SDT
![](http://www.artech.com.uy/news-files/sdt2.jpg)
es posible definir variables basadas en él desde cualquier objeto GeneXus.
![](http://www.artech.com.uy/news-files/sdt6.jpg)
Esta variable la podemos cargar, por ejemplo, recorriendo la Base de Datos con el 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 del SDT: carga vía XML
También podemos cargar la información desde un XML, simplemente con el código
&Cliente.FromXml(&ClienteXml)
Una vez cargado el xml se obtiene los datos del cliente, accediendo a los ítems del SDT, de una forma más clara que tradicionalmente con el tipo de datos Xmlreader.
Similarmente se puede salvar el contenido de un SDT en un xml con:
&ClienteXML = &Cliente.ToXml()
El contenido del 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>
el mismo string puede ser generado con los tipos de datos XML, pero es bastante mas complejo, se precisan las siguientes líneas 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 del SDT: Proveer/consumir
Ahora estamos en condiciones de proveer/consumir en un Webservice los datos del cliente. Para proveer simplemente se debe definir un procedimiento con call protocol SOAP y retornar por parámetro una variable de tipo Cliente. Para consumir se debe utilizar el WSDL inspector y el mismo se encarga de crear los SDT necesarios para poder consumirlo.
También se podría pasar o recibir el cliente en cualquier otro objeto GeneXus, sin necesidad de acceder a la base de datos. En el pasado esto implicaba pasar n parámetros, algo como:
Call('WtrabCliente', &CliNom, &CLiDoc, &Clidir, &Clitel1, &CLitel2)
Ahora se traduce en:
Call('WtrabCliente', &cliente)
Especificación, generación, knowledge manager
El objeto SDT se especifica a través de los objetos que lo invocan (que tiene variables basadas en el estructurado). Es posible exportar/consolidar uno o más estructurados a través del knowledge manager.
En la próxima edición de las Noticias GeneXus comentaremos la definición de estructurados más complejos (colecciones), sus propiedades y más casos sobre Webservices.