Sei sulla pagina 1di 5

Como buscar dados de servidores DataSnap utilizando JSON

Veja neste artigo como criar mtodos para listar dados no aplicativo cliente utilizando
DataSnap.
(0) (0)

#ShowMeTheCode

Motivao

H vrios anos, a arquitetura padro para o desenvolvimento de software foi o modelo cliente e servidor de duas camadas. Porm, com o
grande advento dos dispositivos mveis, essa arquitetura j no a mais adequada para vrias aplicaes. Isso ocorre porque pode ser
custoso manter componentes de acesso a dados nos prprios aplicativos, visto que recursos de segurana e controles especficos do servidor
precisam ser implementados manualmente. Por esses motivos que se faz necessria uma arquitetura de software mais robusta para tais
casos, e o modelo multicamadas utilizando a tecnologia de DataSnap traz a soluo para esse problema.

Nesse modelo, funo do servidor de aplicao DataSnap manter todas as conexes com a base de dados, bem como todo o processamento
das regras de negcio. J aplicao cliente caber consumir os mtodos que so expostos pelo servidor, obtendo assim os dados necessrios
a seu funcionamento. Nesse artigo nos concentraremos em como criar, no aplicativo cliente, mtodos para listar dados provenientes do
servidor DataSnap.

Saiba mais sobre como construir servios RESTful com DataSnap

Passo 1: Criando o mtodo no servidor

Quando criamos servidores DataSnap, automaticamente gerada uma unit chamada ServerMethodsUnit, na qual devemos programar os
mtodos remotos que retornaro os dados para a aplicao cliente. Essa mesma unit tambm apresenta um visual muito semelhante ao um
Data Module, e nela os componentes de acesso a dados devem ser adicionados. A Figura 1 mostra esses componentes: um FDConnection
para realizar a conexo com a base de dados, um FDQuery para buscar os dados utilizando a SQL, o driver do banco de dados
(FDPhysMSSQLDriverLink) e um FDStanStorageJSONLink, para permitir que os dados trafeguem pela rede no formato JSON.

Nesse exemplo estamos utilizando a engine FireDAC para acesso a dados e o SQL Server como sistema gerenciador de banco de dados. No
entanto, caso necessrio, outras tecnologias poderiam ser utilizadas de forma similar.

Figura 1. Componentes de acesso a dados

Tendo adicionado os componentes, podemos ver agora, na Listagem 1, a codificao para executar uma consulta no servidor e retornar os
dados para a aplicao cliente. importante frisar que deve-se adicionar na clusula uses dessa unit o namespace
Data.FireDACJSONReflect.

1 public

2 function RetornaRegistros(): TFDJSONDataSets;


3 end;

4 function TServerMethods1.RetornaRegistros: TFDJSONDataSets;

5 begin

6 FDQuery1.Active := False;

7 Result := TFDJSONDataSets.Create;

8 FDQuery1.SQL.Text := 'select * from pessoas';

9 TFDJSONDataSetsWriter.ListAdd(Result, FDQuery1);

10 end;

Listagem 1. Funo para buscar os dados do servidor.

Linha 1: Incio da seo public da unit, na qual os mtodos remotos devem ser declarados;

Linha 2: Definio da assinatura do mtodo. A classe TFDJSONDataSets permite que datasets no formato JSON trafeguem pela rede;

Linha 6: A query fechada para a execuo de um novo comando;

Linha 7: Criada a varivel de retorno Result, do tipo TFDJSONDataSets, que armazenar o resultado da consulta em formato JSON;

Linha 8: atribudo ao FDQuery a consulta que desejamos executar no servidor para retornar os respectivos registros para a aplicao cliente;

Linha 9: Por meio da classe TFDJSONDataSetsWriter, adicionada na lista de retorno a varivel Result juntamente com o FDQuery1, que ser automaticamente executado e seus
registros retornados para a parte cliente da aplicao.

Passo 2: Criando o mtodo no cliente

Quando criamos clientes DataSnap, so gerados automaticamente pelo assistente do RAD Studio dois arquivos: ClientClasses e
ClientModule. O primeiro uma abstrao de todos os mtodos que foram definidos no servidor, enquanto o segundo efetivamente realiza as
conexes entre a aplicao cliente e a aplicao servidora. A Figura 2 apresenta a interface grfica, que composta de um boto (TButton),
um memo (TMemo), uma tabela em memria (FDMemTable1) e novamente o componente para permitir trfego de arquivos JSON
(FDStanStorageJSONLink1). O objetivo dessa interface que quando o boto for clicado, ser executada uma consulta utilizando o mtodo
do passo anterior, os resultados sero copiados para a tabela em memria e posteriormente listados no memo. importante lembrar que
necessrio informar na clusula uses do formulrio as units Data.FireDACJSONReflect e ClientModuleUnit1.
Figura 2. Interface grfica do cliente.

Por fim, o cdigo da Listagem 2 mostra como fazer o download dos dados do servidor e realizar a listagem.

1 procedure Tform2.Button1Click(Sender: TObject);

2 var

3 dataset: TFDJSONDataSets;

4 begin

5 dataset := ClientModule1.ServerMethods1Client.RetornaRegistros();

6 FDMemTable1.Active := false;

7 FDMemTable1.AppendData(TFDJSONDataSetsReader.GetListValue(dataset, 0));

8 FDMemTable1.Active := true;

9 while not FDMemTable1.Eof do


10 begin

11 Memo1.Lines.Add(FDMemTable1.FieldByName('nome').AsString);

12 FDMemTable1.Next;

13 end;

14 end;

Listagem 2. Download dos dados do servidor.

Linha 3: definida a varivel dataset, do tipo TFDJSONDataSets, que armazena os registros vindos do servidor;

Linha 5: invocado o mtodo RetornaRegistros declarado no servidor, acessado por meio da unit ClientModule1;

Linha 6: A tabela em memria desativada para limpar a memria;

Linha 7: invocado o mtodo AppendData para preenchimento do FDMemTable1, o que feito por meio da classe TFDJSONDataSetsReader. Os parmetros do mtodo GetListValue
so a varivel declarada na linha 3 e o ndice do dataset. Como estamos retornando somente um dataset do servidor, esse ndice 0 (zero);

Linhas 8 a 14: Aps o FDMemTable1 ser ativado, executada uma estrutura de repetio para percorrer todos os registros e adicionar o campo nome no memo. Dessa forma, todos os
nomes da base de dados sero listados.

Saiba mais sobre como depurar aplicaes DataSnap

Com isso, temos uma estrutura em DataSnap que faz a leitura dos dados no servidor e os copia para uma aplicao cliente. Conforme
discutido anteriormente, essa codificao comumente utilizada para trazer dados para aplicativos mobile utilizando um servidor de
aplicao.

Curso relacionado: Multicamadas com Delphi e DataSnap


Publicado no Canal Delphi

Guia Programao Delphi web e DataSnap +

por Jones Granatyr

Delphi na veia (!)

Ajude-nos a evoluir: voc gostou do post? (0) (0)