Flex Sistema Imobiliário - Detalhes do Código Flex Sistema de Propiedad - Detalles del Código


A pedido do José Carlos Fonseca, aqui ficam algumas explicações e detalhes de partes de código usadas no meu sistema imobiliário, assim ajudo-o e posso ajudar mais gente interessada. A petición de Jose Carlos Fonseca, aquí hay algunas explicaciones y detalles de partes de mi sistema de código utilizado en el sector inmobiliario, a fin de ayudar a él y me puede ayudar a más personas interesadas.

P: 1.Na primeira página surge uma imagem “loading” com efeito como fazes? Q: 1.Na primera página aparece una imagen "cargando" como de hecho están haciendo?

R: 1. R: 1. O efeito loading é conseguido atravéz da substituição do “loader” normal do flex por uma imagem, podes ver aqui http://www.onflex.org/ted/2006/07/flex-2-preloaders-swf-png-gif-examples.php onde encontras gif, png, swf e exemplos com código fonte. El efecto de carga se consigue mediante la sustitución de "cargadora" flex normal de una imagen, se puede ver aquí http://www.onflex.org/ted/2006/07/flex-2-preloaders-swf-png-gif- examples.php donde se puede encontrar gif, png, swf y ejemplos con código fuente. Basta copiares para a pasta da tua aplicação e no <mx:Application …> colocares preloader=”preload.CustomPreloader”. Just copiares a la carpeta de su solicitud y <mx:Application …> colocares preloader = "preload.CustomPreloader". Eu fiz umas pequenas implementações baseadas nesse exemplo, mas se se usar assim funciona na mesma. He hecho algunos pequeños despliegues basados en este ejemplo, pero si utilizamos funciona bien en él.

P:2.Pagina de login: efeito de erro, “checking login” ea barra azul Q: 2.Pagina el ingreso: efecto de error, "control diario" y la barra azul

R: 2.A barra azul é uma progressBar: A: 2 barra azul es un ProgressBar:

1: < mx:ProgressBar visible =”false” x =”112″ y =”175″ 1: <mx: ProgressBar visible = "false" x = "112" y = "175"

2: labelPlacement =”left” label =” “ width =”187″ 2: labelPlacement = "izquierda" label = "" width = "187"

3: indeterminate =”true” showEffect =”{Fade}” hideEffect =”{Fade}” 3: indeterminada = "verdadero" showEffect = "Fade ()" hideEffect = "Fade ()"

4: id =”progressStatus” /> 4: id = "progressStatus" />

que é activada (progressStatus.visible=true;) quando inicias o pedido para verificar o login no remoteObject (send) e desactivada quando recebes a resposta do remoteObject (result). que se activa (progressStatus.visible = true;) cuando la solicitud inicial, para comprobar el registro en remoteObject (enviar) y cuando se baje la respuesta de remoteObject (resultado). (progressStatus.visible=false;) (progressStatus.visible = false;)

quando recebe o resultado (negativo, o user e pass não condizem) faz o seguinte: al recibir el resultado (no, el usuario y pass no coinciden) es la siguiente:

blurRed.target=panelLogin; blurRed.target = panelLogin;

blurRed.play(); blurRed.play ();

onde o panelLogin é o nosso panel de login eo blurRed é o seguinte efeito : panelLogin dónde está nuestro panel de login y borrosa es el siguiente efecto:

1: < mx:Glow id =”blurRed” duration =”700″ 1: <mx: Glow id = "borrosa" duration = "700"

2: alphaFrom =”1.0″ alphaTo =”0.0″ 2: alphaFrom = "1,0" alphaTo = "0,0"

3: blurXFrom =”0.0″ blurXTo =”20.0″ 3: blurXFrom = "0,0" blurXTo = "20,0"

4: blurYFrom =”0.0″ blurYTo =”20.0″ 4: blurYFrom = "0,0" blurYTo = "20,0"

5: color =”0×990000″ /> 5: color = "0 × 990000" />

Quanto ao checking login é o mesmo sistema que em cima, activar ou desactivar a progressStatus já que o Flex ainda não implementa o remoteObject com um event progress. Como para el control de acceso es el mismo sistema que el anterior, dentro o fuera de la progressStatus desde la Flex aún no ha aplicado el evento con una remoteObject progreso.

P:3.Pagina principal: efeito nos botões no lado esquerdo Q: 3.Pagina casa: efecto sobre los botones de la izquierda

R: Quanto aos botões do lado esquerdo, o efeito passa pelo mesmo do erro do painel login, os efeitos são: R: Por lo que respecta a los botones de la izquierda, el efecto es el mismo panel del registro de errores, los efectos son los siguientes:

1: < mx:Glow id =”blurBlueIn” duration =”700″ 1: <mx: Glow id = "blurBlueIn" duration = "700"

2: alphaFrom =”1.0″ alphaTo =”0.0″ 2: alphaFrom = "1,0" alphaTo = "0,0"

3: blurXFrom =”0.0″ blurXTo =”20.0″ 3: blurXFrom = "0,0" blurXTo = "20,0"

4: blurYFrom =”0.0″ blurYTo =”20.0″ 4: blurYFrom = "0,0" blurYTo = "20,0"

5: color =”0×900aeef” /> 5: color = "0 × 900aeef" />

6: < mx:Glow id =”blurBlueOut” duration =”700″ 6: <mx: Glow id = "blurBlueOut" duration = "700"

7: alphaFrom =”0.0″ alphaTo =”1.0″ 7: alphaFrom = "0,0" alphaTo = "1,0"

8: blurXFrom =”20.0″ blurXTo =”0.0″ 8: blurXFrom = "20,0" blurXTo = "0,0"

9: blurYFrom =”20.0″ blurYTo =”0.0″ 9: blurYFrom = "20,0" blurYTo = "0,0"

10: color =”0×00aeef” /> 10: color = "0 × 00aeef" />

e no botão basta chama-los nos events mouseOver mouseOut: y sólo el botón de llamada en mouseover mouseOut eventos:

1: < mx:Button width =”85″ height =”73″ label =”button ADD” id =”add” 1: <mx: Botón width = "85" altura = "73" label = "ADD" id = "añadir"

2: icon =”@Embed(source=’imgs/Home_add.png’)” x =”10″ y =”91″ 2: icono = "Insertar @ (fuente = 'IMG / Home_add.png')" x = "10" y = "91"

3: fillColors =”[#000000,#000000]“ fillAlphas =”0″ borderColor =”#525151″ 3: fillColors = [# 000000, # 000000] "fillAlphas =" 0 "borderColor =" # 525151 "

4: color =”#FDFBFB” themeColor =”#535C75″ textRollOverColor =”#2667B0″ 4: color = "# FDFBFB" themeColor = "# 535C75" textRollOverColor = "# 2667B0"

5: useHandCursor =”true” mouseOver =”{buttonOver(add)}” 5: useHandCursor = "verdadero" mouseover = "(buttonOver (añadir))"

6: mouseOut =”{buttonOut(add)}” click =”{changeTo(’bsf1′)}” 6: mouseOut = "(buttonOut (añadir))" = click "(changeTo ( 'bsf1'))"

7: buttonMode =”true” /> 7: buttonMode = "true" />

onde tens: a função buttonOver(id_do_botão) e buttonOut(id_do_botão): si usted tiene: la función buttonOver (id_do_botão) y buttonOut (id_do_botão):

1: private function buttonOver(a:Button): void { 1: private function buttonOver (a: Botón): void (

2: blurBlueOut.target=a; 2: blurBlueOut.target = a;

3: blurBlueOut.play(); 3: blurBlueOut.play ();

4: } 4:)

5: private function buttonOut(a:Button): void { 5: privado función buttonOut (a: Botón): void (

6: blurBlueIn.target=a; 6: blurBlueIn.target = a;

7: blurBlueIn.play(); 7: blurBlueIn.play ();

8: } 8:)

e tens os teus efeitos feitos y que haya realizado sus propósitos : P

P:4.Como adicionas uma foto na BD? Q: 4.Como añadido una foto en BD?

R: A foto é adicionada através do php via amfphp, no Flex apenas são seleccionadas as fotos e enviadas via post para um script upload.php que trata do envio para o servidor, e devolve as localizações das fotos que ficam guardadas num array, quando termina de enviar todas as fotos, é chamada uma função do remoteObject que guarda os caminhos das fotos na base de dados (optei por usar caminhos relativos em vez de colocar a foto directamente na base de dados, ja que as fotos podem ser de grande tamanho o que ia encher a base de dados). R: La foto se inserta a través de la vía php amfphp en Flex sólo se seleccionaron las fotos y enviada por correo a un script upload.php se ocupan de la transmisión al servidor, y restablecer la ubicación de las fotografías que se almacenan en una matriz, donde termina de enviar todas las imágenes, se llama una función de remoteObject que custodian los caminos de las fotos en la base de datos (yo elegí a utilizar rutas relativas en lugar poner la imagen directamente en la base de datos, ya las imágenes pueden ser de gran tamaño lo que llenar la base de datos).

Quanto ao sistema de upload, podes ver aqui um sistema parecido com o que fiz (com código): Como el sistema de carga, se puede ver aquí un sistema similar a lo que hice (con código):

http://weblog.cahlan.com/files/file_uploads/FileUpload.html http://weblog.cahlan.com/files/file_uploads/FileUpload.html

onde o upload.php será algo parecido com: http://www.msdevstudio.com/mywork/upload.rar donde la upload.php será algo así como: http://www.msdevstudio.com/mywork/upload.rar

P:Agora fora da tua aplicação, eu tenho uma tabela com varios itens e quero que apareçam numa pagina cada um como botão, é possível?? Q: Ahora fuera de su aplicación, tengo una mesa con varios artículos y desea que aparezca en una página cada una en un botón, es posible? E no caso de essa pagina ter um numero predefinido de botões como fazer paginação? Y en el caso de esta página tiene un número predeterminado de los botones de cómo hacer la paginación?

R: Agora o monstro das respostas (nota que escrevi isto sem testar, terás que alterar muitos dos campos, mas o essencial está lá: ) R: Ahora el monstruo de las respuestas (nota que escribí este artículo sin pruebas, es necesario cambiar muchos de los campamentos, pero la esencia está ahí:)

Parte I: Botões em cada elemento da “tabela” Parte I: Los botones en cada uno de los elementos de la "mesa"

Quanto aos botões, podes colocar em cada linha da datagrid ou qualquer elemento de listagem um qualquer outro componente, sendo o mais comum, checkbox, listbox, button ou radioButton, ve isto: En cuanto a los botones, puede poner en cada línea de DataGrid o cualquier elemento de una lista de cualquier otro componente, siendo la más común, casilla, listbox, o radioButton botón, ve esto:

http://www.returnundefined.com/files/ItemRendererExample/ (codigo fonte) http://www.returnundefined.com/files/ItemRendererExample/ (código fuente)

http://www.adobe.com/devnet/flex/quickstart/using_item_renderers/ http://www.adobe.com/devnet/flex/quickstart/using_item_renderers/

mesmo parecido com o que deves querer: incluso similar a lo que desea:

http://axel.cfwebtools.com/…/UsingTheItemRendererWithADataGrid.html http://axel.cfwebtools.com/… / UsingTheItemRendererWithADataGrid.html

Estes links têm o view source activo. Estos vínculos tienen la opinión de activos de origen.

Parte II: E no caso de essa pagina ter um número predefinindo de botões como fazer paginação? Parte II: Y en el caso de esta página tienen una serie de botones de paginación predefinindo cómo?

Qaunto a fazer a paginação, isso depende muito do tipo de sistema que tens, se tens php mySql podes limitar (LIMIT) a listagem a apenas o que queres, basta criares uma variavel publica para guardares a iniciação da listagem e outra com o número de entradas por pagina: Qaunto para hacer el diseño, que depende en gran medida del tipo de sistema que usted tiene, si puede limitar php mysql (límite) a la lista sólo lo que quiere, simplemente crear una variable publica guardares para el inicio de la lista y otro con el número de entradas por página:

1: public var inicio:Number = 0; 1: público var inicio: Número = 0;

2: public var porPagina:Number = 10; 2: var público porPagina: Número = 10;

3: //ao ser chamado o Remote objecto, tens que dizer ao php para contruir o pedido sql com as limitações. 3: / / que se llama el objeto remoto, usted tiene que decir al php para construir la petición SQL con las limitaciones.

4: //no flex por exemplo o botão seguinte eo anterior a chamarem a Função goPag(”seguinte”); ou goPag(”anterior”); (consoante o botão.) 4: / / flex, por ejemplo, en el botón y el seguimiento de la convocatoria para el personal goPag ( "siguiente"), o goPag ( "up"), (dependiendo del botón).

5: private function goPag(onde:String): void { 5: función goPag privado (donde: String): void (

6: if (onde== “seguinte” ) { 6: si (donde == "siguiente") (

7: inicio=inicio 10; 7: start = empezar 10;

8: } 8:)

9: if (onde== “anterior” ) { 9: si (donde == "up") (

10: inicio=inicio-10; 10: inicio = inicio-10;

11: if (inicio<=0) inicio=0; 11: if (inicio <= 0) inicio = 0;

12: } 12:)

13: remoteObjectBusca.funcaoBusca.arguments.inicial=inicio; //redefinimos os valores 13: remoteObjectBusca.funcaoBusca.arguments.inicial = inicio; / / con reajuste de los valores

14: remoteObjectBusca.funcaoBusca.arguments.porPag=porPagina; //redefinimos os valores 14: remoteObjectBusca.funcaoBusca.arguments.porPag = porPagina; / / con reajuste de los valores

15: remoteObjectBusca.funcaoBusca.send(); 15: remoteObjectBusca.funcaoBusca.send ();

16: } 16:)

onde o remoteObject será algo como (amfphp): donde la remoteObject será algo así como (amfphp):

1: < mx:RemoteObject id =”remoteObjectBusca” destination =”amfphp” source =”servico.class” > 1: <mx: RemoteObject id = "remoteObjectBusca" destino = fuente "amfphp" = "servico.class">

2: < mx:method name =”funcaoBusca” result =”{lidaDados(event)}” > 2: <mx: método name = "funcaoBusca" resultado = "(lidaDados (event))">

3: < mx:arguments > 3: <mx: arguments>

4: < inicial > 4: <initial>

5: {”0″} 5: ( "0")

6: </ inicial > 6: </ inicial>

7: < porPag > 7: <porPag>

8: {”10″} 8: ( "10")

9: </ porPag > 9: </ porPag>

10: </ mx:arguments > 10: </ mx: argumentos>

11: </ mx:method > 11: </ mx: método>

12: </ mx:RemoteObject > 12: </ mx: RemoteObject>

e onde a função do remote object em php receberá esses parametros e devolverá a matriz de dados (as Object): y donde la función del objeto remoto en php recibir estos parámetros y devolver la matriz de datos (el objeto):

1: function funcaoBusca($inicial, $porPag) { 1: función funcaoBusca ($ original, $ porPag) (

2: if (!inicial || $inicial==NULL) $inicial=0; 2: if (! Inicial | | $ inicial == NULL) $ original = 0;

3: if (!porPag || $porPag==NULL) $porPag=10; 3: if (! PorPag | | $ porPag == NULL) $ porPag = 10;

4: 4:

5: $con=mysql_connect( “host” , “user” , “pass” ); 5: $ con = mysql_connect ( "host", "usuario", "pass");

6: $sel=mysql_select_db( “Bdados” ); 6: $ sel = mysql_select_db ( "Bdados");

7: 7:

8: $sql= “SELECT * FROM `tabelaDados` LIMIT “ .$inicial. “, “ .$porPag; 8: $ sql = "SELECT * FROM` `tabelaDados LÍMITE." Original dólares ".." $ PorPag;

9: $res=mysql_query($sql); 9: $ res = mysql_query ($ sql);

10: 10:

11: if ($res) return mysql_fetch_array($res); 11: if ($ res) return mysql_fetch_array ($ res);

12: else return “Error” ; 12: otra vuelta "Error";

13: } 13:)

depois só temos que criar no flex a funçâo para ler os dados: sólo entonces hay que crear en el flex funçâo para leer los datos:

1: [Bindable] 1: [bindable]

2: public var dadosBusca:Object; 2: var dadosBusca público: Objeto;

3: pivate function lidaDados( event :ResultEvent): void { 3: pivate función lidaDados (caso: ResultEvent): void (

4: if ( event .result== “Error” ) { 4: if (event. == Resultados "Error") (

5: //erro ao buscar os dados 5: / / error de búsqueda de datos

6: } 6:)

7: else dadosBusca= event .result as Object; 7: = dadosBusca otro evento. El resultado del objeto;

8: // a partir daqui tens os dados acessiveis na variavel dadosBusca 8: / / Desde Aquí tienes los datos disponibles en la variable dadosBusca

9: // para acederes a cada elemento usas dadosBusca[linha].campoDaBd; 9: / / para el acceso a cada elemento utiliza dadosBusca [línea]. CampoDaBd;

10: } 10:)

Nota: Este código da ultima resposta foi elaborado sem ter sido testado, por isso não sei se contem alguns erros.. Nota: Este código de la última respuesta se ha elaborado sin haber sido probado, no sé si contiene algunos errores .. mas basta testares, não sei se seria bem isto que querias. pero sólo prueba, no sé si esto sería de su interés.

Bom, acho que consegui explicar tudo.. Bueno, creo que podría explicar todo .. dá para perceber? se puede entender?

Coloquei as respostas num novo post, já que era uma resposta enorme, e assim pode ajudar mais gente. Ponga las respuestas en un nuevo puesto, ya que es una enorme respuesta, y, por tanto, puede ayudar a más gente.

Abraço.

versão pdf temporariamente indisponivel. Versión PDF disponible temporalmente.
Deixe um comentário or Deixe um Trackback Deja un comentario o licencia Trackback

44 Comentários 44 Comentarios

  1. José Carlos Fonseca José Carlos Fonseca
    Abril 17, 2008 às 7:32 pm | Permalink 17 de abril de 2008 a 7:32 pm | Permalink

    Olá, Hola,

    Desculpa de só agora responder, mas estive fora por uns tempos em trabalho e só voltei ontém. Lo sentimos, pero ahora sólo responder, pero yo estaba fuera por un tiempo en el trabajo y sólo volvió ontém.

    Muito obrigado, pela ajuda. Gracias por la ayuda. E que rapidez na resposta. Y que la velocidad de respuesta. Mais uma vez obrigado. Gracias de nuevo.

    Na resposta à pergunta 4 (Como adicionas uma foto na BD?), mencionas um link, já estive a analizar o código, mas dá-me sempre “IO ERROR”. En respuesta a la pregunta 4 (Como una imagen añadido a BD?), Por citar un enlace, que ha sido analizar el código, pero siempre me da "ERROR IO". Não sei como usar o upload.php. No sé cómo utilizar el upload.php.

    Ajudas-me?? Me ayuda?

    Um abraço. Un abrazo.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  2. Abril 18, 2008 às 6:13 am | Permalink 18 de abril de 2008 a 6:13 am | Permalink

    Em principio o upload.php que dei para download deve funcionar sem qualquer alteração, verifica se os links que fazem referencia ao upload.php estão bem: En principio la upload.php que he dado a descargar deben trabajar sin ningún cambio, están los vínculos que hacen referencia a upload.php son así:

    private const _strUploadDomain:String = “http://codycodingcowboy.cahlan.com/”; const privado _strUploadDomain: String = "http://codycodingcowboy.cahlan.com/";
    private const _strUploadScript:String = _strUploadDomain “files/upload.php”; const privado _strUploadScript: String = _strUploadDomain "archivos / upload.php";

    e na directoria onde é executado o .php deves ter a directoria myFileDir já que no tal upload.php está: y el directorio donde se ejecuta el. php debe tener el directorio myFileDir ya que en tales upload.php es:

    $file_path = $_SERVER['DOCUMENT_ROOT'].”/myFileDir”; $ File_path = $ _SERVER [ 'DOCUMENT_ROOT']."/ myFileDir ";

    se depois destas verificações continuar a dar erro, me indica se fez algumas alterações ao código para poder “investigar” melhor. si después de esas conclusiones que sigan prestando error, indica si he hecho algunos cambios en el código para "investigar" mejor. :)

    cumps.

  3. José Carlos Fonseca José Carlos Fonseca
    Abril 21, 2008 às 8:37 pm | Permalink 21 de abril de 2008 a 8:37 pm | Permalink

    Olá Mário, Hola Juan,

    De facto não tinha o upload.php no directorio certo e não tinha a directoria. De hecho no se upload.php en el directorio y no está seguro de la guía. Depois de resolver isto já não me dá erro. Después de resolver ya no me da error. Confirma o upload da imagem e envia para o local. Esto confirma la subida de la imagen y la envía al lugar. No entanto a verificação se a imagem já existe não faz. Sin embargo, la verificación de si la imagen no existe. Vou tentar vêr onde está o problema. Voy a tratar de vêr ¿dónde está el problema.

    Na bd guardas o caminho todo da imagem, certo? En bd guardias de la forma en que el panorama en su conjunto, ¿verdad?

    Agora outra questão, (espero não ser chato!!!). Ahora otra pregunta, (esperemos no aburrido !!!).

    Como mostro 1 registo da bd directamente num textinput sem ser num datagrid? Como muestra el registro 1 bd textinput sin estar directamente en un DataGrid?

    Obrigadão pela ajuda. Obrigadão en busca de ayuda.

    Tens sido fantástico. Usted ha sido fantástico.

    Um abraço. Un abrazo.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  4. Abril 22, 2008 às 5:53 pm | Permalink 22 de abril de 2008 a 5:53 pm | Permalink

    Sim, na base de dados guardo o caminho da imagem já que são muitas imagens e iria sobrecarregar a base de dados. Sí, en la base de datos de Guardo el camino de la imagen debido a que muchas imágenes y sobrecargar la base de datos.

    para mostrar um registo directamente na base de dados num campo de texto podes fazer o seguinte, imagina a função seguinte (que recebe dados do remoteObject): para mostrar un registro en la base de datos directamente en el campo de texto puede hacer lo siguiente, imagine la siguiente función (que recibe datos de remoteObject):
    imagina que o teu remote object devolve (exemplo em php amfphp) Imagino que el mando a distancia vuelve objeto (por ejemplo en php amfphp)
    < ?php <? PHP

    function dev() { Dev función () (
    //exemplo 1 / / Ejemplo 1
    return "Ola"; Volver "Hola";

    //exemplo 2 / / Ejemplo 2
    $dados['nome']="soares"; $ Datos [ 'nombre'] = "Soares";
    $dados['prenome']="joão"; $ Datos [ 'nombre'] = "Julie";
    return $dados; $ retorno de datos;

    //exemplo 3 / / Ejemplo 3
    $dados['antonio']['nome']="sousa"; $ Datos [ 'antonio'] [ 'nombre'] = "doener";
    $dados['antonio']['idade']="19"; $ Datos [ 'antonio'] [ 'edad'] = "19";
    $dados['pedro']['nome']="lemos"; $ Datos [ 'Pedro'] [ 'nombre'] = "leer";
    $dados['pedro']['idade']="25"; $ Datos [ 'Pedro'] [ 'edad'] = "25";

    } )

    ?> >
    private function lidaDados(ev:ResultEvent):void { private function lidaDados (ev: ResultEvent): void (
    //exemplo 1, recebe apenas uma variavel: / / Ejemplo 1, recibe solamente una variable:
    meucampo.text=ev.result meucampo.text = ev.result

    //exemplo 2, recebe um array de variavels: / / Ejemplo 2, recibe una serie de variavels:
    meuCampo.text=ev.result.nome; //devolve soares meuCampo.text = ev.result.nome; / / devuelve Soares
    meuCampo.text=ev.result.prenome; //devolve joão meuCampo.text = ev.result.prenome; / / Julie regresa

    //exemplo 3, recebe uma “matriz” de arrays: / / El ejemplo 3, recibe una "matriz" de arrays:
    meuCampo.text=ev.result.antonio.nome; //devolve sousa meuCampo.text = ev.result.antonio.nome; / / devuelve valeria
    meuCampo.text=ev.result.antonio.idade; //devolve 19 meuCampo.text = ev.result.antonio.idade; / / devuelve 19
    meuCampo.text=ev.result.joao.nome; //devolve lemos meuCampo.text = ev.result.joao.nome; / / devuelve leer
    meuCampo.text=ev.result.joao.idade; //devolve 25 meuCampo.text = ev.result.joao.idade; / / devuelve 25

    } )

    Para facilitar este processo, cria uma variavel bindable: Para facilitar este proceso, crea una variable bindable:

    [Bindable]
    public var DadosRo:Object; var DadosRo público: Objeto;

    e depois na função que recebe os dados do RO, coloca y después de la función que recibe datos de la RO, plantea

    DadosRo=new Object(); DadosRo = new Object ();

    DadosRo = ev.result as Object; DadosRo = ev.result el Object;

    ea partir daí os seus dados podem ser acedido a partir dessa variavel em qualquer parte do seu código, e serão actualizados sempre que o remoteObject for chamado. y, por tanto, sus datos se puede acceder desde esta variable en cualquier parte de su código, y se actualizará cada vez que el remoteObject se llama.

    No exemplo 3: En el ejemplo 3:
    em vez de meuCampo.text=ev.result.joao.nome; en lugar meuCampo.text = ev.result.joao.nome;

    poderia usar: podrían utilizar:
    meuCampo.text=DadosRo.joao.nome; meuCampo.text = DadosRo.joao.nome;

    Deu pra perceber?? Es entender la ERP?

    Abraço.

    Bom, eu não sei se tem seguido a minha série de tutoriais ( http://msdevstudio.com/blog/2008/04/08/adobe-flex-a-partir-do-zero-parte-iv/ ) mas na quarta parte exemplifico um bocado do sistema de comunicação com um backend em php, talvez te possa ajudar a compreender melhor alguns promenores do Flex. Bueno, no sé si ha seguido mi serie de tutoriales (http://msdevstudio.com/blog/2008/04/08/adobe-flex-a-partir-do-zero-parte-iv/), pero en el cuarto exemplifico un poco parte de la comunicación con un sistema de backend en php, tal vez puede ayudarnos a comprender mejor algunos detalles de Flex.

  5. José Carlos Fonseca José Carlos Fonseca
    Abril 23, 2008 às 9:46 pm | Permalink 23 de abril de 2008 a 9:46 pm | Permalink

    Boas Mário, Juan Bueno,

    Simplesmente genial. Simplemente brillante. Funcionou direitinho. Trabajó direitinho.

    Sim!! Sí! Tenho seguido todos os teus tutoriais, estão de mais. He seguido todos sus tutoriales, son más. Se não fosse você concerteza a aprendizagem do flex iria ser mais demorada. Si no se concerteza el aprendizaje de flex sería más tiempo. Grande ajuda, Obrigado!! Gran ayuda, gracias!

    (lá vem o chato!!!) Outra questão, eu tenho um viewStack onde para cada um item é um component. (llega el piso!) Otra pregunta, tengo un viewStack a donde cada elemento es un componente. Estes components são accionados por um botão, acontece que depois de visitar uma vez, na proxima visita não faz o refresh. Estos componentes son activadas por un botón, lo que sucede después de visitar una vez, el próximo viaje no se actualiza.
    É possivel contornar isto? Es posible soslayar esto?

    Se quiseres, podes adicionar o meu email ao messenger. Si lo desea, puede agregar mi correo electrónico para enviar mensajes instantáneos.

    Mais uma vez obrigado. Gracias de nuevo.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  6. Abril 25, 2008 às 8:24 pm | Permalink 25 de abril de 2008 a 8:24 pm | Permalink

    Carlos, desculpa só responder agora.. Carlos, disculpe única respuesta ahora .. tenho andado um pouco atarefado com trabalo :pe se calhar por isso não percebi bem a sua duvida, se o código não for muito extenso coloque aí..senão tente explicar mais detalhadamente.. He sido un poco ocupado con el trabajo: el pie es, por tanto, tal vez no estaba claro sus dudas, si el código se puso en su lugar no muy largo .. pero trataré de explicar más .. : P

    um abraço. un abrazo.

  7. José Carlos Fonseca José Carlos Fonseca
    Abril 30, 2008 às 11:43 pm | Permalink 30 de abril de 2008 a 11:43 pm | Permalink

    Olá Mário, desde já obrigado pela resposta e não tens que te desculpar. Hola Juan, ahora ya para las respuestas y usted no tiene que pedir disculpas.
    EStive a rever o meu código e acho que já descobri o erro. EStive a revisar el código y creo que he descubierto el error.
    No entanto gostaria de te colocar outra questão, estou a tentar fazer algo que irá ter acesso atravéz de login. Sin embargo le pido otra pregunta, estoy tratando de hacer algo que tendrán acceso a través de la conexión. Como é que mostro o ecrã1 para o administrador, o ecrã2 para o utilizador, etc. ¿Cómo se muestran los ecrã1 al administrador, al ecrã2 para el usuario, y así sucesivamente. Já tentei, mas acho que ainda estou verde em flex. Hemos intentado, pero creo que todavía estoy verde en flex.

    Obrigado. Gracias.

    Um Abraço. Un abraço.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  8. Maio 1, 2008 às 6:11 am | Permalink 1 de mayo de 2008 a 6:11 am | Permalink

    Bem Carlos, podes fazer isso de 2 maneiras, agora depende da necessidade ou não de usares um backend (php, java, etc..) Carlos Bueno, puede hacerlo de 2 maneras, ahora depende de si o no a los consumidores mediante un backend (php, java, etc ..)

    Sem Backend. Sin Backend.
    A solução pode passar por definires uma variavél global, ou seja, declaras a variavél, por exemplo La solución puede pasar por definires un variavél general, o declaras la variavél, por ejemplo
    var admin:Boolean = false; var admin: Boolean = false;
    E depois, basta verificares sempre essa variavel quando é pedido acesso à parte de admin. Luego, justo cuando verificares siempre esta variable se solicita el acceso a una parte del administrador.

    O ideal será separares a tua aplicação por pelo menos 3 states; Login, Admin, User Lo ideal es separares su solicitud de al menos 3 estados; Usuario, administrador, usuario
    Depois basta fazeres o login, e na funçao que valida o login definires a variavél admin=true; e mudares pro state respectivo, neste caso currentState=”Admin”; ou se for user, admin=false; currentState=”User”; A continuación, sólo hacer el registro, y las funciones que valida el login definires el variavél admin = true, y cambiar su estado a favor, en este caso currentState = "Admin", o si el usuario, admin = false; currentState = "Usuario";

    Outra forma de fazer isso, é usares um backend em php por exemplo, e fazeres uso de sessões, para verificares se o user está identificado como admin ou não… mas assim é um bocado mais extenso, mas se vires que é a melhor forma, diz que eu faço-te um pequeno exemplo. Otra forma de hacer esto, se utiliza un backend en php por ejemplo, y hacer uso de los períodos de sesiones, a verificares si el usuario se identifica como administrador o no… pero es un poco más extensa, pero si usted ve lo que es la mejor manera, dice que debo hacer un pequeño ejemplo.

    Seria isso que querias? Sería lo que queríamos?

    Abraço.

  9. José Carlos Fonseca José Carlos Fonseca
    Maio 1, 2008 às 10:30 am | Permalink 1 de mayo de 2008 10:30 am | Permalink

    Bom dia Mário, Hola Juan,

    De facto o ideal seria criar um backend em php e usar sessões. De hecho, la idea sería crear un backend en php y el uso de sesiones. Arranjas-me então um exemplo. Arranjas mí un ejemplo.

    Obrigado. Gracias.

    Abraço.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  10. José Carlos Fonseca José Carlos Fonseca
    Maio 2, 2008 às 8:35 pm | Permalink 2 de mayo de 2008 a 8:35 pm | Permalink

    Olá Mário, Hola Juan,

    No teu Sistema Imobiliário a caixa de login não é um popup pois não. A medida que su sistema inmobiliario a la caja de ingreso no es como una ventana emergente no. Usas-te states?? Puede utilizar usted? Tentei fazer o efeito, mas a caixa não surge desde cima e não consigo fazer o efeito final. Traté de hacerlo, pero el cuadro no aparece desde arriba y no puede hacer el efecto final.

    Na aplicação que estou a tentar fazer acontece algo do género: En aplicación de lo que estoy tratando de hacer es algo como:

    - faço o login, entro em vários ecrãs e faço logout sem fechar o browser. -- ¿Acceder, entrar en diversas pantallas y me fuera sin cerrar el navegador. Ao fazer login outra vez entra no último ecrã que estive e não no que está programado para aparecer e os efeitos só são feitos na primeira vez. Al acceder de nuevo entrar en la última pantalla y yo no estaba en lo que está previsto que aparecen y los efectos son sólo la primera vez.

    - E se estiver dentro da aplicação e fizer F5(refresh) sai e pede para fazer login. -- Y si está dentro de la aplicación y hacer F5 (actualizar) sale y pedirá que firme.
    Isto é normal? Esto es normal? Dá para contronar. Subvenciones para la contronar.

    Obrigado pela tua ajuda e paciência. Gracias por tu ayuda y paciencia.

    Um abraço. Un abrazo.

    Jose Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  11. Maio 2, 2008 às 9:45 pm | Permalink 2 de mayo de 2008 a 9:45 pm | Permalink

    Bem carlos, o efeito inicial é um simples painel, que é criado no topo da aplicação com visibilidade=false; depois do efeito iniciado é mostrado. Carlos Bueno, el efecto inicial es un simple panel, que se crea en la parte superior de la aplicación con visibilidad = false; se inició después de la final se muestra.
    O efeito final é um simples mx:Move (como o inicial), ambos com a easingFunction=Elastic (mx.effects.easing.Elastic ) e depois visibility=false; quando o efeito termina (podes saber quando o efeito termina, com um eventListner ao efeito, algo como efeito.addEventListener(EffectEvent.EFFECT_END, funcao_que_esconde_o_panel); El efecto final es un simple mx: Mover (como el original), ambos con easingFunction = Elástico (mx.effects.easing.Elastic) y, a continuación, la visibilidad = false; termina cuando el efecto (se puede saber cuando el efecto termina con un eventListner la final, algo así como efeito.addEventListener (EffectEvent.EFFECT_END, funcao_que_esconde_o_panel);

    na funcao: en función de:
    private function funcao_que_esconde_panel(evt:EffectEvent) { private function funcao_que_esconde_panel (evt: EffectEvent) (
    painel_login.visibility=false; painel_login.visibility = false;
    efeito.removeEventListner(EffectEvent.EFFECT_END, funcao_que_esconde_o_panel); efeito.removeEventListner (EffectEvent.EFFECT_END, funcao_que_esconde_o_panel);
    } )

    Se fizeres isso com eventos, deves remover os eventListners… Haga esto con hechos, usted debe eliminar la eventListners…

    Quando voltas a fazer o login de novo, na função que verifica a validade do login, indica para ele voltar ao state que queres com a indicação. Cuando vueltas para hacer el signo de nuevo, la función que comprueba la validez del registro, se indica a regresar al país que desea alerta. this.currentstate=”StateEntrada”; this.currentstate = "StateEntrada";

    Ao fazeres o F5 é normal isso acontecer, o que podes fazer, é com a tal sessão, verificar isso logo na entrada, no login, e se a sessão for válida ele vai directo ao State desejado, não mostrando o painel de login, já que a sessão é mantida quando carregas no F5. Para realizar el F5 es normal que esto ocurra, lo que puede hacer es con este período de sesiones, marque esta vez en la entrada en el registro, y si la sesión es válida directa del Estado vai él quería, sin señal alguna del grupo, ya que el período de sesiones se celebrará durante la carga en la F5. Este fim de semana não devo ter muito tempo pra te fazer um exemplo, mas assim que possa eu faço. Este fin de semana yo no tenía mucho tiempo para obtener un ejemplo, pero también lo puedo hacer.

  12. José Carlos Fonseca José Carlos Fonseca
    Maio 11, 2008 às 3:21 pm | Permalink 11 de mayo de 2008 a 3:21 pm | Permalink

    Boa tarde Mário, Buenas tardes Juan,

    Podes dar-me uma ajuda? Usted puede darme una mano?

    Após inserir em alguns textinputs, queria que os dados surgissem num datagrid sem gravar na BD. Después de entrar en algunos textinputs, quería los datos surgen en un DataGrid sin registro en BD. E gravar na BD, atraves de um botao, gravar tudo o que estiver na mesma DataGrid. Y escribir para la BD a través de un botón, grabar todo lo que está en el mismo DataGrid.

    Obrigado. Gracias.

  13. Maio 11, 2008 às 6:54 pm | Permalink 11 de mayo de 2008 a 6:54 pm | Permalink

    Carlos, o aconselhado é criar um ArrayCollection, e trabalhar todos os seus dados nele, que tanto serve como dataProvider para a dataGrid, bem como para depois o enviar para a base de dados. Carlos, el consejo es crear un ArrayCollection, trabajo y todos sus datos en ella, que sirve tanto para dataProvider DataGrid y, a continuación, enviar a la base de datos.

    Tenho um exemplo no blog que explica como um arrayCollection pode servir para trabalhar com os dados na base de dados. Tengo un ejemplo en el blog que explica cómo un arrayCollection pueden servir para trabajar con datos en la base de datos.

    veja: http://msdevstudio.com/blog/2008/03/25/flex-datagrid-operaes-no-dataprovider/ Véase: http://msdevstudio.com/blog/2008/03/25/flex-datagrid-operaes-no-dataprovider/

    Quanto ao gravar na base de dados, enviar esse arrayCollection como parametro para o remoteObject. En el registro en la base de datos, enviar arrayCollection que como parámetro para la remoteObject.
    Ve o exemplo, se não conseguires fazer, coloca as tuas duvidas Ve un ejemplo, si no logran, pone sus dudas ;)

    Abraço.

  14. José Carlos Fonseca José Carlos Fonseca
    Maio 15, 2008 às 6:56 pm | Permalink 15 de mayo de 2008 a 6:56 pm | Permalink

    Olá Mario, Hola Mario,

    já tenho um arrayCollection com os dados. Tengo una arrayCollection con los datos.

    no remoteObject seria assim? No remoteObject sería?

    {dados} () Datos

    em que “dados” é o meu arrayCollection. donde "los datos" es mi arrayCollection.

    E no PHP como é que seria para inserir na tabela uma vez que o arrayCollection tem a seguinte estrutura: Y en PHP cómo sería para insertar en la tabla desde la arrayCollection está estructurado de la siguiente manera:

    dados = ["campo1, campo2, campo3" datos = [ "campo1, campo2, campo3"
    "campo3, campo4, campo5"] "campo3, campo4, campo5"]

    Obrigado! Gracias!

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  15. Maio 15, 2008 às 9:09 pm | Permalink 15 de mayo de 2008 a 9:09 pm | Permalink

    Boas! Bueno! :-)
    Ora então, considerando a seguinte funçao no php Pero entonces, teniendo en cuenta las siguientes funciones en php

    function insere($dados){ función inserta ($ datos) (

    $sql=”INSERT INTO `table` (`campo1`, `campo2`, `campo3`, `campo4`, `campo5`, `campo6`) VALUES (’$dados[0][campo1]‘, ‘$dados[0][campo2]‘, ‘$dados[0][campo3]‘, ‘$dados[1][campo4]‘, ‘$dados[1][campo5]‘, ‘$dados[1][campo6]‘)”; $ Sql = "INSERT INTO` tabla `(` campo1 `,` campo2 `,` campo3 `,` campo4 `,` campo5 `,` campo6 `) VALUES ( '$ datos [0] [campo1]', '$ datos [0] [campo2] ',' $ datos [0] [campo3] ',' $ datos [1] [campo4] ',' $ datos [1] [campo5] ',' $ datos [1] [campo6] ') ";

    if(mysql_query($sql)) return “ok”; if (mysql_query ($ sql)) return "ok";
    else return “error :”.mysql_error(); otra vuelta "error". mysql_error ();

    } )

    depois basta chamar a funçao no remote object, algo como um metodo assim no entonces simplemente llame a las funciones del mando a distancia objeto, algo así como un método bien en

    mx:remoteObject …resto…como target, detination..> mx: remoteObject resto…… como objetivo, detination ..>
    mx:method name=”insere” result=”insereRes(event)” > mx: método name = "insertar" resultado = "insereRes (event)">
    mx:arguments> MX: argumentos>
    dados> datos>
    {dados} () Datos
    /dados> / Datos>
    /mx:arguments> / MX: argumentos>
    /mx:method> / MX: Método>
    /mx:remoteObject> / MX: remoteObject>

    ps faltam as “< ” no inicio de cada linha, porque para colocar o código tem que ser assim! ps carecen de la "<" al comienzo de cada línea, porque para poner el código tiene que ser así!

    Isto deve resolver a tua questão… Esto debería resolver su pregunta… :)

    Um arrayCollection é tratado como um array de arrays no php, ou a tipica matriz (grelha de dados) e um simples Array é tratado como array… A arrayCollection es tratado como un array de arrays en php, o la típica matriz (en una escala de los datos) y una simple serie se trata como conjunto…

    Esperimenta e diz como correu…. Esperimenta y al igual que pasó….

  16. José Carlos Fonseca José Carlos Fonseca
    Maio 29, 2008 às 2:34 pm | Permalink 29 de mayo de 2008 a 2:34 pm | Permalink

    Olá Mário, Hola Juan,

    Estive ausente por uns dias por isso é que só agora respondo. Yo estaba ausente por unos días por lo que es sólo ahora que responder.

    Funcionou impcável! Trabajó impcável! Obrigado. Gracias.

    Estou a tentar controlar os campos textinput antes de enviar os dados para o datagrid. Estoy tratando de controlar los campamentos textinput antes de enviar los datos al DataGrid. Só me falta um teste que não estou a conseguir. Sólo me falta una prueba que no me lograr.

    Verificar se o que inserir no textinput já existe no datagrid. Compruebe si introduce la textinput ya existe en el DataGrid. Podes dar-me uma ajuda? Usted puede darme una mano?

    Obrigado. Gracias.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  17. Maio 29, 2008 às 2:41 pm | Permalink 29 de mayo de 2008 a 2:41 pm | Permalink

    private function existe(texto:String):Boolean { private function existe (texto: String): Boolean (

    var existeV:Boolean; Var existeV: Boolean;

    existeV=false; existeV = false;
    for(var x:int=0; x<meuDataProvider.lenght; x ) { for (var x: int = 0; x <meuDataProvider.lenght; x ) (

    if(String(meuDataProvider[x].campo_a_comparar)==texto) existeV=true; if (String (meuDataProvider [x]. campo_a_comparar) == texto) existeV = true;

    } )
    return existeV; Volver existeV;
    } )

    para verificar basta usares sólo para verificar el uso
    if(existe(String(meu_text_imput.text))=true) { //existe } si (existe (String (meu_text_imput.text)) = true) (/ /) existe
    else //não existe. else / / no existe.

    Nota que não testei, mas deve funcionar sem problemas. Tenga en cuenta que no probado, pero debería funcionar sin problemas.

    Seria isso? Sería esto?
    Abraço.

  18. José Carlos Fonseca José Carlos Fonseca
    Maio 29, 2008 às 3:29 pm | Permalink 29 de mayo de 2008 a 3:29 pm | Permalink

    Boas Mário, Juan Bueno,

    Perfeito! ¡Perfecto! O meu erro era que não estava a passar para String na condição IF. Mi error fue no ir a la Cadena con la condición de SI.

    Mais um pedido de ajuda: Otra solicitud de ayuda:

    Tenho em tabelas dados hierarquizados, ou seja, equipamentos->marcas->modelos Tengo un jerárquica tablas de datos, o equipo-> marcas-> modelos
    EX: Monitores -> ELOTouch -> 15 Polgadas EX: Monitores -> ELOTouch -> 15 Polgadas

    Criar um ecrã para mostrar estes dados o melhor, acho eu, seria atraves de um TreeControl datagrid. Crear una pantalla para mostrar estos datos el mejor, en mi opinión, sería un TreeControl DataGrid.

    No TreeControl aparecia Monitores -> ELOTouch -> 15 Polgadas e no dataGrid os vários dados do respectivo equipamento(nº de serie, cadastro, data, etc) En TreeControl apareció Monitores -> ELOTouch -> 15 Polgadas DataGrid y los distintos datos de su equipo (número de serie, registro, fecha, etc)

    Será muito trabalhoso fazer isto? Será muy duro para hacer esto? Por acaso tens algum exemplo por onde eu possa guiar? ¿Tiene usted algún ejemplo donde me pueden guiar? Ainda não encontrei nada na net. Aún no encontró nada en la red.

    Obrigado. Gracias.

    José Carlos Fonseca José Carlos Fonseca
    Fafe - Portugal Fafe - Portugal

  19. Maio 29, 2008 às 3:44 pm | Permalink 29 de mayo de 2008 a 3:44 pm | Permalink

    Bem, realmente os exemplos que se vêm são todos em MXML ou XML também por isso nunca trabalhei com as Tree’s, mas olha para este exemplo: Bueno, en realidad los ejemplos que están todos en MXML o XML también por qué nunca trabajó con el árbol, sino ver en este ejemplo:

    http://blog.flexexamples.com/2007/12/03/using-an-array-as-a-data-provider-in-a-flex-tree-control/ http://blog.flexexamples.com/2007/12/03/using-an-array-as-a-data-provider-in-a-flex-tree-control/

    como dataProvider tem um Array de objectos, isto pode ser recriado em action script e depois só tens que mandar o output do php no mesmo formato, que se já estás a mandar correctamente para o flex, deve servir sem problemas, mas tens que construir os teus dados no php como objectos… como dataProvider tiene una variedad de objetos, esto puede ser recreado en el guión de acción y, a continuación, sólo tienes que mandar la salida de php en el mismo formato, que ya están adecuadamente para mandar el flex, debe servir sin problemas, pero usted tiene que construir la php en sus datos como objetos…

    $array['dados']->nome=campoCategoria; $ Array [ 'datos'] -> nombre = campoCategoria;
    $array['dados']->conteudo[0]->valor1=Campo1; $ Array [ 'datos'] -> contenido [0] -> valor1 = Campo1;
    $array['dados']->conteudo[1]->valor2=Campo2; $ Array [ 'datos'] -> contenido [1] -> valor2 = Campo2;

    mas se eu encontrar algum exemplo eu aviso…. pero si he encontrado ningún ejemplo me doy cuenta….

    Abraço.

  20. Maio 29, 2008 às 3:47 pm | Permalink 29 de mayo de 2008 a 3:47 pm | Permalink

    Nem de proposito, ve aqui: Ni de respeto, ve aquí:

    http://www.adobe.com/devnet/flex/quickstart/working_with_tree/ http://www.adobe.com/devnet/flex/quickstart/working_with_tree/

    junto ao final da pagina tem a criação de um dataProvider para a tree, basta em php usares a mesma estrutura de dados. cerca del final de la página es la creación de un dataProvider para el árbol, justo en PHP utilizando la misma estructura de datos.

    o código fonte está em: las fuentes es el siguiente:
    http://www.adobe.com/devnet/flex/quickstart/working_with_tree/src/TreeKeepOpen/index.html http://www.adobe.com/devnet/flex/quickstart/working_with_tree/src/TreeKeepOpen/index.html

    Abraço.

  21. José Carlos Fonseca José Carlos Fonseca
    Maio 29, 2008 às 4:23 pm | Permalink 29 de mayo de 2008 a 4:23 pm | Permalink