Comentários sobre: DataSnap 2010 – Enviando e recebendo objetos http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/ Andreano Lanusse blog - artigos, tutoriais e vídeos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e técnicas de programação Fri, 03 Mar 2017 15:59:10 +0000 hourly 1 https://wordpress.org/?v=6.5.7 Por: Francisco Barbosa http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-49272 Fri, 03 Mar 2017 15:59:10 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-49272 Boa Tarde, Adreano Lanusse

Posts com qualidade assim só encontro aqui no seu site, muito interessante e tem me ajudado bastante. Percebi que não é uma dúvida só minha, então resolvi perguntar. É possível transferir arquivos exibindo uma barra de status, tipo um download. o cliente solicitar um arquivo presente no servidor datasnap e mostrar o progresso da transferencia com uma progressbar, é possível?

]]>
Por: Edner http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-46360 Tue, 29 Mar 2016 14:18:34 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-46360 Prezado Andreano, Tudo bem?

Excelente post. Estou iniciando no desenvolvimento com DataSnap Rest Application, e me surgiu uma dúvida. Implementei um servidor que me retorna uma lista de DataSets (TFDJSONDataSets). Utilizei um exemplo disponibilizado na documentação da embarcadero, conforme segue abaixo:

FDQuery.Close;

Result := TFDJSONDataSets.Create;

TFDJSONDataSetsWriter.ListAdd(Result, FDQuery);

Após o fechamento da Query, eu ajusto o meu SQL e definindo os parâmetros para o mesmo.

Pergunta: Devo abrir minha Query antes de retorná-lá?

Fiz um teste, deixando com está, funcionou perfeitamente, mas apenas para um retorno de poucos registros, percebi que, se minha consultar retornar uma quantidade de informações tais como 50 registros, o dataset chega vazio no lado do cliente, como se não tivesse dados a ser retornado.

Quando eu abro a query no lado do servidor, os registros retornam sem problema algum. O que estou fazendo de errado? tenho que configurar alguma informação que defina o tamanho das informações que devem ser trafegadas?

Desde já agradeço a atenção

]]>
Por: Andreano Lanusse http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-33782 Thu, 03 Oct 2013 00:40:44 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-33782 Em resposta a Magnaldo Melo.

Oi Magnaldo, tem sim, tudo depende como você configura o lifecycle dos objetos através do DSServerClass, aqui no blog tem artigos sobre isso

]]>
Por: Magnaldo Melo http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-33640 Fri, 27 Sep 2013 00:43:54 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-33640 Andreano,

Muito tem se falado a respeito dos objetos que ficam na memória, o que acaba sendo uma bomba relógio.
Eu utilizo o DataSnap (Rest + Json). Há remover esses objetos da memória?

]]>
Por: Andreano Lanusse http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-9413 Wed, 09 May 2012 18:50:28 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-9413 Em resposta a William.

@William,

Infelizmente você não entendeu o exemplo, o qual mostra o envio e recebimento de objetos no DataSnap.

TCustomer é o objeto usado como exemplo, e no caso ele é usado no server e client. Para representar e ter acesso ao TCustomer no cliente você TEM que ter a estrutura do mesmo no cliente.

O método ToString somente acessa a propriedade do objeto e não faz referência nenhum ao server.

]]>
Por: William http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-9386 Mon, 07 May 2012 19:31:19 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-9386 Testem direito esse exemplo. O método toString que ele chama é da classe tcustomer que foi compilada dentro do executável do cliente através da declaração no uses, em nenhum momento foi executado o tostring do servidor datasnap.

Só alterar o método tostring do tcustomer assim:

function TCustomer.ToString: string;
begin
Result := Self.Name + ‘ – Age: ‘ + IntToStr(Self.Age)+’ teste’;
end;

e compilar o server e não compilar o cliente, vai ver que o retorno será sem a string ‘teste’ que foi colocado no método.

]]>
Por: Júlio César Ferreira (@jcmferreira) http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-6873 Mon, 31 Oct 2011 18:10:29 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-6873 Andreano!

Consegui resolver o problema trocando a classe TMemoryStream por uma TStringStream.
Mas, e quando não for possível fazer um processo como esse? E todo o projeto DataSnap já pronto parado por conta de um único tipo?

]]>
Por: Júlio César Ferreira (@jcmferreira) http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-6869 Mon, 31 Oct 2011 15:09:00 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-6869 Caro Andreano!

Tentei realizar o teste que vc indicou, usando TStream para enviar a imagem para o cliente… Na aplicação servidor, a imagem é lida do Stream com sucesso mas, quando é enviado para o cliente, dá erro!

O post foi detalhado para a nova situação… grato pela sua ajuda!

]]>
Por: Júlio César Ferreira (@jcmferreira) http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-6853 Fri, 28 Oct 2011 22:38:42 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-6853 Andreano… segue a página onde tento explicar detalhadamente o problema:
http://www.activedelphi.com.br/forum/viewtopic.php?t=69002

]]>
Por: Júlio César Ferreira (@jcmferreira) http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-6852 Fri, 28 Oct 2011 22:21:30 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-6852 Sobre o post acima… percebi que o problema é na conversão de JSON para Object, utilizando o método JSONToObject.

Antes da conversão para JSON, um TImage consegue exibir a foto tranquilamente.
Na volta de JSON para o objeto TCustomer, ao que parece, o conteúdo de Photo fica comprometido.

]]>
Por: Júlio César Ferreira (@jcmferreira) http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-6851 Fri, 28 Oct 2011 21:58:24 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-6851 Boa noite Andreano!

Estava estudando esse seu exemplo de transferência de objetos do servidor para o cliente e surgiu uma dúvida: Utilizando esse seu exemplo da classe TCustomer, poderíamos ter uma propriedade public do tipo TJPEGImage ou TBitmap, algo como TCustomer.Photo?

Meu servidor iria definir o conteúdo dessa propriedade e passar o objeto via JSON para o cliente e o mesmo conseguir exibir em um TImage padrão, a imagem que está na propriedade Photo?

]]>
Por: Nelson Lima http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-5955 Wed, 29 Jun 2011 07:14:01 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-5955 Prezado Andreano,

Eu gostaria de criar metodo remoto onde eu possa passar um array de Delta do ClientDataSet + seu ProviderName

Para isso criei um class TDeltaApply Tentei TDeltaApplyArray : array of TDeltaApply e ele não aceita como metodo remoto esse tipo.

Então como posso para meu servidor uma array de delta e seu providername????

]]>
Por: Braga http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-5677 Tue, 21 Jun 2011 23:49:08 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-5677 Olá Sr. Andreano Lanusse! Parabéns pela execelência de seu trabalho. Embora tenha procurado em várias fontes, não encontrei nenhum material editado sobre “Como construir uma aplicação do começo ao fim” com DataSnap, em 3 camandas.
Se poder me ajudar com qualquer informação de onde e como encontrar, serei imensamente grato.

]]>
Por: Francis Silva http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-5560 Wed, 08 Jun 2011 22:30:26 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-5560 Eu consegui resolver o problema de transporte de datas e doubles entre o servidor DataSnap e a aplicação cliente utilizando um truque muito simples. Se você observar a estrutura de uma classe qualquer em formato JSON vai notar que o que é mapeado para o JSON não são as propriedades da classe em sí, mas sim as suas variáveis privadas. Sendo assim consegui resolver o problema som o seguinte truque:

TCliente = Class (TObject)
private
FID: Integer;
FNome: String;
FDataCadastro: String;
FValor: String;
function GetDataCadastro: TDateTime;
procedure SetDataCadastro(value: TDateTime);
function GetValor: Double;
procedure SetValor(value: Double);
….

public
property DataCadastro: TDateTime read GetDataCadastro write SetDataCadastro;
property Valor: Double read GetValor write SetValor;
….
end;

O truque é na implementação dos métodos privados:

function TCliente.GetDataCadastro: TDateTime;
begin
Result := StrToDateTime(FDataCadastro); // Vai bem alguma checagem extra aqui antes da conversão
end;

function TCliente.SetDataCadastro(value: TDateTime);
begin
FDataCadastro:= FormatDateTime(‘DD/MM/YYYY HH:NN:SS’, Value);
end;

function TCliente.GetValor: Double;
begin
Result := StrToFloatDef(FValor,0);
end;

function TCliente.SetValor(value: Double);
begin
FValor := FloatToStr(value);
end;

Dessa forma quando você atribuir ou obter um valor das propriedades DataCadastro e Valor, automaticamente eles serão convertidos de TDateTime e Double para String, e virce-versa. Como o JSON só armazena as informações dos campos privados das propriedades, as informações são armazenas como String e não há nenhum problema na conversão de volta na aplicação cliente.

Espero ter ajudado.

]]>
Por: Andreano Lanusse http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-5524 Mon, 06 Jun 2011 05:13:52 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-5524 Em resposta a Dannyrooh.

Dannyrooh, não tem jeito, você tem que transformar de JSON para o objeto correspondente.

]]>
Por: Rodrigo http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-5332 Thu, 19 May 2011 12:05:22 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-5332 Excelente post, me ajudou muito, porém tenho um problema, já citado acima. Criei uma classe que possui property do tipo Double e me ocorre um erro na conversão do objeto, impossibilitando a transferência do objeto para o cliente. Como posso resolver o problema ?

Att,

]]>
Por: Dannyrooh http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-4837 Tue, 12 Apr 2011 21:12:20 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-4837 Boa tarde,

Criei um servidor datasnap que retorna uma lista de TCustomer agrupada com JsonArray e JsonValue, estou tentando consumir o resultado numa aplicação asp.net com delphi prism, ao gerar o proxy ele retorna a classe como object, alguma forma de realizar a transformação direto com .net ?

]]>
Por: Cleyton http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-3918 Tue, 08 Feb 2011 15:41:38 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-3918 Ok Andreano, vou explicar melhor …

Estou desenvolvendo um sistema, que tem um servidor DataSnap com Rest, até ai tudo bem, com seus exemplos e o dos amigos, consegui desenvolver sem problema, inclusive se comunicando com outras linguagens, por exemplo Flex.
Criei minha regra de negocio no meu servidor DataSnap, e utilizando HTTPService no Flex consigo pegar os dados do meu Servidor e popular os meus campos no Flex.
{
var ht:HTTPService = new HTTPService();
ht.url = “http://localhost:8081/datasnap/rest/TSMClient/GetClient/” + txtConsulta.text;
}
seria mais ou menos assim, passo por parâmetro o txtConsulta e ele retorna o que eu quero.
Só que surgiu a necessidade de passar um arquivo(bytes) = Upload, por exemplo, uma imagem do flex para o meu Servidor DataSnap, ai que está o meu problema, pq no caso desse exemplo que passei eu passo do Flex para o DataSnap como parametro um valor String, em outras linguagens, como por exemplo ASP.NET é utilizado Request para fazer essa operação, só que não encontrei nada parecido nos componentes DataSnap que possa me permitir fazer esse upload … realmente estava confuso anteriormente espero que tenha ficado mais claro … obrigado pelo retorno.

]]>
Por: Wesley http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-3223 Thu, 06 Jan 2011 00:53:25 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-3223 Parabéns Andreano….

]]>
Por: Andreano Lanusse http://www.andreanolanusse.com/pt/datasnap-2010-enviando-e-recebendo-objetos/#comment-2740 Tue, 28 Dec 2010 18:52:33 +0000 http://www.andreanolanusse.com/pt/?p=337#comment-2740 Em resposta a Cleyton.

Cleyton, pode refazer a pergunta, está confusa 🙂

]]>