DataSnap 2010 – Enviando e recebendo ARRAY de objetos

Categories:DelphiTags: ,

Delphi iconDando sequência ao tema transferência de objetos com DataSnap o qual iniciei escrevendo sobre a transferência de um simples objeto, o qual é pré-requisito para entender este artigo, neste post descrevo como transferir uma lista (Array) de objetos.

Como já mencionei todo o envio e retorno de objetos em DataSnap deve ser feito através de JSON, no caso de retorno de uma lista de objetos devemos retornar um TJSONArray, o qual terá uma lista de TJSONObject.

Abaixo a implementação de uma função o qual retorna uma array de TCustomer.

function TServerMethods2.ListofCustomer: TJSONArray;
var
  I: Integer;
  myCustomer: TCustomer;
begin
  Result := TJSONArray.Create;

  for I := 0 to 20 do
  begin
    myCustomer := GetCustomer;
    myCustomer.Name := 'Customer ' + IntToStr(i);
    myCustomer.Age := i;
    Result.AddElement(CustomerToJSON(myCustomer));
  end;

end;

Repare que cada elemento do Array é transformado de TCustomer para TJSONValue, o que requer no lado cliente a conversão de TJSONValue para TCustomer, abaixo um exemplo

var
  proxy: TServerMethods2Client;
  mySingleCustomer: TCustomer;
  allCustomers : TJSONArray;
  i: Integer;
begin

  try
    proxy := TServerMethods2Client.Create(SQLConnection1.DBXConnection);
    allCustomers := proxy.ListofCustomer;

    for i := 0 to allCustomers.Size -1 do
    begin
      mySingleCustomer := JSONToCustomer(allCustomers.Get(i));
      MMCustomer.Lines.Add(mySingleCustomer.ToString);
      mySingleCustomer.Free;
    end;

  finally
    proxy.Free;
  end;

end;

No próximo post vamos abordanar o tema relacionado ao retorno de objetos complexos.

Download do código fonte

Posts relacionados

5 Responses to DataSnap 2010 – Enviando e recebendo ARRAY de objetos

  1. DataSnap 2010 – enviando e recebendo ARRAY de strings, numbers e outros tipos | Andreano Lanusse Blog says:

    [...] No caso to TJSONObject foi utilizado o método ToString o qual retorna a representação do objeto em formato JSON, através da classe TJSONUnMarshal convertermos para TCustomer, esta conversão foi tratada no posto anterior. [...]

  2. Paulo says:

    ótimo artigo, contudo gostaria de saber como proceder com campos do tipo BLOB.

    como enviar e receber este tipo de dado usando Datasnap REST ?

    obrigado

    Paulo

  3. Andreano Lanusse says:

    Oi Paulo,

    Basta usar o tipo Stream que você irá conseguir enviar tipos binário.

  4. Hugo says:

    Andreano,

    Usando um servidor http/rest

    Como usar este mesmo método “ListofCustomer(objFilter: TJSONValue)”, porém com um parametro JSON, responsável por um filtro na lista.

    No lado cliente como passar este tal parametro para o método GET?

  5. Andreano Lanusse says:

    Oi Hugo,

    No Delphi XE tem um exemplo onde um client PHP chama este memo através de conexão REST – o código está disponível no sourceforge também, da uma olhada https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE/DataSnapXE/

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>