Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Leer Archivo XML de respuesta de webServices SOAP en un ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=93167)

Matias_ 05-06-2018 07:26:58

Leer Archivo XML de respuesta de webServices SOAP en un ClientDataSet
 
Buenas Noches queridos amigos de este famoso foro hispanohablante club delphi, resulta que tengo implementado un webservices SOAP hecho en Delphi que se conecta a una bases de datos MySQL(en realidad MariaDB); al invocar unos de sus metodos publicados, el web Services me responde el siguiente mensaje en formato XML:
Código:

<DeudaList>
        <nro>1</nro>
        <fecha>29/05/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>0.16</saldo>
        <nro>2</nro>
        <fecha>29/06/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>0.66</saldo>
        <nro>3</nro>
        <fecha>29/07/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>0.66</saldo>
        <nro>4</nro>
        <fecha>29/08/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>5</nro>
        <fecha>29/09/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>6</nro>
        <fecha>29/10/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>7</nro>
        <fecha>29/11/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>8</nro>
        <fecha>29/12/2018</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>9</nro>
        <fecha>29/01/2019</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>10</nro>
        <fecha>28/02/2019</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>11</nro>
        <fecha>29/03/2019</fecha>
        <monto>641.66</monto>
        <idpp>1</idpp>
        <saldo>641.66</saldo>
        <nro>12</nro>
        <fecha>29/04/2019</fecha>
        <monto>641.74</monto>
        <idpp>1</idpp>
        <saldo>641.74</saldo>
</DeudaList>

Como se puede apreciar en el archivo xml, se pueden distinguir 5 campos para mostrarlos en el DBGrid enganchado al clientDataset que tengo, he utilizado la herramienta "XML Mapper" del IDE de Delphi (Rad Studio>Tools>XML Mapper), para mapear y poder hacer la conversion al formato DataPacket y asi lograr que el cliendataset lea la informacion correctamente usando un componente XMLTransformProvider, pero por alguna razon solo me muestra una y solo una sola fila :( de la respuesta que se recibe.
Como sabran uds. , a la herramienta "XML Mapper" le pasamos el formato de archivo XML que recibimos y con esta herramientas mapeamos los campos y demas y generamos otro archivo con extension *.xdb , este archivo generado asignamos a la propiedad TransformRead.TransformationFile de la sigte. forma:
Código Delphi [-]
XMLTransformProvider1.TransformRead.TransformationFile:= 'RUTA\MiArchivo.xtr';
Obviamente tambien se lo puede hacer en tiempo de diseño en el editor de propiedades, posteriormente he configurado tambien la propiedad "ProvideName" del ClientdataSet para que se enganche al XMLTransformProvider, todo funciona correctamente, con excepcion que en el DbGrid solo se muestra la primera fila de las muchas que deberia mostrarse; pienso :rolleyes: que talvez mi problema está en como estoy haciendo la conversion usando la herramienta "XML Mapper"(es que la verdad primera vez que la uso :confused:), he probado a generar el archivo *.xdb de muchas formas pero no logro hacer que funcione el muestreo de datos correctamente.
Habrá un alma caritativa que me pueda hechar una mano con este asunto?
Les quedaré agradecido de antemano.
Saludos cordiales.

PostData: Estoy Usando RadStudio XE 10.2 ^\||/

Casimiro Notevi 05-06-2018 10:09:15

Echa un vistazo al tutorial del compañero Neftali, seguramente encontrarás lo que buscas.

Matias_ 05-06-2018 16:36:22

Gracias Querido Camiro Notevi, le he hechado una buena leida al blog de Neftali, mas sin embargo, en ese tutorial, él esta usando JSON y no XML como formato de comunicacion entre el WebServices y los clientes, que tienen sus diferencias, ya habia pensado meterle los registro a mano al clientdataSet, pero me dije asi mismo Delphi debe tener un componente que haga esa cuestion, de ahí que me decanté por usar un XMLTransformProvider. En ultimo caso tendré no mas que recorrer el XML a mano e ir metiendo los datos a mano,aunque aun estoy dando mis pininos con Delphi en esta cuestion, si alguien me puede orientar le quedaré muy agradecido ya sea para solucionar el tema de la transformacion usando XMLTransformProvider, o recorrer a mano el xml he ir insertando al clientDataSet.:confused:
Saludos.

Casimiro Notevi 05-06-2018 16:49:36

Pues se tratado varias veces por aquí, con ejemplos de código y todo, a ver si puedes encontrarlo, ¿has hecho alguna búsqueda por los foros?

Matias_ 06-06-2018 02:42:40

Muchas gracias por las respuestas Casimiro Notevi, les comparto como he solucionado el tema en cuestion:
He modificado la aplicacion del webServices en el servidor para que la respuesta XML tenga el siguiente formato:
Código:

<DeudaList>
<Registro>
  <nro>1</nro>
  <fecha>29/05/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>0.16</saldo>
</Registro>
<Registro>
  <nro>2</nro>
  <fecha>29/06/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>0.66</saldo>
</Registro>
<Registro>
  <nro>3</nro>
  <fecha>29/07/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>0.66</saldo>
</Registro>
<Registro>
  <nro>4</nro>
  <fecha>29/08/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>5</nro>
  <fecha>29/09/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>6</nro>
  <fecha>29/10/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>7</nro>
  <fecha>29/11/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>8</nro>
  <fecha>29/12/2018</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>9</nro>
  <fecha>29/01/2019</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>10</nro>
  <fecha>28/02/2019</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>11</nro>
  <fecha>29/03/2019</fecha>
  <monto>641.66</monto>
  <idpp>1</idpp>
  <saldo>641.66</saldo>
</Registro>
<Registro>
  <nro>12</nro>
  <fecha>29/04/2019</fecha>
  <monto>641.74</monto>
  <idpp>1</idpp>
  <saldo>641.74</saldo>
</Registro>
</DeudaList>

En resumen he puesto una etiqueta llamada <Registro> </Registro> en cada fila correspondiente a los datos, he vuelto a utilizar la herramienta XML Mapper del IDE de RadStudio, con este nuevo formato XML y generado un nuevo archivo *.xdb, con el cual el XMLTransformProvider ha trabajado perfectamente y los datos se muestran perfectamente. Comparto esta solucion por si a alguien le pueda servir.
Saludos cordiales.^\||/

ElKurgan 06-06-2018 07:18:45

Gracias por compartir la solución.

Saludos

Casimiro Notevi 06-06-2018 09:40:13

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 05:30:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi