Dias atrás a Macromedia liberou os tão esperados Macromedia Flash Remoting Components for Flash MX 2004 with ActionScript 2.0. Trata-se da atualização dos componentes de desenvolvimento para a tecnologia Flash Remoting que incluem classes, componentes e documentação.
Eu já introduzi aqui mesmo nessa coluna sobre o Flash Remoting, mas mesmo assim vou dar uma refrescada na cabeça de vocês.
O Macromedia Flash Remoting é um software que permite uma comunicação direta do Flash Player com o servidor através de um gateway e um formato de comunicação de dados chamado Action Message Format (AMF). Segundo a documentação do Flash Remoting, "O Macromedia Flash Remoting proporciona um canal de comunicação entre aplicativos Flash e uma grande variedade de dados e regras de negócio a partir de servidores ColdFusion, Microsoft®.NET, Java e WebServices baseados em Simple Object Access Protocol (SOAP)".
Como sempre, a Macromedia reinventou a roda. E nessa atualização dos componentes de desenvolvimento, muitos conceitos que eram de estrema importância na versão anterior, vieram totalmente remodelados. Vejamos a seguir o que mudou e o que é novidade no Flash Remoting:
- Componente Remoting Connector - Depois dos Data Components do Flash MX 2004 Professional, que inovaram a forma de acessar dados a partir de XML e WebServices, o Remoting Connector permite ao desenvolvedor conectar-se com um gateway Remoting, e executar um método podendo criar uma ligação direta entre os dados que retornam do método com outros componentes de interface sem a necessidade de nenhum código. Isso torna o desenvolvimento ainda mais prático e produtivo.
- Nova Flash Remoting API - A Macromedia atualizou todas as classes para o novo modelo de classes segundo a especificação ECMA-4 Class-based como é o ActionScript 2.0. Isso trouxe algumas mudanças já esperadas tais como:
. Restrição à maiúsculas e minúsculas. Isso quer dizer que a variável "conexaoGateway" é diferente de "ConexaoGateway"
. Restrição a tipos de dados de variáveis tornando o desenvolvimento bem mais exato e seguro
. Sutil alteração na classe NetServices em relação ao método "setDefaultGatewayURL" que foi renomeado para "setDefaultGatewayUrl". Note a diferença entre "URL" e "Url".
. Nova classe "Service". A Classe Service veio para aposentar a classe NetServices permitindo a criar uma conexão com um gateway Remoting e ao mesmo tempo se referir à um serviço criado por você.
. Nova classe "Connection" que permite criar conexões diretas a gateways Remoting
. Nova classe "PendingCall". A cada execução de métodos no servidor, um objeto da classe PendingCall é criado para se identificar cada execução num processo separado de forma mais organizada.
. Nova classe "RelayResponder" que permite você criar funções personalizadas para as respostas dos métodos a partir do servidor. Usando a classe RelayResponder, não é mais necessário o uso de sufixos nas funções como era antes usando "_Result" e "_Status".
. O Objeto da classe RecordSet agora tem as seguintes novas características: Propriedades (columnNames, items, and length), e novos métodos (clear(), contains(), editField(), getEditingData(), getIterator(), getLocalLength(), getRemoteLength(), isEmpty(), and sortItems()), além do novo evento modelChanged.
Além dessas novas características da API do Flash Remoting, classes como DataGlue e NetServices ainda permanecem na API.
Na primeira versão dos componentes, tudo era baseado na classe NetServices. Sem ela não era possível criar qualquer conexão com o gateway e consequentemente não era possível usar o Flash Remoting. Porém, parece que a Macromedia "enjoa" das classes e a classe NetServices aparece agora com a observação "Deprecated" no painel de Actions e no Help. Isso quer dizer que a NetServices agora tem seu uso desencorajado pela Macromedia. Em seu lugar, devem ser usadas as classes "Service" e "Connection".
Vamos à prática?
Farei um exemplo de helloWorld usando Flash Remoting AS2.0 e em seguida criaremos algo que traga dados de uma base de dados.
Nesse exemplo, usarei um servidor ColdFusion MX Enterprise Edition rodando no IIS do Windows XP Professional.
Você pode baixar completamente grátis a versão developer Edition do Macromedia ColdFusion MX 6.1 a partir do site da macromedia em:
Os componentes de desenvolvimento do Flash Remoting para Flash MX 2004 com ActionScript 2.0 você baixa em:
Macromedia Flash Remoting Page
A primeira coisa que devo fazer é criar meus componentes de regras de negócio. Para isso, usarei o Dreamweaver MX 2004.
Crie um Novo site do Dreamweaver selecionando "Site->Manage Sites" e em seguida "New->Site". Na janela que abrirá, configure com as seguintes opções:

Agora que temos nosso site configurado, criaremos nosso componente. O Dreamweaver possibilita uma conexão direta com o servidor de teste remotamente ou localmente a partir da sua própria interface. Para isso, basta que esteja aberto qualquer documento do tipo "ColdFusion" e que seja informado no painel "Application" a senha para o servidor RDS que você deve ter configurado previamente durante a instalação e configuração do seu servidor ColdFusion.
Caso você já tenha feito isso, a aparência do seu painel Application->Components deverá ser essa:

Clique no sinal de "+" para criar um novo componente ColdFusion usando o wizard.
Configure o wizard seguindo os seguintes passos:
01. Configure o componente.
Defina o component Directory para o seguinte endereço: C:Inetpubwwwrootartigosimasters emoting ou <raiz do seu servidor web>artigosimasters emoting

02. Determine quais funções o componente conterá

03. Defina os argumentos para suas funções

Após seguidos os passos, o componente se parecerá com isso:
<!--- Generated by Dreamweaver MX 2004 7.0.1.2181 [en] (Win32) - Sun Jun 20 16:52:49 GMT-0300 (Hora oficial do Brasil) 2004 --->
<cfcomponent displayName="iMasters"
hint="Olá mundo">
<cffunction name="olaMundo" hint="Retorna uma
frase" access="remote" returnType="string"
output="false">
<cfargument name="umNome" hint="Recebe o nome
da pessoa" type="string" required="true">
<!--- olaMundo body --->
<cfreturn >
</cffunction>
</cfcomponent>
Esse é o componente modelo criado pelo Wizard do Dreamweaver que também pode ser criado por você manualmente.
Apenas altere a linha: <cfreturn> para: <cfreturn "#umNome# diz: Olá Mundo !">
O resultado será:
<!--- Generated by Dreamweaver MX 2004 7.0.1.2181 [en] (Win32) - Sun Jun 20 16:52:49 GMT-0300 (Hora oficial do Brasil) 2004 --->
<cfcomponent displayName="iMasters"
hint="Olá mundo">
<cffunction name="olaMundo" hint="Retorna uma
frase" access="remote" returnType="string"
output="false">
<cfargument name="umNome" hint="Recebe o nome
da pessoa" type="string" required="true">
<!--- olaMundo body --->
<cfreturn "#umNome# diz: Olá Mundo !">
</cffunction>
</cfcomponent>
Vamos agora ao Flash.
Criaremos um arquivo que irá conectar-se a esse componente ColdFusion e exibirá na tela a mensagem retornada pelo método "olaMundo" definido no componente usando Flash Remoting com AS2.0.
Para que você possa criar conteúdo dinâmico com FlashRemoting, precisará usar as classes do Remoting. E para isso, você precisa adicionar à library do seu arquivo .FLA o Compiled Clip que contém as classes. Esse Compiled Clip encontra-se no menu "Window->Other Panels-Common Libraries->Remoting".

Arraste para a library do seu arquivo, o Compiled Clip "RemotingClasses".
Vamos ao código:
//importando as classes do
Remoting AS 2.0
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
//Conectando-se ao gateway
e ao serviço ao mesmo tempo
var sImasters = new Service("http://localhost/flashservices/gateway",
null, "artigos.imasters.remoting.imasters", null);
//executando o método
"olaMundo" definido no componente ColdFusion
var chamada:PendingCall = sImasters.olaMundo("Neto");
//A propriedade responder
define o objeto que irá responder pelos resultados do servidor
chamada.responder = new RelayResponder(this, "funcaoSucesso",
"funcaoErro");
//Essa função
só executará caso o método seja executado
com sucesso
function funcaoSucesso(resultado:ResultEvent):Void{
//A propriedade "result" traz os dados da mesma forma
que foram enviados do servidor
trace(resultado.result); //Deverá aparecer a mensagem:
"Neto diz: Olá mundo !" na janela output
}
//Essa função executará caso haja algum erro
com o componente
function funcaoErro(erros:FaultEvent):Void{
trace("O erro ocorrido foi: " + erros.fault.faultstring);
}
Como pudemos ver, é muito simples conectar-se ao servidor remoting. Veja na figura a seguir como funciona o fluxo de dados de uma aplicação remoting:

Vejamos agora um exemplo do uso do FlashRemoting para consulta de bancos de dados com ColdFusion components.
Abra o arquivo "imasters.cfc" e inclua nele a seguinte função:
<cffunction access="remote"
name="getProdutos" returntype="query" output="false">
<cfquery datasource="northmysql" name="qProdutos">
Select * from produtos order by NomeDoProduto
</cfquery>
<cfreturn qProdutos>
</cffunction>
Note que foi usado o datasource "northmysql" que é o banco de dados NorthWind que vêm na instalação do Microsoft Access. Você pode utilizá-lo para estudos e usando ferramentas como o MySql-Front, é possível importar os dados de um arquivo MDB (como é o NorthWind) em uma base de dados MySql.
Essa função apenas consulta a tabela "produtos" e retorna o objeto "query" com o resultado da consulta sem qualquer tratamento adicional. Essa query será enviada para o Flash que receberá os dados como uma instância da classe "RecordSet".
No Flash, siga os seguintes passos:
- Importe para sua library o Compiled Clip
"RemotingClasses"
- Arraste para o Stage um componente "List"
Selecione um frame da Timeline e abra o painel Actions. Veja o código:
//Importando as classes do
remoting
import mx.remoting.Service;
import mx.remoting.DataGlue; //A classe DataGlue permite "colar"
os dados de um recordset em um componente
import mx.remoting.Connection;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
//Conectando-se ao gateway
e ao serviço
var sImasters:Service = new Service("http://localhost/flashservices/gateway/",
null, "artigos.imasters.remoting.imasters", null);
//Executando a função
"getProdutos" no serviço
var chamada:PendingCall = sImasters.getProdutos();
//Aguardando a resposta do
servidor
chamada.responder = new RelayResponder(this, "preencheGrid",
"mostraErros");
function preencheGrid(res:ResultEvent):Void{
//Preenchendo o componente List
DataGlue.bindFormatStrings(lstProdutos, res.result, "#CodigoDoProduto#
- #NomeDoProduto#", "#CodigoDoProduto#");
}
function mostraErros(erros:FaultEvent):Void{
trace(erros.fault.faultstring);
}
Percebam que a metodologia de desenvolvimento está
bem mais apurada e organizada.
Usando Flash Remoting, você consegue criar uma arquitetura
de desenvolvimento em camadas segundo as mais rígidas formas
de desenvolvimento conhecidas.
Assim, você e sua equipe podem trabalhar em um mesmo projeto de forma organizada, precisa e de fácil manutenção.
Esse foi nosso assunto de hoje. Obrigado e até a próxima!
Criei o componente no MX, baixei o componente do flash remotin, fiz tudo o que o tutorial pede, mas na hora de rodar o arquivo FLA. Obtive o seguinte resultado: "O erro ocorrido foi: Service threw an exception during method invocation: No service named artigos.imasters.remoting.imasters is known to Flash Remoting MX."
O que fazer?
Seguindo todas as orientações do artigo acima, consegui acessar a função no arquivo CFC, mas recebo a resposta infinitas vezes, ou seja, fica aparecendo constantemente no trace a frase ”Neto diz: Olá mundo”.
Tentei colocar a função “funcaoSucesso” dentro do evento onPress de um botão, sendo que ao invés de resolver o problema, passeia a não receber nenhuma resposta do arquivo CFC.
O que devo fazer?
Você bem que poderia reescrever o seu artigo de envio de e-mail com amfphp demonstrando essa diferenças na codificação principalmente quanto a substituição do _Result
Responder comentárioOs textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Neto Leal é Macromedia Certified Instructor em diversas ferramentas da Macromedia, Palestrante iMasters, Instrutor da iMedia e Leader Group Macromedia em Recife.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.