Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2011
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
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:
Código Delphi [-]
  ConsolidacionWS = interface(IInvokable)
  ['{8796BA36-EF66-FC3D-8199-9C6A7C27E916}']
    function  getEstado(const entidad: string): string; stdcall;
    function  getListaRegistros(const entidad: string): Array_Of_registroBean; stdcall;
    function  resetFechaRegistrosEntrada: string; stdcall;
  end;

function GetConsolidacionWS(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ConsolidacionWS;
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:
Código Delphi [-]
  registroBean = class(TRemotable)
  private
    Fasunto: string;
    Fasunto_Specified: boolean;
    FcorreoElectronico: string;
    ......

Array_Of_registroBean = array of registroBean;
Intento leer la respuesta desde otra unidad donde importo Consolidacion:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Lista     : Consolidacion.Array_Of_registroBean;
    Registro  : Consolidacion.registroBean;
    Asunto    : string;
begin
  Setlength(Lista, 3);
  Lista := Consolidacion.GetConsolidacionWS.getListaRegistros('004');
  for Registro in Lista do begin
    Asunto := Registro.asunto;
    Memo1.Lines.Add('====================================');
    Memo1.Lines.Add(Asunto);
  end;
end;
Esto no funciona y no sé como debo capturar los valores que me devuelve el webservice.
Alguien me puede ayudar?.
Responder Con Cita
  #2  
Antiguo 24-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por apicito Ver Mensaje
Esto no funciona y no sé como debo capturar los valores que me devuelve el webservice.
Alguien me puede ayudar?.
Puedes ver éste enlace, espero que te ayude a comprender el uso de los TRemotable

Saludos
Responder Con Cita
  #3  
Antiguo 24-08-2011
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
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;
y no un widestring conteniendo un xml como en el ejemplo. Supongo que en esta versión de Delphi este trabajo ya lo hace la unidad que genera el WSDLImporter.
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:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
var Lista     : Array_Of_registroBean;
     Asunto    : string; 
begin   
   Setlength(Lista, 30);
   Lista := Consolidacion.GetConsolidacionWS.getListaRegistros('004');
   Asunto := Lista[0].asunto;
   Memo1.Lines.Add('====================================');
   Memo1.Lines.Add(Asunto);
end;
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.
Responder Con Cita
  #4  
Antiguo 26-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

he hecho una pequeña prueba para leer un Array of TRemotable y me funciona perfectamente.

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  Lista: IListaArray;
  i: Integer;
begin
  Consultas := GetIwsConsulta(true,'',nil);
  Lista := Consultas.GetArrayoftrRetorno;
  for i := 0 to High(Lista) do
  begin
    memo1.Lines.Add(inttostr(lista[i].ID) + '--->' + lista[i].Descripcion);
  end;
end;

IListaArray está declarado en el webservice así:

Código Delphi [-]

  trRetorno = class(TRemotable)
  private
    FID: Integer;
    FDescripcion: string;
  published
    property ID: Integer  read FID write FID;
    property Descripcion: string read FDescripcion write FDescripcion;
  end;

  IListaArray = array of trRetorno;

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.
Responder Con Cita
  #5  
Antiguo 27-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Confirmado, utilizando Turbo Delphi (Delphi 2006) funciona igual de bien.



Mismo código, utilizando el WSDL Importer de D2006.

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  Consultas: IwsConsulta;
  Lista: IListaArray;
  i: Integer;
begin
  Consultas := GetIwsConsulta(true,'',nil);
  Lista := Consultas.GetArrayoftrRetorno;
  for i := 0 to High(Lista) do
  begin
    memo1.Lines.Add(inttostr(lista[i].ID) + '--->' + lista[i].Descripcion);
  end;
end;

Si tu webservice es accesible por internet y si puedes envíamelo por mensaje privado y lo checamos.

Saludos.
Responder Con Cita
  #6  
Antiguo 27-08-2011
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Webservice regresa PDF como string en base64 beemot Internet 3 05-07-2010 12:11:58
Array en class(TRemotable) Miguel Galarza OOP 4 06-04-2010 22:44:05
Como leer un txt? pablopessoa Varios 4 16-11-2009 15:57:21
como leer la memoria cyberagl Varios 0 14-03-2007 07:22:56
De dónde proviene el nombre de Google. marcoszorrilla Noticias 12 24-01-2006 22:51:24


La franja horaria es GMT +2. Ahora son las 13:09:16.


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
Copyright 1996-2007 Club Delphi