Boa noite, pessoal!

Este é meu primeiro post e gostaria que vocês me ajudassem com uma
dúvida. Eu preciso retornar o resultado de uma requisição (feita
através de remote object) para uma variável qualquer, para então eu
manipulá-la. Não quero utilizar um ModelLocator e nem adicionar uma
propriedade à minha classe somente para armazenar este resultado -
pois me cheira POG utilizar qualquer uma das alternativas para este
propósito. Vamos ao caso:

Temos uma classe "Authentication", cujo objetivo é encapsular os
métodos e atributos que cuidam do acesso ao aplicativo em questão e
também uma classe "User", responsável por gerenciar as informações dos
usuários. Ambos são arquitetados como TOs (transfer objects), e
extendem uma abstração chamada "DataObject", que foi criada para
facilitar o acesso aos remote objects. Minha classe "Authentication"
possui um método "login" e o seus respectivos handlers de evento,
sendo o principal "loginResultHandler", que é o callback em caso de
sucesso. Bem, neste handler, como um resultado positivo foi obtido (o
OID do usuário autenticado), eu preciso chamar a função "getUserById",
da minha classe "User", que deveria me retornar uma nova instância de
"User", com as propriedades do usuário informado. Todas as requisições
estão sendo processadas com sucesso, o que está pegando mesmo, é o
retorno da instância, que não sei por quê, me retorna null, mesmo a
instância tendo sida criada sem problemas. Pelo que pude perceber, e
pelo debug que fiz, uma das hipóteses seria que é porque o flex não
espera o processamento da função para prosseguir, linearmente, o
processamento da aplicação. Outra hipótese seria o fato de eu estar
chamando uma função que dispara um evento que retorna um valor e eu
supostamente não pego este valor em lugar nenhum. Mas bem, como sou um
jovem padawan em flex, peço-lhes ajuda. =)

Às classes, só com os métodos/propriedades que estão me tirando o
sono:

Authentication.as

[code]
package br.prodocms.security.control{

        import br.ingens.dataobjects.DataObject;
        import br.prodocms.security.model.*;
        import br.prodocms.security.view.*;

        import mx.controls.Alert;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;

        public class Authentication extends DataObject{

                public function Authentication(){
                        destination = "amfphp";
                        source = "br.prodocms.security.Authentication";
                        showBusyCursor = true;
                        super();
                }

                public function login( username:String, user_password:String,
domain_url:String ):void{
                        remoteObject.login.send( username, user_password, 
domain_url );
                        resetAllEventHandlers();
                }

                public function loginResultHandler( event:ResultEvent ):void{
                        SecurityModelLocator.getInstance().authenticatedUserId =
event.result as int;
                        var authenticatedUser:User = new User();
                        authenticatedUser = authenticatedUser.getUserById( 
event.result as
int ); // é aqui que a sem vergonha da instância deveria ser pega
                        var loginFrm:LoginFrm =
SecurityModelLocator.getInstance().loginFrm;
                        loginFrm.close();
                }

        }
}

[/code]


User.as

[code]
package br.prodocms.security.control{

        import br.ingens.dataobjects.DataObject;
        import br.prodocms.security.model.*;
        import br.prodocms.security.view.*;

        import mx.rpc.events.ResultEvent;

        [RemoteClass(alias="User")]
        [Bindable]
        public class User extends DataObject {

                private var _id:Number = new Number();
                private var _domain_id:Number = new Number();
                private var _full_name:String = new String();
                private var _email:String = new String();
                private var _username:String = new String();
                private var _user_password:String = new String();
                private var _active:Boolean = new Boolean();

                public function User(){
                        destination = "amfphp";
                        source = "br.prodocms.security.User";
                        showBusyCursor = true;
                        super();
                }

                // [Getters/Setters das propriedades]

                public function getUserById( id:Number ):void{
                        remoteObject.getUserById.send( id );
                        resetAllEventHandlers();
                }

                public function getUserByIdResultHandler( event:ResultEvent 
):User{
                        var result:User = event.result as User;
                        // trace( result ); no trace aparece a minha instância 
criada
                        return result;
                }

        }
}

[/code]


Caso precisem de mais detalhes, basta me pedir.

Agradeço qualquer ajuda que possam me dar.

Um abraço!
Diego Hordi.

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

Responder a