
XML Data Binding
#1
Escrito 14 enero 2010 - 10:53
acabo de registrarme y espero ayudar y resolver la inquietud que tengo en este momento.
Estoy trabajando en delphi 2005, y por medio de un tutorial que existe en en este sitio, logre crear servicios web y todo esta perfecto...Ahora estoy con la parte de cliente para cosumirlos y especificamente en la parte de crear las clases que mapean los archivos XML y utilizo el XML data Binding. Para esta parte crear el archivo xml de la siguiente manera.
<AfilList>
<NUMERO_CARNET>10000</NUMERO_CARNET>
<NUM_ID_PAC>54545554</NUM_ID_PAC>
<COD_TID_PAC>CC</COD_TID_PAC>
<NOMBRE1>JUAN</NOMBRE1>
<NOMBRE2>ANDRES</NOMBRE2>
<APELLIDO1>CARMONA</APELLIDO1>
<APELLIDO2 />
<SEX_PAC>M</SEX_PAC>
<FECHA_NACIMIENTO>01/01/2000</FECHA_NACIMIENTO>
</AfilList>
y se crea sin problema, pero al ver las funciones creadas, no encuentro las de agregar, localizar etc, solo estan las de cargar el archivo y las propiedades de acceso a los datos.
En otro tutorial donde se presenta algo parecido aparece lo siguiente
IXMLClientesType = interface(IXMLNodeCollection) ['{A21F5A80-EBA7-48F5-BFE1-EB9F390DFBBD}']
{ Property Accessors }
function Get_Cliente(Index: Integer): IXMLClienteType;
{ Methods & Properties }
function Add: IXMLClienteType;
function Insert(const Index: Integer): IXMLClienteType;
property Cliente[Index: Integer]: IXMLClienteType read Get_Cliente; default; end;
En mi archivo no se crea la interface IXMLNodeCollection y por lo que veo esos son los metodos para acceder a cada regsitro por asi decirlo del archivo xml.
No se en que estoy fallando o tendria que crear manualmente esos metodos en mi arcguvo. Gracias
#2
Escrito 14 enero 2010 - 11:02
Saludos...
acabo de registrarme y espero ayudar y resolver la inquietud que tengo en este momento.
Estoy trabajando en delphi 2005, y por medio de un tutorial que existe en en este sitio, logre crear servicios web y todo esta perfecto...Ahora estoy con la parte de cliente para cosumirlos y especificamente en la parte de crear las clases que mapean los archivos XML y utilizo el XML data Binding. Para esta parte crear el archivo xml de la siguiente manera.
<AfilList>
<NUMERO_CARNET>10000</NUMERO_CARNET>
<NUM_ID_PAC>54545554</NUM_ID_PAC>
<COD_TID_PAC>CC</COD_TID_PAC>
<NOMBRE1>JUAN</NOMBRE1>
<NOMBRE2>ANDRES</NOMBRE2>
<APELLIDO1>CARMONA</APELLIDO1>
<APELLIDO2 />
<SEX_PAC>M</SEX_PAC>
<FECHA_NACIMIENTO>01/01/2000</FECHA_NACIMIENTO>
</AfilList>
y se crea sin problema, pero al ver las funciones creadas, no encuentro las de agregar, localizar etc, solo estan las de cargar el archivo y las propiedades de acceso a los datos.
En otro tutorial donde se presenta algo parecido aparece lo siguiente
IXMLClientesType = interface(IXMLNodeCollection) ['{A21F5A80-EBA7-48F5-BFE1-EB9F390DFBBD}']
{ Property Accessors }
function Get_Cliente(Index: Integer): IXMLClienteType;
{ Methods & Properties }
function Add: IXMLClienteType;
function Insert(const Index: Integer): IXMLClienteType;
property Cliente[Index: Integer]: IXMLClienteType read Get_Cliente; default; end;
En mi archivo no se crea la interface IXMLNodeCollection y por lo que veo esos son los metodos para acceder a cada regsitro por asi decirlo del archivo xml.
No se en que estoy fallando o tendria que crear manualmente esos metodos en mi arcguvo. Gracias
Saludos amigo,
Bienvenido a esta tu casa donde encontrarás mas que colegas amigos con quienes podrás compartir no solo conocimientos sino divertidos momentos.
referente a tu duda te comento que para construir el cliente que consuma los métodos del webservice no necesitas usar del XmlBinding a menos claro que estes devolviendo xml en bruto.
Para consumir un web service deberás hacer lo siguiente:
- en delphi seleccionas file -> new -> other
- en la ventana que aparece seleccionas la pestaña webservices
- una vez seleccionada la pestaña seleccionas el item WSDL importer
- se abrrirá una nueva ventana donde deberas colocar la ruta en que se encuentra la definición WSDL de tu webservice (delphi general algo así: http:url/cgi-bin/programa.exe/WSDL/interfaz
-presionas siguiente apareciendo una ventana con la unidad conteniendo los métodos proporcionados por el webservice
- presionas finish y se te genera una unidad que puedes incluir en tus aplicaciones para instanciar los objetos necesarios para la comunicación con tu webservice.
si podemos ayudar en algo más amigo no dudes en preguntar
#3
Escrito 14 enero 2010 - 11:08
Bienvenido a DelphiAccess, efectivamente y como dice poliburro los XML son archivos que se generan con la información que te "regresa" el WebService, para lo que buscas debebs primero crear las funciones en tu webservice y después realizar lo que te ha comentado nuestro buen amigo poli.
Salud OS
#4
Escrito 14 enero 2010 - 11:10
No se en que estoy fallando o tendria que crear manualmente esos metodos en mi arcguvo.
Pues realmente te "brincaste" toda la parte emocionante de crear un WebService. egostar hizo un tutorial EXCELSO que trata el tema a suficiente profundidad como para que lo ejecutes sin problema; yo le hice algunas correcciones que le dan mejor funcionalidad.
Saludos, no evites la emoción.
#5
Escrito 14 enero 2010 - 11:43
No he leído el tutorial 100 por 100, pero si puedo decirte que los XML también pueden ser cargados con el TClientDataSet y darles el tratamiento de una tabla común.
#6
Escrito 14 enero 2010 - 03:22
Ya importe la Wsdl, y cree los archivos XML para luego usar el XML data Binding, tal cual lo indique en la creacion de este hilo y se generaron sim problema. Ahora en la aplicacion cliente uso las clases que se crearon y la que se creo al importar la wsdl, y se genera un codigo para el evento show del formulario...en este punto es donde tengo el problema...al seguir los pasos del documento dice
with Lista do begin for I := 0 Cliente_id.Count - 1 do begin
del codigo anterior y con mis datos me marca error en Count...y de aqui no he podido pasar....por eso comente que en otros ejemplos donde se usa el Xml Data Binding se crea la interfaz IXMLNodeCollection que tiene unas funciones para adicionar, localizar por medio de indices, y eliminar....interfaz que no se me genero cuando realice el mismo proceso con mis datos... eso les cuento no se si necesiten mas datos...y muchas gracias por todo lo que me han explicado siempre he usado la parte de importar WSDL, pero es la primera vez que creo el servicio WEB desde delphi y uso archivos XML. La idea es hacer algo parecido a lo del ejemplo...usa el servicio web para conectarse a la base de datos obtenerlos.-...pasarlos a archivos XML y luego leerlos y presentarlos en al interfaz del cliente.
De nuevo muchas gracioas a todos por su valiosa ayuda.
#7
Escrito 14 enero 2010 - 03:32
Algo como esto:
XMLString := GetIwsEventos.GetEventos(Datos); Datos.Free; CreaXML('Eventos.xml',XMLString); Eventos := LoadEventos('Eventos.xml'); with ClientDataSet1 do begin CreateDataSet; Open; with Eventos do begin if Evento_id.Count > 0 then begin for I := 0 to Evento_Id.Count - 1 do begin Append; //Agregas los campos end; Post; end else begin ShowMessage('No hay registros con las fechas especificadas'); end; end; Close; end;
Con eso ya tienes un DataSet listo para trabajar con los datos.
Salud OS