Função do Flex retornar valor de método do Java?

38 views
Skip to first unread message

RafaelViana

unread,
Nov 24, 2009, 6:48:16 PM11/24/09
to flexdev
Tenho uma função que me retorna um valor booleano se já existe uma
venda para determinado cliente.Essa função era feita na parte do
ActionScript mas surgiu a necessidade de fazer no back-end para
melhorar perfomance.

Porém não consegui pensar uma maneira para essa função retornar a
resposta já que depende do result..

Ex:

public function verificarExistencia():Boolean{

vendaService.existeVenda();

return ???

}

Preciso para fazer algo assim: if (verificarExistencia()) ....

só que a chamada ao serviço depende do result.....pensei em fazer por
evento, ou ficar esperando e quando o valor for modificado eu retorno
o valor, mas de qualquer maneira não tenho como retornar por esse
método...

Alguém saberia algo para me ajudar?

J.C.Ködel

unread,
Nov 24, 2009, 6:52:06 PM11/24/09
to fle...@googlegroups.com
Callback:

public function verificarExistencia(callback:Function):void
{
// Talvez um application.enabled = false e um setBusyCursor aqui
vendaService.addEventListener(ChamadaCompleta,
function(resultado:Algo):void
{
// Habilitar o application e remover o busy cursor
callback(resultado.algumaCoisa == "Foo");
});

vendaService.existeVenda();
}


--------------------------------------------------
From: "RafaelViana" <rfl....@gmail.com>
Sent: Tuesday, November 24, 2009 9:48 PM
To: "flexdev" <fle...@googlegroups.com>
Subject: [flexdev] Função do Flex retornar valor de método do Java?

> --~--~---------~--~----~------------~-------~--~----~
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para fle...@googlegroups.com
> Para sair da lista, envie um email em branco para
> flexdev-u...@googlegroups.com
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
> -~----------~----~----~----~------~----~------~--~---
>

RafaelViana

unread,
Nov 24, 2009, 7:41:36 PM11/24/09
to flexdev
Não entendi bem o funcionamento, e também não encontrei material na
net além desse link (http://techpolesen.blogspot.com/2007/09/coping-
with-flex-asynchronous-remote_26.html) que também não consegui
entender muito bem.

Adiciono um listener para que quando o resultado fosse carregado eu
chamaria essa função que contém o callback...Mas o que faz esse
callback? Como eu retornaria o resultado desse chamada do serviço ( a
função verificarExistência retorna um valor booleano)?

On 24 nov, 21:52, J.C.Ködel <jcko...@gmail.com> wrote:
> Callback:
>
> public function verificarExistencia(callback:Function):void
> {
>  // Talvez um application.enabled = false e um setBusyCursor aqui
>   vendaService.addEventListener(ChamadaCompleta,
> function(resultado:Algo):void
>   {
>     // Habilitar o application e remover o busy cursor
>    callback(resultado.algumaCoisa == "Foo");
>   });
>
>   vendaService.existeVenda();
>
> }
>
> --------------------------------------------------
> From: "RafaelViana" <rfl.vi...@gmail.com>
> Sent: Tuesday, November 24, 2009 9:48 PM
> To: "flexdev" <fle...@googlegroups.com>
> Subject: [flexdev] Função do Flex retornar valor de método do Java?
>
>
>
>
>
> > Tenho uma função que me retorna um valor booleano se já existe uma
> > venda para determinado cliente.Essa função era feita na parte do
> > ActionScript mas surgiu a necessidade de fazer no back-end para
> > melhorar perfomance.
>
> > Porém não consegui pensar uma maneira para essa função retornar a
> > resposta já que depende do result..
>
> > Ex:
>
> > public function verificarExistencia():Boolean{
>
> > vendaService.existeVenda();
>
> > return ???
>
> > }
>
> > Preciso para fazer algo assim: if (verificarExistencia()) ....
>
> > só que a chamada ao serviço depende do result.....pensei em fazer por
> > evento, ou ficar esperando e quando o valor for modificado eu retorno
> > o valor, mas de qualquer maneira não tenho como retornar por esse
> > método...
>
> > Alguém saberia algo para me ajudar?
>
> > >
>
>
>  smime.p7s
> 6KExibirDownload

J.C.Ködel

unread,
Nov 24, 2009, 8:55:41 PM11/24/09
to fle...@googlegroups.com
Callback é um ponteiro de função.

O que vai acontecer aí?

1) Você chama o método.
2) O método desabilita a aplicação (tipo um Aguarde, processando...)
3) O método chama o Web Service e retorna imediatamente nada para você.
4) Quando o Web Service retornar, você pega o resultado e chama o callback
com o teu boolean.
5) Teu aplicativo continua a processar a partir dai.

Lembre-se que Flex é assíncrono... não dá pra fazer uma operação de I/O com
blocking.

Aliás, é exatamente o mesmo processo utilizado para verificar o resultado de
um Alert (quando ele possui mais do que um botão e você quer fazer algo
dependendo do botão clicado no Alert).

--------------------------------------------------
From: "RafaelViana" <rfl....@gmail.com>
Sent: Tuesday, November 24, 2009 10:41 PM
To: "flexdev" <fle...@googlegroups.com>
Subject: [flexdev] Re: Função do Flex retornar valor de método do Java?

RafaelViana

unread,
Nov 25, 2009, 9:32:24 AM11/25/09
to flexdev
Tem algum material que explica esse Pattern?

Em qual parte do código eu faço retorno booleano da função?

Porque chamando dessa maneira o return é feito antes do result do
RemoteObject :S

On 24 nov, 23:55, J.C.Ködel <jcko...@gmail.com> wrote:
> Callback é um ponteiro de função.
>
> O que vai acontecer aí?
>
> 1) Você chama o método.
> 2) O método desabilita a aplicação (tipo um Aguarde, processando...)
> 3) O método chama o Web Service e retorna imediatamente nada para você.
> 4) Quando o Web Service retornar, você pega o resultado e chama o callback
> com o teu boolean.
> 5) Teu aplicativo continua a processar a partir dai.
>
> Lembre-se que Flex é assíncrono... não dá pra fazer uma operação de I/O com
> blocking.
>
> Aliás, é exatamente o mesmo processo utilizado para verificar o resultado de
> um Alert (quando ele possui mais do que um botão e você quer fazer algo
> dependendo do botão clicado no Alert).
>
> --------------------------------------------------
>  smime.p7s
> 6KExibirDownload

RafaelViana

unread,
Nov 25, 2009, 5:17:12 PM11/25/09
to flexdev
Debuguei a função e não sei se com esse método conseguirei retornar o
valor na mesma função:

Dentro do VendaUtils.as

public function verificarExistencia(venda:Venda,
callback:Function):void{

vendaService.addEventListener(ResultEvent.RESULT,
function(event : ResultEvent):void
{
trace("Passo o resultado do result para a função que é me passada
por parâmetro");
// Habilitar o application e remover o busy cursor
callback(event.result);
});

trace("Existe duplicata??");
vendaService.existeVenda(model.id, venda);

}

Como chamo em outro lugar da aplicação:

private var b:Boolean = false;

private function verificarExistencia(venda:Venda):Boolean {

trace("Chamando...");
var utils:DuplicataUtils = new DuplicataUtils();
trace("Vou chamar a função!");
utils.verificarExistencia(venda, function(result : Boolean) : void {
trace("Estou no callback..");
b = result;

});

trace("Vou retornar que existe é: " + b);
return b;

}

No caso só ia atualizar a variável boleana que fosse retorna com o
resultado do callback e o return ia estar ok... mas..

Ele passa "reto" sem depender do result

Chamando...
Vou chamar a função!
Vou retornar que é...

--------------------------------

Não tem uma maneira que eu possa parar a função?? Algo como só
retornar o resultado da função quando o result estiver pronto.A
primeira coisa que me veio na veio na cabeça foi um while de uma flag
que seria mudada para true quando o result fosse chamado :S mas isso é
grotesco e não funciona...

J.C.Ködel

unread,
Nov 25, 2009, 9:17:48 PM11/25/09
to fle...@googlegroups.com
Não saberia nem dizer qual o nome do pattern... na verdade não sou muito fã
de "patterns"...

Só resolvo os problemas conforme eles aparecem e, vez ou outra, acaba caindo
em um pattern conhecido, mas eu não tenho conhecimento dos mesmos.

É só apenas uma das muitas formas de se lidar com um ambiente assíncrono. A
idéia não é uma função que retorne boolean, e sim uma função tua que recebe
um boolean que é chamada quando a coisa toda completa.

--------------------------------------------------
From: "RafaelViana" <rfl....@gmail.com>
Sent: Wednesday, November 25, 2009 12:32 PM

Reply all
Reply to author
Forward
0 new messages