Integrando Adobe Flex - FluorineFx - C#
Integrando Adobe Flex - FluorineFx - C#
Integrando Adobe Flex - FluorineFx - C#
<configuration>
<configSections>
<sectionGroup name="fluorinefx">
<section name="settings"
type="FluorineFx.Configuration.XmlConfigurator, FluorineFx"/>
</sectionGroup>
</configSections>
<system.web>
<httpModules>
<add name="FluorineGateway"
type="FluorineFx.FluorineGateway, FluorineFx"/>
</httpModules>
</system.web>
</configuration>
using FluorineFx;
using System.Collections.Generic;
namespace IntegracaoFlex
/// <summary>
/// </summary>
[RemotingService]
#region Atributos
/// Id da Pessoa.
/// </summary>
/// <summary>
/// </summary>
/// <summary>
/// </summary>
#endregion
#region Construtores
/// <summary>
/// </summary>
public Pessoa()
/// <summary>
/// </summary>
this._id_Pessoa = id_Pessoa;
this._nome = nome;
this._telefone = telefone;
#endregion
#region Metodos
/// <summary>
/// </summary>
return _retorno;
/// <summary>
/// </summary>
return _lista;
#endregion
Note a tag [RemotingService] na declaração da classe, esta serve para que o Fluorine saiba que esta
classe é remota e será acessada por um método do flex.
Bom pessoal, nesta primeira parte criamos o nosso projeto no Visual Studio o configuramos o
Fluorine para que possamos chamar os métodos via flex.
No próximo tutorial iremos fazer o projeto no Flex chamar nossos métodos Insere e Lista do .net.
Agradeço a todos e até a próxima!
Integrando Adobe Flex - FluorineFx - C#.net (Parte 2/2)
Categoria: C#.net, Flex, FluorineFx — Vinícius Sandim @ 14:47
[ Assista agora a palestra sobre este post realizada durante a Flex Mania 2009 ]
Olá pessoal, hoje finalmente vou postar a segunda parte do artigo, neste post vamos utilizar os
nossos métodos Insere e Lista, criados anteriormente no asp.net.
Então vamos lá…
1 - Crie um projeto no Flex do tipo Flex Project e nomeie como IntegracaoFlex.
2 - Crie uma pasta chamada mapeamento dentro da pasta src do projeto. (Botão direito do mouse
sobre a pasta src New>Folder). O Flex interpreta esta pasta como um package, é um conceito muito
parecido com o das Namespaces no Visual Studio. Dentro desta pasta vamos mapear as nossas
classes criadas no asp.net, como no nosso exemplo temos uma classe só, a Pessoa, vamos
implementa-la.
3 - Crie uma nova classe dentro de nossa pasta/package mapeamento, dê o nome de Pessoa, este
nome deve ser idêntico ao da classe criada anteriormente no asp.net. (Botão direito sobre a pasta
mapeamento New>ActionScript Class), preencha apenas o campo Name com o valor Pessoa.
4 - Agora vamos implementar apenas os atributos da nossa classe criada no asp.net, portanto deixe a
classe pessoa da seguinte maneira:
package mapeamento
[RemoteClass(alias="IntegracaoFlex.Pessoa")]
Desta forma temos a classe Pessoa com os atibutos Id_Pessoa, Nome e Telefone, note que o
conceito para o desenvolvimento dos nossos atributos é muito parecido com a do C#.net, ou seja,
temos as palavras reservadas get e set para que o complilador entenda que determinada function é
um atributo da classe, e não uma function convencional.
Assim como no nome da classe, o nome dos atributos também devem ser idênticos no C#.net e no
ActionScript, inclusive os tipos, para que o fluorine fa’xa a serialização C#.net>ActionScript
corretamente. Veja mais na documentação oficial do fluorine a tabela completa de serialização.
5 - Agora vamos realmente fazer o mapeamento dos objetos ActionScript>C#.net, para isso, crie
um arquivo XML dentro da pasta src do nosso projeto e dê o nome de services-config.xml (Botão
direito do mouse sobre a pasta src New>File). Preencha o campo File name com o valor services-
config.xml. Deixe o arquivo da seguinte maneira:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="remoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="fluorine">
<channels>
<channel ref="my-amf"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<endpoint uri="http://localhost:3024/Negocio/Gateway.aspx"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
Agora execute o seu website criado no VisualStudio anteriormente, ele deverá exibir a lista de
arquivos encontrados, isso acontece por que não temos uma página Default.aspx, clique sobre a
página Gateway.aspx no navegador, ele abrirá uma pagina em branco, pois não temos nada de
interface na Gateway.aspx, o que precisamos agora é do endereço dessa página, copie na barra de
endereços do navegador, deve ser algo parecido com
(http://localhost:3024/Negocio/Gateway.aspx), o que vai alterar é apenas o número da porta gerado
pelo servidor web do VisualStudio, e coloque o endereço na tag uri do atributo endpoint, para este
endereço de sua página Gateway no arquivo XML criado agora.
6 - Agora para finalizarmos o mapeamento, precisamos informar ao compilador do Flex que a
configuração de serviços remotos que utilizamos em nosso projeto é o arquivo services-config.xlm,
para isso, vá até o Flex Navigator, clique com o botão direito do mouse sobre o projeto
IntegracaoFlex>Properties, ele abrirá a janela de propriedades de seu projeto, vá até o menu
FlexCompiler e deixe o campo Additional compiler arguments com o seguinte valor:
-locale en_US -services services-config.xml
7 - Pronto, o nosso projeto está configurado e vai enxergar a nossa classe no asp.net, agora vamos
testar.
8 - Abra o arquivo principal de nosso projeto, o IntegracaoFlex.mxml e adicione uma tag
<mx:Script></mx:Script>.
Dentro da tag importe os seguintes packages:
import mx.collections.ArrayCollection;
import mx.rpc.remoting.mxml.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mapeamento.Pessoa;
**/
remoteObj.addEventListener(FaultEvent.FAULT, fncFalha);
//Verifica se é null porque nem sempre um método vai retornar algum valor.
if (fncOk != null)
/**
**/
evt.fault.message, "Erro");
**/
if (evt.result != null){
/**
**/
if (evt.type == MouseEvent.CLICK){
//Configura a Pessoa
pessoa.Id_Pessoa = int(txtId_Pessoa.text);
pessoa.Nome = txtNome.text;
pessoa.Telefone = txtTelefone.text;
remoteObj.getOperation("Insere").send(pessoa);
label="Inserir"
id="btnInserir"
click="btnInserir_click(event);"/>
12 - Para testarmos a aplicação, primeiramente execute o website no visual studio, depois compile o
projeto no flex. O navegador será aberto, preencha os campos e clique sobre o botão Inserir. Vocé
deverá ver uma mensagem na tela com dos dados do cliente inserido. Caso ocorreu algum erro,
verifique se todos os passos foram feitos corretamente.
TESTANDO O MÉTODO LISTA
13 - Finalmente vamos testar o nosso método Lista que retorna um List<Pessoa> do asp.net. Para
isso adicione 1 componente DataGrid e 1 Componente Button. Renomeie os componentes da
seguinte forma:
DataGrid: grdPessoas
Button: btnLista
14 - Edite as colunas do DataGrid deixando-as da seguinte forma:
<mx:DataGrid y="42" width="489" right="10" id="grdPessoas" height="200">
<mx:columns>
</mx:columns>
</mx:DataGrid>
Note que o atributo dataField deve ser idêntico ao atributo da classe Pessoa que será retornado.
15 - Agora vamos criar duas functions para a execução do evento, uma é para o click do botao
btnLista, e outra para tratar retorno do método:
/**
**/
if (evt.result != null){
/**
**/
remoteObj.getOperation("Lista").send();
16 - Finalmente adicionamos a tag click no botao btnLista assim como foi feito no btnInserir,
deixando-o da seguibte forma:
label="Listar"
id="btnListar"
click="btnListar_click(event);"/>
17 - Para testar, caso a aplicação web não esteja rodando, execute-a no VisualStudio, depois
compile o Flex para roda-la. Clique sobre o botão Listar, note que o grid será populado com os
dados que inserimos na lista do asp.net.
Bom pessoal, é isso, um tutorial básico para integração do flex com o .net, executando métodos que
esperam parâmetros complexos, e retornam lista. Espero ter ajudado, qualquer dúvida é só deixar
um comentário.
Até a próxima.