DataSnap 2010 – enviando e recebendo ARRAY de strings, numbers e outros tipos

 

DelphiDando sequência ao tema transferência de objetos com DataSnap o qual iniciei escrevendo sobre a transferência de um simples objeto, e depois sobre o envio de array objetos, agora vamos descrever como enviar array que contenha tipos distintos.

Para retornar tipos String, Integer, Double, Real, Boolean e outros tipos, utilizamos a classe TJSONValue que serve como base para as classes TJSONString, TJSONNumber, TJSONTrue, TJSONFalse, TJSONNull e TJSONObject. O retorno de uma lista destes tipos é representando pelo TJSONArray, comentando no meu post anterior.

Abaixo exemplo de um ServerMethod que retorna um TJSONArray o qual contém vários items, cada um deles de tipos diferentes.

function TDSServerMethods.ListofDifferentTypes: TJSONArray;
var
  strval: TJSONString;
  trueval : TJSONTrue;
  falseval : TJSONFalse;
  numval: TJSONNumber;
  objval : TJSONObject;
begin
  Result := TJSONArray.Create;

  strval := TJSONString.Create('Return String value from DataSnap Server');
  Result.AddElement(strval);

  numval := TJSONNumber.Create(100);
  Result.AddElement(numval);

  numval := TJSONNumber.Create(99.99);
  Result.AddElement(numval);

  trueval := TJSONTrue.Create;
  Result.AddElement(trueval);

  falseval := TJSONFalse.Create;
  Result.AddElement(falseval);

  Result.AddElement(CustomerToJSON(GetCustomer));

end;

Agora basta acessar o método através da aplicação cliente o qual será capaz de reconhecer todos os tipos de objetos aqui enviados.

var
  proxy: TDSServerMethodsClient;
  mySingleValue: TJSONValue;
  allValues: TJSONArray;
  i: Integer;
begin

  proxy := nil;
  try
    proxy := TDSServerMethodsClient.Create
      (DMClientContainer.MyDSServer.DBXConnection);
    allValues := proxy.ListofDifferentTypes;
    for i := 0 to allValues.Size - 1 do
    begin
      mySingleValue := allValues.Get(i);

      if mySingleValue is TJSONString then
        MMLog.Lines.Add('TJSONString value ' + mySingleValue.Value)
      else if mySingleValue is TJSONNumber then
        MMLog.Lines.Add('TJSONNumber value ' + mySingleValue.Value)
      else if mySingleValue is TJSONTrue then
        MMLog.Lines.Add('TJSONTrue value ' + mySingleValue.ToString)
      else if mySingleValue is TJSONFalse then
        MMLog.Lines.Add('TJSONFalse value ' + mySingleValue.ToString)
      else if mySingleValue is TJSONObject then
        MMLog.Lines.Add('TJSONObject value ' + mySingleValue.ToString);

    end;

  finally
    proxy.Free;
  end;

end;

Ao executar o retorno será:

TJSONString value Return String value from DataSnap Server
TJSONString value 100
TJSONString value 99.99
TJSONTrue value true
TJSONFalse value false
TJSONObject value {“type”:”Customer.TCustomer”,”id”:1,”fields”:{“FName”:”Andreano Lanusse”,”FAge”:32,”FMaritalStatus”:”msMarried”}}

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.

Download do código fonte

Compartilhe e divirta-se:
  • Print
  • Twitter
  • Facebook
  • Yahoo! Bookmarks
  • Digg
  • Sphinn
  • del.icio.us
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live

Tags:

 
 
 
 

0 Comments

 

You can be the first one to leave a comment.

 

Leave a Comment

 




XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
 
 
Get Adobe Flash playerPlugin by wpburn.com wordpress themes