Ir al contenido


Foto

XML Data Binding


  • Por favor identifícate para responder
6 respuestas en este tema

#1 vicandp

vicandp

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 14 enero 2010 - 10:53

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
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

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



  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 enero 2010 - 11:08

Hola, vicandp

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
  • 0

#4 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

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.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 14 enero 2010 - 11:43

Saludos.

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
  • 0

#6 vicandp

vicandp

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 14 enero 2010 - 03:22

Muchas gracias por responder....estoy siguiendo el documento que esta en http://egostar.delph...ag/web-service/ y voy en la parte del cliente donde se crean los clases para el manejo de archivos xml que es el capitulo 4...el servicio Web ya lo tengo registrato en mi IIS, y estoy en la parte del cliente.

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



delphi
  1.   with Lista do    begin
  2.         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.


  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 enero 2010 - 03:32

Para lo que requieres es necesario el uso de ClientDataSet's como lo mencionó nuestro amigo Rolphy

Algo como esto:



delphi
  1.     XMLString := GetIwsEventos.GetEventos(Datos);
  2.     Datos.Free;
  3.     CreaXML('Eventos.xml',XMLString);
  4.     Eventos := LoadEventos('Eventos.xml');
  5.     with ClientDataSet1 do begin
  6.       CreateDataSet;
  7.       Open;
  8.       with Eventos do
  9.       begin
  10.         if Evento_id.Count > 0 then
  11.         begin
  12.           for I := 0 to Evento_Id.Count - 1 do
  13.           begin
  14.             Append;
  15.             //Agregas los campos
  16.           end;
  17.           Post;
  18.         end
  19.         else begin
  20.               ShowMessage('No hay registros con las fechas especificadas');
  21.         end;
  22.       end;
  23.       Close;
  24.     end;



Con eso ya tienes un DataSet listo para trabajar con los datos.

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.