Ver Mensaje Individual
  #2  
Antiguo 07-03-2014
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Reputación: 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 09:40:21. Razón: Corregir ancho de linea demasiado grande
Responder Con Cita