![]() |
Como leer un TRemotable que proviene de un webservice
Estoy utilizando Delphi2010. Importo un wsdl a través de WsdlImporter que me crea una unit Consolidacion.
En ella se crean los métodos: El parámetro Addr de la función GetConsolidacionWS se carga durante la implementación, en el supuesto de que sea vacio, con la dirección del webservice donde registroBean es una Tremotable: Intento leer la respuesta desde otra unidad donde importo Consolidacion: Esto no funciona y no sé como debo capturar los valores que me devuelve el webservice. Alguien me puede ayudar?. |
Cita:
Saludos |
El ejemplo, hasta donde yo entiendo, no me sirve, debe de estar hecho con una versión anterior de Delphi. Yo estoy usando la versión 2010 y la funcion me devuelve un array de TRemotables
Código:
function getListaRegistros(const entidad: string): Array_Of_registroBean; stdcall; Mi problema es que no consigo recorrer ese Array_Of_registroBean. He probado multiples opciones como la que aparece en el último trozo de código de mi anterior mensaje y esta: Pero ninguna me funciona. Parece como si estuviese vacío. Gracias de todos modos por tu información y sigo esperando a que alguien me sugiera alguna posible solución. Un saludo. |
Hola
he hecho una pequeña prueba para leer un Array of TRemotable y me funciona perfectamente.
IListaArray está declarado en el webservice así:
Y el resultado es éste: ![]() A menos que tu webservice no esté regresando nada, no veo el problema. Saludos PD, estoy utilizando DelphiXE, pero debe funcionar igual con versiones anteriores, lo probaré con mi Turbo Delphi y te comento, además, estoy utilizando el mismo documento que te enlacé, solo le agregué el tipo IListaArray. |
Confirmado, utilizando Turbo Delphi (Delphi 2006) funciona igual de bien.
![]() Mismo código, utilizando el WSDL Importer de D2006.
Si tu webservice es accesible por internet y si puedes envíamelo por mensaje privado y lo checamos. Saludos. |
Acabo de enviarte un correo electrónico a través de tu cuenta para que pruebes haber si a ti te funciona.
Yo me he bajado el trial de Delphi XE para probar, por si era un problema de versión, pero tampoco conseguí hacer lo funcionar. Gracias por el tiempo que le estás dedicando a mi problema. |
Cita:
Ya he realizado las pruebas y si me regresó 3 registros. Creo que el 'secreto' está en ejecutar la función resetFechaRegistrosEntrada antes de la consulta ya que sin eso regresa una lista vacia. De cualquier forma te muestro el código que usé.
Y si, con Turbo Delphi no se recupera correctamente el WSDL ya que el protocolo SOAP que se utiliza en esa versión no es compatible con la del webservice. Saludos |
Entre tu código y el que yo estaba utilizando existe esta diferencia:
Yo definia Lista como Array_Of_registroBean y tu como: A mi no me compila con tu opción ya que no reconoce ese tipo. Como defines este tipo en la unit que produce el WsdlImporter? |
En el WSDL viene de esta forma
Saludos |
A mi me genera esto:
y y Te pego el código completo en un privado. |
Te ponmgo en un privado el enlace de descarga de mi unit.
|
He sustituido mi ConsolidacionWS1.pas por el que me has enviado y sigue sin funcionar. Hace bien el reseteo de la descarga dando el mensaje: "Base de datos actualizada correctamente" Pero despues no descarga los tres registros.
Ya no sé que puede estar pasando. Lo Estoy probando con el Delphi XE. |
Me he dado de cuenta de que están modificando el WS y por esto no coinciden el que yo había importado con el que tu estás importando ahora. Ahora cuando lo importo yo ya se parece al que te sale a ti. De hecho si importas de nuevo verás que ha cambiado.
El lunes intentaré averiguar que es lo que está pasando. Un par de preguntas: ¿Cuando le das importar lo dejas en automático o seleccionar una version determinada de soap 1.1 o 1.2? ¿En la ultima pantalla dejas marcadas las opciones por defecto o cambias alguna opción?. |
No creo que hayan cambiado el wservice, así es como lo resuelve mi Turbo Delphi, lo que me indica que el problema es con el protocolo del SOAP, en mi Delphi XE dejo en Automático la importación y las opciones de la ultima pantalla en los 'default'.
He ejecutado tu proyecto y me funciona correctamente, si no puedes ejecutar ese mismo proyecto en Delphi 2010 entonces si es problema de compatibilidad. Cita:
Saludos |
No soy capaz de entender como es posible que mi proyecto a mi no me funcione y a ti si, utilizando ambos Delphi XE. Tendrás en tu delphi algun componente que falta en mi instalación?
|
[SOLUCIONADO] Como leer un TRemotable que proviene de un webservice Responder a Tema
Después de horas y horas intentando hacer cosas distintas, pero casi siempre haciendo lo mismo, he conseguido solucionar el problema de la lectura de TRemotable.
[SOLUCION] Descargarme la última versión de Delphi XE2 trial y funcionó a la primera. Osea que es un defecto de las versiones anteriores de delphi. Gracias por la colaboración. Especialmente a Egostar por el tiempo que le dedicó a mi problema. Codigo: Unit generada por wsImporter: La unit que usa lo anterior:
|
Hola
Cita:
Me alegra que al final hayas resuelto el problema, en realidad no entiendo porque no te funcionó con XE, no tengo ningún componente adicional (aún me niego a utilizar componentes extras), incluso, la versión que tengo es la profesional, es decir, lo más básico. En fin, lo dicho, me alegra que ya esté funcionando y no hay nada que agradecer, también a mi me sirvió para aprender a crear y manipular arreglos TRemotable, son interesantes :) Saludos |
Seguramente mi versión era distinta a la tuya.
Repito, gracias. |
La franja horaria es GMT +2. Ahora son las 18:18:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi