Populando um Datagrid usando AMFPHP

Read english version here

Na internet temos vários exemplos de uso do AMFPHP para criação de RIA’s. Veremos algo mais elaborado que um “Hello World�? e que realmente vamos precisar e usar, vamos popular um Datadrid usando o AMFPHP.
Partiremos do pressuposto que você tem noção de MySQL, PHP, Flash e Flash Remoting. Primeiro a nossa estrutura de banco de dados será simples, terá nome e-mail e telefone. Vamos criar a tabela e inserir alguns registros nela.

  1. ##table usuarios
  2. CREATE TABLE `usuarios` (
  3.   `id` int(4) unsigned NOT NULL auto_increment,
  4.   `nome` char(80) default NULL,
  5.   `email` char(100) default NULL,
  6.   `telefone` char(10) default NULL,
  7.   PRIMARY KEY  (`id`)
  8. ) ENGINE=MyISAM ;
  9.  
  10. INSERT INTO `usuarios` VALUES ('', 'Fulano', 'fulano@fulanodetal.com.br','555555555');
  11. INSERT INTO `usuarios` VALUES ('', 'Sicranos', 'sicrano@sicranodetal.com', '55555555');
  12. INSERT INTO `usuarios` VALUES ('', 'É Nois na Fita', 'eu@nois.com.br', '44444444');
  13. INSERT INTO `usuarios` VALUES ('', 'E Ai como vai', 'meu@amigo.net', '22222222');
  14. INSERT INTO `usuarios` VALUES ('', 'Eu Bebo Sim', 'cachaca@daboa.net', '22222222');

Temos nossa tabela do banco de dados criada, agora criaremos a classe do AMFPHP que fará a conexao com o banco e retornará os dados para o Flash.

  1. < ?php
  2. class query{
  3.     var $host = "localhost";
  4.     var $user = 'root';
  5.     var $database = 'seubanco';
  6.     var $pass = 'suasenha';
  7.  
  8.     function query(){
  9.         $this->methodTable = array(
  10.         "get_user"=>array(
  11.         "description"=>"populando nosso datagrid",
  12.         "access"=>"remote"
  13.         )
  14.         );
  15.         $this->conexao = mysql_pconnect($this->host,$this->user,$this->pass);
  16.         mysql_select_db($this->database);
  17.     }
  18.  
  19.     function get_user(){
  20.         $query = mysql_query("SELECT * FROM usuarios");
  21.         if (!mysql_error()) {
  22.             return $query;
  23.         }else {
  24.             return mysql_error();
  25.         }
  26.     }
  27. }?>

Até aqui tudo certo, agora vamos ao Flash. Abra um novo documento, vamos usar so uma camada e um frame para importar todas as classes necessárias do Flash Remoting.

ActionScript

  1. //classes do Flash Remoting
  2. import mx.remoting.Service;
  3. import mx.services.Log;
  4. import mx.rpc.RelayResponder;
  5. import mx.rpc.FaultEvent;
  6. import mx.remoting.DataGlue;
  7. import mx.rpc.ResultEvent;
  8. import mx.remoting.PendingCall;
  9. import mx.remoting.RecordSet;
  10. //criando a conexão do flash remoting para o AMFPHP
  11. //coloque o endereço do seu servidor e a sua classe
  12. var conexao = new Service("http://localhost//flashservices/gateway.php", new Log(), "query", null, null);
  13. //chamando o metodo get_user()
  14. var pcs:PendingCall = conexao.get_user();
  15. pcs.responder = new RelayResponder(this, "user_Result", "user_Fault");
  16. function user_Result(res:ResultEvent) {
  17.     var grid = _root.createClassObject(mx.controls.DataGrid, "dg", _root.getNextHighestDepth(), {_x:20, _y:20});
  18.     grid.setSize(400, 350);
  19.     grid.dataProvider = res.result;
  20. }
  21. function user_Fault(fault:FaultEvent) {
  22.     trace(fault.fault.faultstring);
  23. }

E acabamos, você deve estar se perguntando, e o DataGrid? Onde está? Não devemos coloca-la no filme?. A resposta é não, porque ela será criada dinamicamente na linha:

ActionScript

  1. var grid = _root.createClassObject(mx.controls.DataGrid, "dg", _root.getNextHighestDepth(), {_x:20, _y:20});

A DataGrid será criada com o nome de estância “dg�? e nas posiçoes x = 20 e y = 20. Logo em seguida é determinado seu tamanho com o método setSize().
O único requisito é que o componente DataGrid esteja na biblioteca do filme.
Um momento, mas se eu quiser mostrar somente alguns campos no datagrid?
Existem dois métodos para isso, um usando o action script (mais trabalhoso) e outro na própria classe do AMFPHP mostrado a seguir:
Basta mudar a linha da classe do AMFPHP

  1. $query = mysql_query("SELECT nome,email FROM usuarios");

Nos próximos artigos mostrarei como implementar nossa aplicação inserindo, editando e excluindo registros do banco de dados assim como configurar o layout e os cabeçalhos de nossa DataGrid.

AMFPHP
http://www.amfphp.org/

Macromedia Flash Remoting
http://www.macromedia.com/devnet/flashremoting/

English Version

AMFPHP, Flash, Flash Platform, Flash Remoting, PHP, RIA

9 comments


  1. Oi Leo,
    parabéns pelo texto, muito bom mesmo, até deu coragem de trabalhar com Flash, :).

    Agora tive uma dúvida, não trabalho com Flash e não conheço essas tecnologias relacionadas, aí pensei, bem que o Leo podia criar um artigo falando sobre cada tecnologia relacionada e falar como implementar cada uma delas. Como funciona o Flash Remoting, como funciona o AMF e como instala tudo isso.

    Pensa nos designers que trabalha com arte em Flash? Seria interessante para eles aprender como adicionar mais recursos de interação entre cliente/servidor nos trabalhos em Flash, mais começar do zero, não é fácil, e seria ótimo ter um bom artigo dizendo como botar tudo isso junto e funcionando.

    Um abraço, wendel.

  2. Dustin

    Is there by chance an english version of this tutorial?

  3. Wilson

    Amigo, simplesmente nao carrega os dados no datagrid.
    Aparece a seguinte mensagem na saida do flash.

    1/16 18:40:49 [INFO] : Invoking get_user on query.

    O Remoting esta instalado, o AMFPHP tambem, ja fiz um teste e esta rodando. Apenas o seu exemplo que nao aparece, ja coloquei o datagrid na biblioteca mesmo assim nao funciona, o que pode ser?

  4. Wilson

    Opa, consegui Leonardo.
    Parabens pelo seu post.

  5. Geison

    O Wilson poderia ter escrito como sanou o problema,poi estou com a mesma duvida… :’

  6. Rodrigo

    O Meu teste nao carrega nada a tela fica em branco pq?

  7. veja se o component “DataGrid” esta na biblioteca do filme, pois este é criado dinâmicamente ou você pode deixar um no Stage e colocar o nome de instancia “dg”.

    ate mais
    Leonardo França

  8. Cabral

    Minha tela tb fica em branco!!

    Vc poderia disponibilizar os arquivos para que pudessemos visualizar mais facilmente!!

    Abraços
    Reinaldo Cabral

  9. Miguel Simão

    Também não consigo visualizar a DataGrid. Dá para facultar os ficheiros?

    Obrigado,
    Miguel Simão