DataSnap 2010 – Enviando e recebendo ARRAY de objetos
Dando 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
ó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
Oi Paulo,
Basta usar o tipo Stream que você irá conseguir enviar tipos binário.
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?
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/