Uso del SDT: carga
Siguiendo el ejemplo del estructurado "Cliente", una vez creado el SDT
es posible definir variables basadas en él desde cualquier objeto GeneXus.
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.