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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---