Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2014
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Question ¿Como retornar varios valores en un Servicio Web?

Hola comunidad, estoy empezando con los servicios Web, pero aún no sé cómo hacer que un servicio web me retorne la lista de ciudades, o departamentos por ejemplo, actualmente pienso que debería ser así:

En el servicio web, del servidor:

Debo tener un UM, que haga una consulta total a una tabla por ejemplo CIUDADES.
Dentro del archivo INTF, debo declarar un procedimiento que tenga como out, los registros totales de CIUDADES una lista tal vez no sé, y en el archivo IMPL, debo abrir la consulta y cargar el objeto de salida con el resultado de la consulta.

En el servicio web, del cliente:

Debo tener el WSDL IMPORT.
Luego en un formulario debo tener un control como un GRID, TABLA, o COMBOX que cargue el resultado del servicio web.

No sé si se pueda hacer así como lo planteo o exista una mejor forma para hacerlo, de ante mano muchas gracias por leer este hilo y tomarse el tiempo para responderlo.
__________________
De ante mano gracias por tomarse el tiempo de leer este Hilo.

-------------------------------
Juan Sebastián Cubillos Gonzalez
Desarrollador de soluciones informáticas.
Bogotá, Colombia.
Encuentra me en: http://www.linkedin.com/pub/juan-seb...lez/66/1b8/150
Responder Con Cita
  #2  
Antiguo 07-03-2014
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Cool Respuesta

Hola comunidad la respuesta para mi pregunta, es, para enviar un DataSet en un servicio web, utilice un arreglo de una clase que hereda de de TREMOTABLE, así, todo esto en el módulo servidor del servicio web:

Código Delphi [-]
// Clase Departamentos  que hereda de TRemotable
Departamentos = class (TRemotable)
  private
    // Propiedades privadas de mi clase
    Fcodigo: String;
    FDescricpion: String;
  published
    // Propiedades publicas que escriben las propiedades privadas
    property Codigo: String read Fcodigo write Fcodigo;
    property Descripcion: String read FDescricpion write FDescricpion;
  end;
  // Arreglo de Departamentos  
  TDepartamentos = array of Departamentos;
  // Función que me retorna mi arreglo
  function ConsultarDepartamento (): TDepartamentos; stdcall;

Todo el código anterior debe ir dentro de un módulo SOAP, en la clase INTF.CLASS
El siguiente código debe ir dentro del módulo SOAP, pero en la clase IMPL.CLASS:

Código Delphi [-]
// Implementación de la función
function TServicioWebPrueba.ConsultarDepartamento: TDepartamentos;
var
  // Variable que hereda del arreglo TDepartamentos 
  Departamento : TDepartamentos;
  Indice: Integer;
begin
  //
  try
    try
      // Se prepara una consulta
      DataModulePrueba.IBQueryDepartamentos.Prepare;
      // Se abre esa consulta
      DataModulePrueba.IBQueryDepartamentos.Open;
      // Se incializa un indice en cero
      Indice:= 0;
      // Mientras la consulta no tengo fin haga
      while not DataModulePrueba.IBQueryDepartamentos.Eof do
      begin
        // Se le establece al objeto Departamento, una nueva posición en cero 
        SetLength(Departamento, Indice + 1);
        // Por cada nueva posición se debe solicitar memoria, para guardar el dato
        Departamento[Indice]:= Departamentos.Create;
        // Y en cada espacio del arreglo Departamento, en sus propiedades publicas guardo los datos 
        Departamento[Indice].Descripcion:= DataModulePrueba.IBQueryDepartamentos.FieldByName('DESCRIPCION').AsString;
        Departamento[Indice].Codigo:= DataModulePrueba.IBQueryDepartamentos.FieldByName('IDDEPARTAMENTO').AsString;
        // Incremento el indice
        Indice:= Indice + 1;
        // Continuo con la consulta
        DataModulePrueba.IBQueryDepartamentos.Next;
      end;
    finally
      // Cierro la consulta
      DataModulePrueba.IBQueryDepartamentos.Close;
    end;
  except
    on Error: Exception do
    begin

    end;
  end;
  // Como el valor devuelto de la función es un TDepartamentos, se le indica a este objeto devuelto que sea igual a Departamento
  Result:= Departamento;
end;

Ya en el cliente en un evento de un botton ONCLICK se debe hacer lo siguiente:

Código Delphi [-]
procedure TFormPrincipal.ButtonVerClick(Sender: TObject);
var
  I: Integer;
  { Se crea un variable de TDEPARTAMENTOS, para esto debo tener en nuestros uses, el consumo del servicio web es 
     decir debemos tomar el   WSDL, e importarlo a nuestro cliente, esto se puede hacer al golpe del raton, por medio 
     de NEW-> WEB SERVICES-> WSDL IMPORTER.}
  Departamentos : TDepartamentos;
begin
  // Luego Departamentos, se carga con nuestra función, traida del WSDL IMPORTER
  Departamentos:= IServicioWebsERVIDOR1.GetIServicioWebPrueba.ConsultarDepartamento;
  // Finalmente lo recorremos
  for I := 0 to High(Departamentos) do
  begin
    // Por cada iteración se adiciona a una lista en formulario un item, con el valor de Departamentos[i].Codigo + ' - ' + 
    // Departamentos[i].Descripcion, en la posición de I.
    ListBoxPrincipal.Items.Add(Departamentos[i].Codigo + ' - ' + Departamentos[i].Descripcion)
  end;
end;
__________________
De ante mano gracias por tomarse el tiempo de leer este Hilo.

-------------------------------
Juan Sebastián Cubillos Gonzalez
Desarrollador de soluciones informáticas.
Bogotá, Colombia.
Encuentra me en: http://www.linkedin.com/pub/juan-seb...lez/66/1b8/150

Última edición por Neftali [Germán.Estévez] fecha: 10-03-2014 a las 10:40:21. Razón: Corregir ancho de linea demasiado grande
Responder Con Cita
  #3  
Antiguo 10-03-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Gracias por el apunte y el código.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Como arrancar o parara un servicio en funcion de otro servicio ?? QuarkBcn API de Windows 12 15-06-2011 15:46:11
Retornar valores de sp en Firebird hacia Php subzero PHP 1 11-05-2011 03:56:30
Cómo hacer para retornar valores de una Unit a otra karo Varios 6 14-03-2009 21:57:28
Retornar o no retornar desde un script principal dec PHP 6 25-03-2008 00:41:12
Como hacer para que una funcion regrese varios valores jangel_ramirezm Varios 11 07-03-2008 23:14:49


La franja horaria es GMT +2. Ahora son las 21:47:01.


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