jan 24 2009

Agenda de Contatos (Flex + FluorineFx + C#.net + Access)

Categoria: C#.net, CRUD, Exemplos, Flex, FluorineFx, Visual StudioVinícius Sandim @ 09:35

Olá pessoal, há tempos estou querendo fazer um exemplo de CRUD usando o Flex com .Net, e enfim consegui um tempo e preparei uma Agenda de Contatos.

É uma aplicação bem didática que aborda conceitos de Inserir, Atualizar, Excluir e Selecionar registros em uma base de dados.

De início pode parecer que compliquei o desenvolvimento, mas é que eu quis demonstrar não apenas o CRUD, mas também como chamar outro componente baseado em Canvas para fazer a Inserção e Edição.

Também fiz uma classe que herda RemoteObject para executar nossos métodos do ASP.net de forma mais fácil.

Eu diria que este exemplo é um complemento do outro tutorial que fiz de como integrar o Flex com .Net.

Usei um pouco de CSS e alguns Effects, coisa simples mas que fica bem bacana.

A aplicação está disponível on line neste link. (O view source dela está habilitado)

O download do código está disponível neste outro link.

33 Responses to “Agenda de Contatos (Flex + FluorineFx + C#.net + Access)”

  1. Antonio de Lemos says:

    Olá Vinicius.
    Depois que vi seu exemplo surgiu a seguinte dúvida.
    Tem como integrar net com flex usando o linq?
    Se usar o linq terei algum problema na integração?

    Pergunto isso pois sou desenvolvedor java e sofro com alguns problemas na integração de java + hibernate + spring + blazeds + flex, o velho problema de lazy loading.
    Vi que o linq também tem lazy load então fiquei com essa dúvida, já procurei pela internet e não achei nenhum artigo ou tutorial desta integração usando linq.

    Outra pergunta, qual seria mais apropriado para essa integração weborb ou fluorinefx?

    Obrigado e parabéns pelo seu exemplo.

  2. Gustav says:

    Grande Vinicius!

    Cada post que você põe aqui me ajuda em algo aqui, mas eu gostaria de saber, se você sabe algum jeito de passar o DataTable pro Flex..
    Como não programo a muito tempo em flex e em .NET ainda nào consegui nenhuma solução…

    Valeu e parabéns pelo exemplo!

  3. Vinícius Sandim says:

    Bom dia Antônio…

    Primeiramente obrigado!! =D

    Olha eu tenho certeza que com o linq funciona, mas realmente não sei te dizer como é o lazyload dele, pois nunca fiz nenhum teste. No meu caso uso ADO.net nativo, como no exemplo e meio que faço o lazy “na mão”.

  4. Vinícius Sandim says:

    Bom dia Gustavo, obrigado pelo comentário…

    Cara eu sei que funciona, e segundo a tabela de conversão do FluorineFx:
    http://www.fluorinefx.com/docs/fluorine/typeconversion.html
    o ActionScript recebe o DataTable como Object.

    Mas sinceramente não sei como fica, pois neste caso teremos objetos genéricos, o que pode dificultar o seu desenvolvimento.

    Gosto sempre de trabalhar com mapeamento de classes, pois os objetos ficam fortemente “tipados”.

    Quando der um tempo vou fazer uns testes e posto os comentários.

  5. Vinicius says:

    E ae Vinícius, muito bom o post, como sempre esclarecedor. Parabéns. Você teria um link ou material que ensinasse a fazer um menu bar dinamico. Dependendo do usuário logado ele montaria um menu?
    Grato

  6. Wilson says:

    Olá vinicius…

    cara, adorei seu tutorial, muito bom mesmo!!!

    rodei ele aqui na meu pc e funcionou perfeitamente!!!

    Como estou estudando Flex, eu comecei a observar como vc o fez… daí me surgiu uma dúvida:

    pra que server esse trecho de código vinicius?

    private var _rstOk:Function;
    public function set rstOk(valor:Function):void { this._rstOk = valor; }

    private var _rstCancelar:Function;
    public function set rstCancelar(valor:Function):void { this._rstCancelar = valor; }

    pode me explicar? vc declarou uma variavel do tipo function é isso? na praia porque vc fez isso? (desculpa a pergunta idiota mas eu sou realmente novato)

    abraço!

  7. Vinícius Sandim says:

    Olá Wilson, sua pergunta não é tão básica assim não, realmente o Flex trabalha com um conceito um pouco diferente do que estams acostumados em Delphi ou C# ou até mesmo VB.

    Acontece que ele usa chamadas assíncronas, ou seja, ele “sai” executando todas as linhas do seu código antes que a anterior termine.

    Ná prática acontece assim:

    1 - Código;
    2 - CódigoMaisDemorado;
    3 - Código;

    Imagine sua aplicação rodando os códigos acima, normalmente em Delphi ou C# como exemplifiquei, ela rodará a linha 1, só depois de terminar de executar ele vai para a linha 2 e só após completar a execução dela o sistema começará a rodar a linha 3.

    No Flex é diferente, ele roda a linha 1, já começa a rodar a 2 e já começa a rodar a 3.

    Esse é um dos motivos para usarmos os ResultsEvents do Flex, que no exemplo eu usei como Function.

    Como funciona, eu tenho uma Function como atributo da minha classe (tela no caso), e só depois de eu fazer o que quiser nesta tela, chamarei ela.

    Neste caso o código fica encapsulado, ou seja, independente de onde eu chamar est tela, quando for o “Resultado” dela for OK ele executa a função que recebeu como parâmetro da tela que a chamou, e para o Cancelar a mesma coisa.

    É meio complexo o negócio no começo, mas assim que você entender o conceito corretamente não vai mais querer largar Flex ;)

  8. Rodrigo says:

    Fala Vinicius, muito bacana o tutorial.

    Ele é muito semelhante a um que eu tinha feito aqui pra estudar, porém o método que usei para integrar com o .NET e obter/gravar dados no BD foi o HttpService. Vi que vc usou uma abordagem diferente, o RemotingService.

    Sabe me dizer qual é mais vantajoso e por quê?

    Obrigado.

  9. Vinícius Sandim says:

    Olá Rodrigo, tudo bem!

    Então é difícil dizer qual é melhor, depende de onde você vai aplicar.

    Aqui na empresa sempre optamos pelo RemoteObject, pois ele é bem mais rápido do que o HttpService, porém dá um pouco mais de trabalho para desenvolver e mapear as classes Flex/.Net e tal.

    Veja neste link a comparação entre as 3 formas de integração: HttpService, WebService e RemoteObject…

    http://www.themidnightcoders.com/blog/2007/03/flex-remoteobject-vs-webservice.html

  10. Felipe aguiar says:

    Olá Vinícius. Muito Bom este artigo. Estou iniciando em flex e tenho uma duvida. Gostaria de saber como faço para conectar com uma base que está no SQL Server. Ja tentei de tudo aqui.. mas não funciona. desde já, agradeço a sua atenção.

  11. Vinícius Sandim says:

    Olá Felipe..

    Para usar o SqlServer você precisará apenas de mudar a string de conexão do arquivo Web.config.
    Use a opção “Build Connection String” do Visual Studio e aponte o seu banco de dados.

    Pra ficar melhor ainda, recomendo você mudar as classes OleDb para Sql, e com isso obter acesso nativo ao SqlServer, para isso você substituirá as seguintes classes:

    OleDbConnection > SqlConnection
    OleDbCommand > SqlCommand
    OleDbDataReader > SqlDataReader

    Pesquise sobre o assunto, é bem simples de se fazer.

  12. Felipe aguiar says:

    Valeu vinicius. Funcionou!! =)

  13. Gustavo says:

    Opa! estou tentando publicar uma aplicaçao flex, e da erro no Gateway.aspx
    Tem como vc explicar como fica a hierarquia dos arquivos no servidor de ftp ?

    vlw !

  14. Vinícius Sandim says:

    Boa tarde Gustavo, devido a grande procura, acabei fazendo um post sobre este assunto, da uma olhada:

    http://www.viniciussandim.com/?p=184

    Qualquer dúvida deixe um comentário por lá. :)

  15. Daniele says:

    Bom dia Vinicius,
    Estou começando a trabalhar com flex agora, então baixei o seu código pra testar o seu funciona perfeitamente, porém tentei fazer o meu com base no seu e o flex não consegue enxergar os métodos no asp.net

  16. Vinícius Sandim says:

    Olá Daniele..

    Recomendo você dar uma olhada no tutorial “Integrando Adobe Flex - FluorineFx - C#.net”, pois lá é feito passo a passo a configuração do FluorineFx, assim fica mais fácil você encontrar onde está o problema, seguem os links:

    Parte 1 -> http://www.viniciussandim.com/?p=60
    Parte 2 -> http://www.viniciussandim.com/?p=61
    Source -> http://www.viniciussandim.com/?p=80

    Att;

  17. Marco Aurelio says:

    Vinicius,

    Primeiramente parabéns pela iniciativa.
    Segundo, eu fiz o seu tutorial e o tutorial deste link: http://programandoem.net/2008/08/05/criando-um-projeto-flex-3-com-fluorinefx-e-linq-parte-1/

    Voce usou um versão diferente do fluorine? Já que neste tutorial não precisamos configurar nada. Qual a diferença??

  18. Vinícius Sandim says:

    Olá Marco, obrigado…

    Acontece que no tutorial mencionado, o SaintBr usa o template que o FluorineFx cria no Visual Studio.
    Este template cria um monte de arquivos de configuração e alguns de exemplo.
    No meu caso prefiro criar apenas as tags que irei utilizar, pois acho que template cria muito código atoa.

  19. Marco Aurelio says:

    Entendi!
    Valeu pela rápida resposta!

  20. Gabriel says:

    Olá Vinícius,

    Não consegui compilar. Na verdade não entendi muito bem o método de compilação. É necessário IIS para rodar a aplicação ? ou se eu rodar no VS e depois no Flex builder vai funcionar ?

    Abraço

  21. Zanotti says:

    Olá Vinícios,

    Estou tendo um problema com uma aplicação onde ao abrir o site é carregado normalmente mas ao tentar conectar ao banco ele mostra este erro:

    faultCode:Client.Error.MessageSend faultString:’Send failed’ faultDetail:’Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url

    Não sei o que pode ser, mas acho que não esta ativando o Gateway.aspx.

  22. Vinícius Sandim says:

    Olá Gabriel, olha em desenvolvimento, não é necessário ter o IIS não, o servidor do prório Visual Studio roda.

    Pra isso vá até o VS, e na opção Open Web Site… selecione a pasta Net.

    Em seguida vá até o Flex, com o botão direito no Flex Navigator, clique sobre Import… General>Existing projects into workspace… selecione a Pasta Flex.

    Feito isso, você vai ter o projeto aberto no VS e no Flex, então no Visual Studio, rode a aplicação com CTRL + F5, anote o número da porta que o servidor web do VS vai gerar pra você e mude o arquivo services-config.xml, que está no projeto Flex dentro da pasta source, o número da porta do caminho da página Gateway.aspx.

    Recomendo você dar uma olhada nos tutoriais de que fiz passo a passo, que mostra toda essa configuração:

    Parte 1: http://www.viniciussandim.com/?p=60
    Parte 2: http://www.viniciussandim.com/?p=61

    Qualquer dúvida deixe outro comentário por ai..

    T+

  23. Vinícius Sandim says:

    Olá Zanotti, seguinte…

    Execute os mesmos passos que eu recomendei para o Gabriel, deve ser o número da porta do arquivo services-config.xml que está dentro da pasta src de seu projeto Flex que está diferente da porta que o seu VS gerou quando você compilou seu projeto pela primeira vez.

  24. Gabriel says:

    Vinícius,

    Obrigado por responder, vou tentar seguir o que você me disse.

    Abraço

  25. Zanotti says:

    Resolvi o problema, que não era problema e sim somente configuração com a pasta definida na locaweb para executar arquivos asp.net, feito isso o sistema roda normalmente…

    Obrigado

  26. Vinícius Sandim » Silverlight 3 - Agora sim! says:

    [...] demonstrar tudo isso que estou falando, resolvi criar uma agenda de contatos idêntica a que fiz em Flex, e vou posta-la em breve [...]

  27. Leonardo Correia says:

    Olá Vinícius, gostaria de saber se existe a possibilidade de eu alterar a conexão do seu código, ele é voltado para web, mais eu precisava mudar para aplicação desktop.

  28. Edgard says:

    Seus posts são muito bons!
    Está ajudando muito a todos!
    Recomendo que você coloque um link do PayPal para quem quiser contribuir com você.

    Quando você tiver um tempo, seria muito legal se você implementasse nesta sua agenda a opção do usuário inserir a foto do contato que está cadastrando.

    O fluorine serializa imagens?
    Você teria algum exemplo de um cadastro de imagens?

    Obrigado! Parabéns!

  29. Gilson says:

    Olá Vinicius, muito 10 essa agenda, realmente uma agenda online quebra o galho, criei uma para mim que esta sendo muito util, caso alguem queira visualizar e tambem fazer o downloads basta visitar o seguinte endereço http://www.abreubusiness.com.br/.

  30. Vinícius Sandim says:

    Caramba Gilson! Que bacana a agenda! Parabéns pel aplicação.

  31. Bruno Garcia says:

    Vinícius,

    Muito maneiro esse seu tutorial, a Agenda ficou maneiro com os efeitos do Flex to fazendo um relatorio em Flex com o datagrid e pie chart, usei com webservice e funcionou legal, porem um pouco lento e a lentidão está na parte de recuperar os dados do .net para o flex e olhando o seu post resolvi passar a usar o FluorineFx e segui os passo a passo a sua aplicação , tanto o dotnet quanto o flex estão compilando mais na hora de executar o método do dotnet pelo flex ocorre esse erro abaixo e num sei o que e é bati as configurações e aunica diferença que vi e que eu referencie a DLL do 3.5 do Fluorine no dotnet e você usou a do 2.0.

    Você poderia me ajudar com alguma dica ? de o que pode está dando esse erro ?

    Ocorreu um erro ao tentar executar o método no asp.net.

    faultCode:Client.Error.MessageSend faultString:’Send failed’ faultDetail:’Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: ‘http://localhost:3183/GCAP/default.aspx”

  32. Philippe says:

    Olá Vinícius,
    Parabéns pelos seus tutoriais (este e o do Flex Mania 2009).
    Estou tentando fazer uma agenda utilizando o Mysql e asp net.
    Tentei utilizar os arquivos mas quando modifico o endpoint uri no flex, para o meu localhost, ele ainda continua procurando o uri antigo e dá erro dizendo q não encontra.
    Onde mais eu devo modificar o valor do endpoint uri? Apenas no service-config.xml ou tem outro local tbm?

    Obrigado,
    Abraços

  33. Philippe says:

    Olá Vinícius,

    Eu estou utilizando o flex 4 e acho que deu algumas imcompatibilidades. Compilei no flex 3 e deu tudo certo, funcionou perfeito.

    Brigadão pela ajuda e Parabéns pelos posts novamente.

    Abraços

Leave a Reply