Problemas de Sincronismo de Dados com o Flex

23 views
Skip to first unread message

Rodolpho Loreto

unread,
Aug 27, 2007, 8:50:10 AM8/27/07
to flexdev
Olá a todos.

Desenvolvo a algum tempo com o Adobe Flex e uma das coisas que não
consigo entender bem e que até hoje me é um grande problema para
solucionar é como fazer sincronismo de dados recebidos de um
HTTPService com o Flex. Gostaria de saber se alguem poderia me ajudar
a entender como fazer para recuperar dados de uma maneira sincrona ou
se esse tipo de coisa é realmente impossível de fazer com o Flex.

Ex prático para Entendermos o que eu quero dizer:

Supondo estarmos fazendo um cadastro de clientes e que assim que o
cliente for cadastrado, deve ser exibido um Alert com o telefone da
central de atendimento mais próxima de acordo com o Unidade Federativa
(Estado brasileiro) informado.

Vamos supor que se ele for do Rio de Janeiro, deve ser enviado uma
mensagem com o número (21) 2222-2222, se for de São Paulo (11) 3333-
3333, Minas (31) 4444-4444 e assim por diante, sabendo que a
informação do telefone está em um serviço do tipo HTTPService.

Eu sei que se colocarmos numa função no evento "result" poderemos
fazer isso fácil, mas gostaria de saber se é possível fazer dentro da
mesma rotina de código onde disparamos o método send() do
HTTPService, fazendo com que a recuperação dos dados seja feita de
maneira "sincrona".

Peço a ajuda de vocês pois este tem sido um grande tabu a ser vencido
para mim e para empresa onde tenho a intenção de popularizar cada vez
mais o Flex.

Obrigado.

Rodolpho Loreto

Rodrigo Pereira Fraga

unread,
Aug 27, 2007, 9:55:56 AM8/27/07
to fle...@googlegroups.com
Olá,
 
mas porque que tem que ser sincrono?
esse dado: telefone da central de atendimento não provém do seu Banco de dados?
 
se sim, o que você pode no mínimo, é fazer uma tela de loading até o dado chegar....
 
Até onde sei, não tem como essa chamada ser sincrona...
 
 
trabalhar com dados assincronos no começo é complicado, eu mesmo tive que repensar minhas lógicas,
mas hoje vejo vantangens, e axo bem mais tranquilo trabalhar com dados assincronos.
 
Abraços..
\o/


De:
------------------------------
    | Rodrigo Pereira Fraga|
 
           rfr...@itaipu.gov.br
------------------------------



> From: rodol...@gmail.com
> To: fle...@googlegroups.com
> Subject: [flexdev] Problemas de Sincronismo de Dados com o Flex
> Date: Mon, 27 Aug 2007 05:50:10 -0700

Rodolpho Loreto

unread,
Aug 27, 2007, 11:06:32 AM8/27/07
to flexdev
Oi Rodrigo,

Obrigado pela resposta.

Bem, o exemplo que eu descrevi é uma situação hipotética. O que eu
gostaria mesmo de saber é se é possível fazer a comunicação com o
Banco de Dados de maneira sincronizada, enviando uma requisição,
recebendo esse valor e trabalhando o mesmo logo em seguida a sua
recepção. No caso do meu sistema as vezes preciso fazer lógicas
baseadas em informações coletadas na base de dados de maneira
sequencial.

Como posso fazer a tela de loading para aguarda a recepção do dado que
eu enviei?

Obrigado mais uma vez,

Rodolpho Loreto

Daniel Schmitz

unread,
Aug 27, 2007, 11:42:46 AM8/27/07
to flexdev
Não é possível realizar a comunicação síncrona. Talvez somente
utilizando Ajax, via JavaScript, o que não recomendo nem para meu pior
inimigo :)

Abraços,
Daniel Schmitz

Fábio Goll

unread,
Aug 27, 2007, 12:47:13 PM8/27/07
to flexdev
Acho q vcs não entederam a dúvida dele, ou melhor, não explicaram a
melhor solução.

Vejo várias pessoas que estão començando no flex com esse problema de
entender, ou,
não utilizar corretamente o esquema de dados assincronos.

Pra resolver o seu problema é só definir o result do httpService
(RemoteObject, etc) para uma função
que trate os dados.

Ex.:

<HttpService id="bla" result="minhaFuncao()" />

private function minhaFuncao(): void {
// aki vc faz a logica q vc quer e tambem atribui o valor da
resposta pra um componente ou variavel
}

Como exemplo acima, vc tem total controle do que vem do serviço, é só
definir a propriedade result,
que quando o dado for retornado da chamada será disparado, e nessa
função que capturamos os
dados da busca e tratamos esse resultado se necessário.

O q eu tenho visto por aí é q algumas pessoas, utilizam direto com
data binding o resultado
do HttpService para o componente que quer mostrar os dados, por isso
não compreendem
corretamente como funciona o esquema dos dados assíncronos.

No exemplo abaixo, que as vezes por falta de conhecimento é utilizado
(ou por não precisar tratar os dados),
você não tem controle de quando o resultado virá, pois você está
atribuindo diretamente o resultado do seriço
ao componente.

Ex.:

<HttpService id="bla" result="minhaFuncao" />

<mx:Label text="{bla.lastResult.qualquerCoisa}" />

Espero ter ajudado.

[]s
Fábio Goll

Rodrigo Pereira Fraga

unread,
Aug 27, 2007, 3:03:42 PM8/27/07
to fle...@googlegroups.com
 
Hun... grande Fábio!
 
hehe
 
é verdade já vi muita gente usando direto "latestResult", isso não é legal..
 
Mas então Rodolpho, com a explicação clara do Fábio fica mais fácil ainda explicar a "tela" de loading.....
(é muito dado pra fazer o loading? pois não se sabe mas no httpService já tem um método "showBusyCursor")
 
 
Faça uma tela com um loading,
ex: um swf escrito Carregando... ou até mesmo um texto ....
(meuLoading)
 
 
No mesmo método que vc der o send:
 
private function requestData():void{
    //******
    hs.send();
    meuLoading.visible = true;
    //Ou meuLoading.setVisible(true);, dependendo do componente.
}
 
 
No result do httpService:
 
private function resultHandler(event:ResultEvent):void{
      meuLoading.visible = false;
 
      //Meu obj, é um objeto que servirá para vc manipular os dados... lembrando que é legal colocar isso dentro de um "try"
      meuObj = event.result;
}
 
 
Trabalhar com eventos no flex é o canal!!
 
+)
 
Abraços meu amigo e bowah sorte.



 
De:
------------------------------
    | Rodrigo Pereira Fraga|
 
           rfr...@itaipu.gov.br
------------------------------



> From: fabi...@gmail.com
> To: fle...@googlegroups.com
> Subject: [flexdev] Re: Problemas de Sincronismo de Dados com o Flex
> Date: Mon, 27 Aug 2007 09:47:13 -0700

Fabio Aguiar

unread,
Aug 29, 2007, 4:39:03 PM8/29/07
to flexdev
Olá amigo, faz mais ou menos um ano que utilizo o FLEX e para evitar
problemas como esse eu uso uma formula muito simples para que os
resultados não fiquem confusos na hora de mostrar na tela. Por
exemplo, na tela inicial do meu aplicativo, normalmente chamo 3
métodos no HTTPService e como a quantidade de dados de cada um é
diferente, a ordem de retorno de cada um também não é sequencial. Para
resolver esse problema usei a seguinte estrutura:

Criei um objeto HTTPService na minha página:

<mx:HTTPService
id="WS"
method="POST"
url="IWS.aspx"
resultFormat="xml"
showBusyCursor="true"
fault="IWS_Error(event)" />

no evento initialize eu coloco o seguinte código:
WS.addEventListener(ResultEvent.RESULT, result);

e coloco uma função:

private function result(event:ResultEvent):void

até aqui nada de novo, voce deve estar falando, veja como eu chamo a
função:

var param:Object = new Object();
param.action = "ConsultaUnidadePorEntidade";
param.codEntidade = xml.Table.Codigo;
var call:Object = WS.send(param);
call.marker = "ConsultaUnidadePorEntidade";

para cada método eu coloco um nome diferente no call.marker. Dentro da
função result eu coloco da seguinte forma:

var xml:XML;
var call:Object = event.token;
switch (call.marker)
{
case "ConsultaUnidadePorEntidade":
//codigo para pegar o resultado...
break;
}

assim, coloco todas as funções q eu preciso dentro de cada case que
ele não se perde com o sincronismo. Quando preciso do resultado de uma
chamada para fazer outra, faço a chamada pro próximo método dentro do
próprio case.

Espero ter ajudado

Tião da Obra

unread,
Aug 30, 2007, 7:23:01 AM8/30/07
to fle...@googlegroups.com
Existe a técnica de Flex Messaging, extremamente interessante. Que daria
para você uma certa "sincronia" entre um Objeto Flex e um Objeto JAVA.
Para aprender a trabalhar com esta técnica eu assisti a uns videos do
[www.lynda.com], para ser mais exato Flex 2 Advanced: Using Data Services
[http://movielibrary.lynda.com/html/modPage.asp?ID=335].

A ética diz muita coisa sobre o que deve e não deve ser feito, porém dizem,
não sei ao certo, talvez quem sabe neste link
[http://www.mininova.org/get/609258] você consegue fazer o download grátis
do curso, via torrent.

Abraço Garoto,
-Daniel

Reply all
Reply to author
Forward
0 new messages