Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-08-2011
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 24
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
  #2  
Antiguo 26-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
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
  #3  
Antiguo 27-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
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
  #4  
Antiguo 27-08-2011
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 24
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
  #5  
Antiguo 27-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por apicito Ver Mensaje
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.
Hola

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é.

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  Consultas: ConsolidacionWS;
  Lista: getListaRegistrosResponse;
  i: Integer;
begin
  Consultas := GetConsolidacionWS(true,'',nil);
  memo1.Lines.Add(Consultas.resetFechaRegistrosEntrada);
  Lista := Consultas.getListaRegistros('004');
  for i := 0 to High(Lista) do
  begin
    //:::::::
    memo1.Lines.Add(lista[i].nombre);
    //:::::::
  end;
end;

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
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: 24
apicito Va por buen camino
Entre tu código y el que yo estaba utilizando existe esta diferencia:
Yo definia Lista como Array_Of_registroBean
Código Delphi [-]
var Lista : Array_Of_registroBean
y tu como:
Código Delphi [-]
var Lista: getListaRegistrosResponse;
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?

Última edición por apicito fecha: 27-08-2011 a las 17:26:24.
Responder Con Cita
  #7  
Antiguo 27-08-2011
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
En el WSDL viene de esta forma

Código Delphi [-]

registroBean         = class;                 { "http://dominio/"[GblCplx] }

getListaRegistrosResponse = array of registroBean;   { "http://dominio/"[Lit][GblCplx] }

  registroBean = class(TRemotable)
  private
    Fasunto: string;
    /........
  published
    property asunto:             string    Index (IS_OPTN or IS_UNQL) read Fasunto write Setasunto stored asunto_Specified;
    /........
  end;

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 09:36:43.


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