André Nobre

ASP.NET MVC, Architecture, Debugging, Commerce Server, WinDBG...
Prêmio APP – Melhor Hot-Site Promocional de 2009

Boa notícia!
Recebemos ontem o prêmio de melhor hot-site promocional, em evento realizado pela APP (Associação dos Profissionais de Propaganda). Para nós é uma imensa vitória, um projeto realmente inovador e desafiador pelo prazo e pelas idéias que tivemos.

Veja aqui o hot-site premiado.

Muito obrigado a todos que torceram!

OgAAAPf_qwZiylgqTX8BJp0YqPNTHtqHAW15OXtph0nN5rXE8W6oaxfKpKloaBOVBaIw5hF6UHIrqvcGAGcxriUveZEAm1T1UEJvj6dZ0vFwRR8QXT1jcmacL6cu

André Nobre e Renan Couto, as mentes por trás do projeto :)

OgAAAFBqbfrA6SL79ovaabNrZMn-lkOMnePE3x7yhRTUc-8NEl9207FxY6Qne_IsI1RQW_5tWwNq2ZMNMYJAV8tbwBIAm1T1UArzWquwd9ln-jPJCmP6KRqbm2tZ 

 

Abraços!

Microsoft Commerce Server 2009: Commerce Foundation

Para entendermos completamente o que é o novo Commerce Foundation, precisamos relembrar alguns conceitos.

Dd452026_DetailedArchitecture(en-us,MSDN_10) Como podemos observar na figura, a estrutura base do Commerce envolve o que chamamos de Commerce Server Core Systems, que pode ser subdivido em 5 sistemas:

  1. Orders System
  2. Marketing System
  3. Catalog System
  4. Inventory System
  5. Profiles System

Conforme explicado no post anterior, cada sistema representa uma parte importante no processo do comércio eletrônico, e em conjunto fornecem toda a estrutura necessário que criemos, através do Commerce Server, uma aplicação completa.

A versão 2009 apresentou um novo conceito chamado Commerce Foundation, que podemos definir basicamente como:

  • Novo modelo de programação unificado
  • Exemplos de desenvolvimento
  • Documentação

No cenário técnico, o Commerce Foundation é uma coleção de novas operações que podem ser realizadas nos Core Systems, como segue:

Catalog System

  • Recuperação de informações do site, catálogo, categorias, produtos, variantes e estoque;
  • Full-text search;
  • Integração com Sharepoint;

Marketing System

  • Recuperação de conteúdo direcionado;
  • Recuperação dos descontos aplicados ao carrinho ou ao pedido;
  • Recuperação de descontos simples aplicados a produtos ou categorias;
  • Registros de eventos de campanhas;
  • Integração com Virtual Earth;

Orders System

Existem algumas diferenças entre a versão 2009 e versão 2007 do Orders System. Neste novo modelo, algumas alterações foram efetuadas em relação ao basket e principalmente nas formas de pagamento. Veremos os detalhes nos próximos posts da série.

Profiles System

Através deste sistema é possível administrar as informações dos usuários, através de Site Terms e Profiles, assuntos próximos da série de posts sobre Commerce.

Novo modelo de entidades

A versão 2009 do Commerce apresentou um novo modelo de entidades para representar a visão conceitual do produto através de todos os Core Systems. A base para todo este novo modelo de entidade é a classe CommerceEntity.

Todas as operações realizadas no Commerce podem ser resumidas como operações de request-response. Resumidamente, podemos enviar dados para a requisição e receber respostas de execução.

var query = new CommerceQuery<CommerceEntity>("UserProfile");
query.SearchCriteria.Model.Properties["Email"] = "useremail@yourcompany.com";
CommerceResponse response = OperationService.ProcessRequest(base.GetCurrentRequestContext(), query.ToRequest());

Dd451270_2a3ad16c-1647-4e31-9326-a73836cd14d0(en-us,MSDN_10)

A figura acima representa a entidade base CommerceEntity, apresentando a coleção Properties. Esta coleção representa um conjunto nome/valor para as propriedades da entidade.

OperationService

O serviço de operações exemplificao acima tem o papel de receber uma requisição do Commerce e retornar uma CommerceResponse.

Dd464322_e6ba4fc5-1741-492f-a72d-d9a6d494d738(en-us,MSDN_10)

CommerceRequest e CommerceResponse

O objetivo do CommerceRequest é simplesmente identificar uma ou mais operações a serem realizadas, sendo que o CommerceResponse é a resposta para estas operações:

Dd464322_912e62ae-2c4a-4cd7-9583-2bd7c8f2f193(en-us,MSDN_10) Dd464322_9228885b-afc8-4169-ab3e-f7ee4aa3f27b(en-us,MSDN_10)

Pontos Positivos desta Abordagem

O que vem para agradar e muito é o novo modelo totalmente extensível, fornecendo entidades fortemente tipadas definidas de acordo com cada projeto, através da interface ICommerceEntity:

 Dd451701_6f2a7784-724b-4086-9297-b7f3c197c6e0(en-us,MSDN_10)

--

Veremos nos próximos posts a aplicação prática destes conceitos. Aguardem!

Posted: Oct 30 2009, 02:52 PM by anobre | with no comments
Filed under: ,
Microsoft Commerce Server 2009: Visão do Desenvolvedor

Para você que está chegando diretamente neste post, esta é uma série dedicada ao Commerce Server e detalhes da versão 2009 do produto. Outros posts já foram publicados:

  1. Microsoft Commerce Server: O que é?
  2. Microsoft Commerce Server: Como saber que é uma boa decisão?

Nesta publicação vou falar um pouco sobre a estrutura que o desenvolvedor encontrará no Commerce Server 2009.

O que preciso saber antes de desenvolver para o Commerce?

Antes de iniciar a prazerosa tarefa de desenvolver para o Commerce, temos que conhecer as frentes disponíveis.

Dentro do produto podemos agir através da criação da aplicação e de sua base, pipelines, integração com sistemas de pagamento, ou personalizando e extendendo a parte de pedidos. Se quisermos deixar ainda mais completa esta tarefa, podemos incluir a integração com Biztalk, que falaremos futuramente.

Inicialmente vamos entender a visão da aplicação direta e de seus fundamentos, para então partir para outras frentes de desenvolvimento.

Estrutura Básica do Commerce

Pensando de uma forma extremamente simples, o nosso objetivo aqui é conseguir criar uma aplicação que disponibilize um catálogo de produtos e realize a venda para os consumidores. Analisando desta maneira, podemos identificar três módulos que estão presentes no Commerce: Catalog System, Orders System e Profile System. Como o próprio nome diz, são módulos responsáveis pelo catálogo de produtos, os pedidos realizados ou não, e todos os clientes (cadastrados ou anônimos) que interagem com a aplicação.
Além disso, o Commerce conta com um módulo específico de Marketing, criando oportunidades para promoções ou conteúdos direcionados.

Em uma visão mais abstrata, podemos definir toda a estrutura do Commerce da seguinte maneira:

Dd452198_High_level_CS2009_Architecture(en-us,MSDN_10)

onde nosso foco neste momento são os Commerce Server 2009 Core Systems.

Dd452198_High_level_CS2009_Architecture(en-us,MSDN_10)

 

CS Core Systems: Arquitetura

A figura abaixo resume a arquitetura do que chamados de Core Systems do Commerce Server:

Dd452026_DetailedArchitecture(en-us,MSDN_10)   Dd452026_DetailedArchitecture(en-us,MSDN_10)

Nosso foco aqui é para a visão do desenvolvedor, portanto vamos entender a parte em destaque acima.

Primeiro conceito que podemos concluir é que o Commerce é baseado em 5 e não 4 sistemas como dito anteriormente, a seguir:

  1. Orders: responsável por tudo que é relativo a pedidos, concretizados corretamente ou não.
  2. Marketing: módulo específico para criação de campanhas, como descontos, leve 2 pague 1, etc.
  3. Catalog: responsável por todas as informações dos produtos e suas variantes.
  4. Inventory: responsável pelo estoque.
  5. Profiles: responsável pelas informações dos usuários.

O Inventory System é responsável por todo o estoque, seu estado atual e histórico, e em conjunto com o Catalog System completa todas as nossas necessidades para o e-commerce.

Com estes 5 sistemas definidos, podemos utilizar o Commerce Server .NET API para, através da nossa aplicação ASP.NET, tornar nossa aplicação “utilizável”.

Observem que é possível utilizar o Biztalk Server para integrações com LoB, como ERP e CRM, com adaptadores nativos para o Commerce. Mas isto é um assunto dedicado ao final da série de posts :)

Uma primeira observação importante aqui é que ao desenvolver para o Commerce devemos esquecer daquele velho companheiro chamado Banco de Dados (pelo menos inicialmente). Na nossa aplicação o Commerce é o responsável pelo acesso aos dados. O nosso trabalho como desenvolvedor é manipular apenas os objetos, deixando os detalhes da persistência para o Commerce Server Manager.

--

No próximo post vamos analisar como é desenvolver para o Commerce na prática ;)

Até lá!

Microsoft Commerce Server: Como saber que é uma boa decisão?

Uma das grandes dificuldades do Commerce é conseguir avaliar em quais situações este produto é uma boa decisão para utilização. Este post irá apresentar algumas diretrizes para verificar se adotar o Commerce Server irá trazer benefícios ou não, e a qual custo.

A Primeira Impressão

Se você iniciou uma pesquisa para saber se o Commerce Server é bom ou não, com certeza você passou pelo site http://www.microsoft.com/commerceserver.

image

Ao acessar a página, você logo clicou no lado direito, onde diz “Product Overview: Learn how Commerce Server 2009..”. Estou certo?

A primeira impressão que o produto passa pela sua descrição  é que é uma loja pronta que exige pouca implementação. É aí que mora o perigo: não se engane, a vida não é assim tão fácil.

O Commerce Server nos fornece a base de desenvolvimento para projetos de comércio eletrônico. Isso não quer dizer, de maneira nenhuma, que é so pegar o projeto padrão e colocar no ar, criar os produtos e sair vendendo. São raros os casos em que isso é possível.

Frases e comentários do Overview do produto

“it comes with a new, production-ready, out-of-the-box, contemporary Web site that allows businesses to get their stores live and merchandise moving more quickly”

Não leve isto em consideração ao decidir utilizar o produto. Os casos destas frases são aqueles raros em que seu comércio eletrônico não precisa ser integrado com nada, não exige regras de negócio específicas e não expõem uma série de serviços. Normalmente você precisará customizar o projeto, ou então criar um novo para que adapte aos padrões de desenvolvimento da empresa.

Outro ponto importante sobre o Commerce é sua instalação, que exige inúmeros detalhes e leva uma certo tempo para finalizá-la.

É importante ressaltar que se o seu comércio eletrônico é simples e não exigirá customizações, o site padrão servirá corretamente, sem dificuldades alguma. Porém, isto é muito raro de acontecer.

“Commerce Server 2009 enables fast and easy information-editing and smooth content management with workflow approvals with Microsoft SharePoint Commerce Services”

A versão 2009 do produto conseguiu unir o poder do Sharepoint com a base do Commerce Server. Se você conhece Sharepoint sabe que este é um ponto que traz inúmeros benefícios e facilidades.

“Using the new Default Site and skinning features of Commerce Server 2009 helps you get your site up and running promptly, so you can start selling right away”

Caimos novamente naquele primeiro caso.

“Reduced Costs in Site Development and Deployment”

Sim, esta frase é correta. Apesar de não conseguirmos utilizar o template padrão (95% dos casos) para colocar um projeto no ar, o Commerce reduz e muito os custos de desenvolvimento e publicação, além de fornecer a segurança de um produto Server da Microsoft.

Ao fornecer um imenso framework para catálogo de produtos, marketing, clientes e pedidos, o Commerce Server permite que a empresa foque nos detalhes essenciais do projeto, como regras de negócios, integrações e segurança. Não precisamos nos preocupar em criar a base de comércios eletrônicos visto que isto já está preparado (e muito bem preparado).

Sobre a publicação, o Commerce Server permite que realizemos esta tarefa através de recursos simples e direto. Criar um pacote para levar até o servidor, ou então replicar este pacote pelo seu Web Farm é muito simples.

Equipe Especializada na Ferramenta

Outro ponto importante ao adotar a ferramente é saber se o mercado fornece os profissionais técnicos especializados.

Como os projetos no Brasil ainda são poucos (em relação ao total de projetos grandes de e-commerce), existem poucos profissionais disponíveis para os projetos, o que podemos concluir:

  • Os que existem são caros;
  • Os projetos existentes absorvem os profissionais do mercado;

Tomando a decisão…

Este post tem o objetivo de ajudar na decisão pelo Commerce, sem se iludir com os textos do site. As observações colocadas permitem que o tomador de decisão saiba o que irá enfrentar, positivamente ou não, antes de iniciar o projeto.

Perguntas básicas:

Pra qual tipo de projeto o Commerce é ideal?

Na minha opinião, o Commrece Server é adequado para qualquer tipo de projeto, de qualquer tamanho. Não existe uma questão técnica clara de que o Commerce serve apenas para grandes ou pequenos projetos. Existe apenas a questão do investimento e do retorno ao analisar o custo dos profissionais, o custo da licenças, infra-estrutura, etc.

Qual é o preço por hora (em média) de um desenvolvedor especialista em Commerce?

Um desenvolvedor especialista em Commerce recebe em média R$40,00 ~ R$50,00 por hora.

Em diversas regiões no mundo as regras padrões de comércio eletrônico são diferentes. O template padrão é voltado para qual região do país?

O template padrão do Commerce foi desenvolvido para os Estados Unidos. Isso quer dizer que alguns detalhes de pagamentos, entregas, parcelamento e juros não estão implementadas por padrão.

Existe documentação na internet?

Existe e é bem completa. Este endereço http://www.microsoft.com/commerceserver/en/us/Pricing-Licensing-FAQ.aspx apresenta uma série de perguntas e respostas que ajudarão na tomada de decisão.

Microsoft Commerce Server: O que é?

História

Assim como outras empresas grandes do setor, a Microsoft investiu (e continua investindo) esforços na área de comércio eletrônico, fornecendo produtos exclusivos para este ramo.

Em outubro de 1996 a Microsoft liberou o Merchant Server, uma solução para o então ainda recente mercado de B2C. Inicialmente este produto pertencia a uma empresa chamada eShop, sendo baseado em Python e C++.
Com o lançamento do ASP (Active Server Pages) em Dezembro de 1996, o processamento principal do Merchant foi migrado para objetos COM.20339054

Mas a promissora vida do Merchant Server foi encerrada logo na primeira versão, quando a partir daí começou a ser incorporado na versão “Commerce Edition” de um produto chamado Site Server versão 2.0. Na sua versão seguinte 3.0, algumas funcionalidades de administração dos conteúdos do e-commerce e também outros conteúdos comuns foram adicionadas.

Ao descontinuar o Site Server, a Microsoft criou duas novas linhas de produtos: Commerce Server, com toda sua linha voltada para o e-commerce; e o Sharepoint, com a administração do conteúdo.

O Caminho do Commerce Servercommerce_server_big

A versão inicial do Commerce Server surgiu em 2000, quando o Site Server deixou de existir. Algumas mudanças ocorream e em 2002 foi lançada uma nova versão, seguinda de alguns Services Pack em 2003, 2004 e 2006, quando a versão 2007 do produto já estava em desenvolvimento.

A penúltima versão do produto, Commerce Server 2007, trouxe muito benefícios, tornando-o mais competitivo e utilizado no mercado.

Em março de 2009 foi lançada a versão mais atual (no período de publicação deste post). Inicialmente conhecida como “Mojave”, a versão 2009 adicionou recursos sobre a base do 2007, como múltiplos canais de publicação, utilização do Sharepoint para gerenciamento, mais de 30 web parts por padrão, o Commerce Server Foundation, etc.

Fontes de Informações

A versão 2000 e 2002 do Commerce contaram com a publicação de alguns livros, o que na época era fundamental pelo dificil acesso à informação.

51Hu7J9eEHL__BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_ 518MVBPW04L__BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_

A versão 2007 não conta com nenhuma publicação, tornando os blogs e acesso online a base para a disseminação do conhecimento. A partir desta versão foram criados fóruns no MSDN, que podem ajudar na resolução de problemas.

Mesmo assim, o Commerce continua sendo um mito para muitas empresas, que pela dificuldade de encontrar pessoal especializado deixa de adquirir o produto.

O Commerce Server no Brasil

No Brasil o Commerce começou a ser largamente utilizado a partir de 2007. Antes disso, poucos projetos utilizaram o produto.

Atualmente temos empresas como Grupo Pão de Açucar e BM&F Bovespa que adotaram esta base para seus negócios em comércio eletrônico.

Existe um grupo de usuários chamado Commerce Server Brasil que reúne um grupo de profissionais especializados na ferramente, onde é possível trocar idéias, soluções, vagas de emprego, etc.

E agora?

Nos próximos posts vou escrever mais detalhes sobre a versão 2009, além de questões como migração, problemas encontrados ao tentar vender e aplicar o Commerce, entre outros pontos interessantes.

Abraços!

Locaweb x UOL Host (Comparação)

Quem me acompanha pelo twitter sabe do meu descontentamento com a Locaweb. Nos últimos meses tenho enfrentado problemas no serviço de e-mail, quedas temporárias no SQL Server e inúmeras inconsistências nos servidores Windows 2008 com aplicação ASP.NET MVC.

O mais interessante de tudo é ainda ter um blog para acompanharmos os problemas, o que – dependendo do caso – passa a ser uma declaração de incompetência do que um serviço ao cliente, justamente por causa do volume de problemas.

Por esses motivos resolvi entrar em uma árdua luta a favor daquela famosa premissa que os serviços de hospedagem prometem quando os contratamos: 99,8% do tempo funcionando.
Pesquisando rapidamente encontrei o UOL Host, um host que disponibiliza as principais características de meus clientes – Windows Server 2008, SQL Server 2008, ASP.NET MVC, etc, etc.

Análise do UOL Host

Rapidamente resolvi criar uma conta para efetuar alguns testes. Em menos de 5 minutos estava com tudo criado, e em menos de 15 com tudo funcionando (sem replicação de DNS, apenas pelos endereços temporários). Logo após comecei a efetuar os testes nas bases, FTP, e-mail, web e painel de controle.

FTP

O FTP funcionou corretamente, e com uma performance maior que o meu serviço na Locaweb (média de 13% mais rápido, tanto para Upload quando para Download). Até aí tudo bem, este valor não pode ser levado em consideração.

Mas o que eu mais fiquei impressionado é que em vários momentos a Locaweb pecou no funcionamento, alternando muitas vezes entre um funcionamento 100% e performance ruim.

E-mail

Este era meu maior problema da Locaweb. Inúmeras vezes ao dia o serviço de e-mail parava de funcionar, o que chegou a impactar várias horas de trabalho. Isto não acontecia uma vez ao mês, mas sim várias vezes por semana, tanto para e-mails enviados como recebidos.

O serviço do UOL, em 2 semanas de utilização não parou nenhum momento.

Web

A performance das duas opções funcionou bem. Porém, em uma determinada área da aplicação, o mesmo código ASP.NET MVC + jQuery não funcionou na Locaweb e no UOL sim, ambos em servidores Windows 2008.

Mas no geral este item pode ser declarado como empate :)

Painel de Controle

O painel de controle de ambos é muito produtivo, com todas as funcionalidades ok.

Um ponto positivo do painel de controle do UOL é que tanto o gerenciamento da web/banco como do e-mail fazem parte do mesmo sistema, já na Locaweb são sistemas diferentes.

Um ponto positivo da Locaweb é a criação de subdominios diretamente no painel, o que no UOL ainda depende de help desk. Meus pedidos para criação de subdominio foram atendidos em menos de 1 hora, mas ainda sim isto é um problema.

Relatórios de Acessos

Um item muito importante a analisar são os relatórios de acesso dos sites. Neste quesito a Locaweb ganha em disparada, com seu Urchin.

O relatório do UOL Host apresenta os dados corretamente, mas a interface e a interação não são tão produtivos quanto da Locaweb.

SQL Server

Neste item a UOL Host ganha novamente, somente por causa da performance. Todos os outros itens (recursos, acesso, gerenciamento, segurança) são iguais.

Atendimento

Tão importante quanto o funcionamento correto é atendimento de suporte. Simulei alguns problemas básicos na minha hospedagem e entrei em contato, tanto pelo Help Desk como pelo Chat, em ambos os hosts. Todos os atendimento foram realizados corretamente, em um tempo relativamente bom.

Conclusão

Esta análise é apenas o resultado de uma experiência rápida, que não leva em consideração a estrutura dos data centers, segurança das informações, backup diário, etc.

Este post resume as funcionalidades básicas de quem utiliza a hospedagem de terceiros para clientes, e precisa de segurança na hora escolher o fornecedor.

Vou continuar fazendo estas comparações, visto que tenho aplicações nos dois servidores.
Publicarei as novidades :)

Abraços.

Update 1 21/10 17:10:  Acabei de receber uma ligação do UOL Host para saber o que estou achando do serviço, quais são as minhas percepções até agora, sugestões, críticas, etc. Muito legal!

ASP.NET MVC com jQuery + JSON

Sobre o jQuery

Apesar de ser um dos mais comentados “lançamentos” dos últimos anos, muita gente ainda não sabe e não tem prática com jQuery. Mas o mais legal disso é que o jQuery não tem nada de novidade por baixo dos panos.
Basicamente, jQuery é um projeto resultante da soma do CSS, com seus seletores, e das possibilidade do Java Script, tudo isto escrito em uma nova linguagem, um novo idioma.

Para exemplificar, em um passado não muito distante, desenvolver a comunicação Ajax era algo complicado.  Exigia-se muitas linhas de código, enfrentava-se dificuldade com testes, com retornos, etc. Hoje, com jQuery, é possível utilizar seus recursos “prontos” mantendo a preocupação nas regras do negócio ao invés da estrutura técnica para realizá-las.

A única questão diferente (diferente.. não dificil) é que exige uma sintaxe um pouco fora da usual tanto para desenvolvedores quanto para designer, pois mistura um pouco dos dois mundos ao utilizar seletores CSS com sintaxe baseada no ECMA 262. Fora isso não tem segredo, não é difícil e facilita muito a nossa vida.

Como o foco deste post não é o jQuery, recomendo que acesse o http://jquery.com para obter mais informações.

Sobre o JSON

Com o foco dado ao à comunicação assíncrona na web nestes últimos tempos, surgiu a necessidade de utilizarmos um formato prático para troca de informações entre as bibliotecas baseadas no ECMA 262 e códigos server-side. Neste cenário entra o JSON – JavaScript Object Notation.

O JSON nada mais é do que uma definição de nome/valor para representação de informações. Os “objetos” são representados através da estrutura abaixo:

 

object

Como é possível imaginar, a iteração nestes objetos deve ocorrer facilmente, visto que não há tipagem, regras ou qualquer outro detalhe que aumente a complexidade no acesso às informações.

O benefício ocorre quando unimos a facilidade do JSON com a produtividade do jQuery, como no exemplo abaixo:

$.getJSON("/Graficos/Obter",
                    function(data) {
                        if (data == '' || data == null) {
                            jAlert("Não foi possível obter os dados para visualização da tabela.");
                            return;
                        }
                        else {

                            $(eval(data)).each(function() {
                                // Execução
                            });

                            $("#planilha").dataTable({});


                        }
                    });
Se algo parece estranho, com certeza você não está habituado ao jQuery.

Como podemos perceber pelo exemplo, a sintaxe é extremamente simples. No exemplo acima, a instrução getJSON retorna de uma URL uma série de informações no formato JSON explicado acima. Através das informações retornadas (data), é possível criar uma laço (.each) onde podemos percorrer cada elemento e efetuar uma execução.

Na prática, um código em JSON tem o seguinte formato:

{"id":1,"nome":"Nobre"}

Uma coleção de objetos apresenta colchetes para delimetar os itens pertencentes à coleção:

[{"id":1,"nome":"Nobre"},{"id":2,"nome":"André"}] 

E como isto se encaixa do ASP.NET MVC?

No ASP.NET MVC não existe requisições mapeadas a arquivos físicos, mas sim a métodos que retornam algum tipo de informação para o usuário, que utilizam como base a classe ActionResult. Em alguns casos, este retorno pode ser uma ViewResult (telas aspx, por ex), um JavaScript, ou então um Json.

O ActionResult Json permite que objetos sejam “automaticamente” transformados para o padrão JSON, e esta transformação seja retornada para o autor da requisição.

O exemplo abaixo demonstra o resultado da transformação de um objeto extremamente simples:

public ActionResult Index()
{
    var teste = new object[]{ new { id = 1, nome = "Nobre"}, new { id = 2, nome = "André" }};
    return Json(teste);
}

Tá… e tem algum exemplo mais prático?

Em uma cenário mais real, esta abordagem poderia ser utilizada em uma interface com comunicação assíncrona, visando a troca de dados entre o código jQuery e o servidor. É possível executar o getJSON diretamente em um Controller, usufruindo ainda da possibilidade de retornar uma ActionResult Json ou ViewResult dependendo do tipo de requisição:

No Controller:

public class GraficoController : Controller
    {

        public ActionResult Padrao(string contexto, string tipo, string formato)
        {
            IList<IItemGrafico> dados = new GraficosPadraoRepository().ObterDadosParaGraficoPadrao(contexto);

            if ("json".Equals(formato, StringComparison.CurrentCultureIgnoreCase))
            {
                   return Json(dados);
            }

            ...
            return new FileStreamResult(builder.Exportar(), "image/png"); 
        }

No ASPX:

 

$.getJSON("/Grafico/Padrao?formato=json",
                    function(data) {
                        if (data == '' || data == null) {
                            jAlert("Não foi possível obter os dados para visualização da tabela.");
                            return;
                        }
                        else {

                            $("#planilha tbody").html("");
                            $(eval(data)).each(function() {
                                $("#planilha tbody").append("<tr><td>" + (this.Empresa != null ? this.Empresa : "") + "</td><td>" + this.Item + "</td><td>" + (this.Item2 != null ? this.Item2 : "") + "</td><td class=\"center\">" + this.Valor + "</td></tr>");
                            });

                            $("#planilha").dataTable({});


                        }
                    });

Lembrando que “data” (parametro da function callback) armazena o resultado da requisição a /Grafico/Padrao em formato JSON. Observem a iteração através da função “each” do jQuery.

Conclusão

Apesar de muito rápido, este post demonstra a utilização conceitual e prática do jQuery e JSON, dentro do ASP.NET MVC.

Espero que tenham gostado!

Abraços!

Londrina TechDay #2 – Segundo Dia

No dia 05/10 (segunda-feira) fizemos o segundo dia do Londrina TechDay #2, com as palestras sobre Silverlight 3 (Márcio Fábio Althmann) e .NET 4.0 / Visual Studio 2010 (Carlos dos Santos).

O evento foi muito interessante no geral. No primeiro dia, realizado no campus da PUC em Londrina, os participantes puderam participar das palestras de ADO.NET Data Services, Azure e a palestra Microsoft e a Inovação, por Alexsandro Salmazo (Microsoft).
O segundo dia, com média de publico de 250 pessoas, apresentou as novidades da plataforma .NET e do Silverlight, com ótimos exemplos.

Em breve a equipe do Londrina TechDay fará uma onde de palestras sobre Windows 7, apenas para empresas.

Obrigado a todos pela presença e até o próximo!

LondrinaTechDay 116 
Márcio Fábio sobre Silverlight 3

LondrinaTechDay 145
Carlos dos Santos sobre VS2K10 e .C# 4.0

LondrinaTechDay 181 
Eduardo Spoky e André Nobre

LondrinaTechDay 182
André Nobre e Márcio Fábio

LondrinaTechDay 191
A equipe indo embora do evento… :)

Londrina TechDay – Primeiro Dia

Quarta-feira (30/09) tivemos o primeiro dia do Londrina TechDay, na PUC em Londrina.
Nesta primeira sequencia de palestras, Michel Banagouro falou sobre o ADO.NET Data Services e eu falei sobre Windows Azure.

Apesar do público reduzido em comparação com a primeira edição, as apresentações foram muito interessantes, e em certos momentos com bastante participação do público.

30092009017
Pelos feedbacks positivos, o primeiro dia foi muito bom!

 

Aqui está minha apresentação:

Agradeço a presença de todos e não se esqueçam que hoje tem o segundo dia, na UNifil, com Carlos dos Santos (MVP) e Márcio Fábio (vencedor do WinThe7 – Desenvolvedores).

Abraços!

ASP.NET MVC + ASP.NET Charting Controls

Fico surpreso quando percebo que muitas pessoas ainda não sabem que a Microsoft disponibilizou, há alguns meses, um controle para geração dinâmica de gráficos, utilizando a plataforma .NET, o chamado ASP.NET Charting Controls.

Estou finalizando um projeto que faz uso massivo de gráficos, e resolvi utilizar esta biblioteca extremamente útil. A documentação de como utilizar os controles com C# nãoimage é muito clara, mas existe uma aplicação Web (ASP.NET Web Forms) e Windows Forms com mais de 200 exemplos, onde é possível, tranquilamente, aprender a utilizar os recursos disponiveis.

Como utilizamos ASP.NET MVC na maioria dos projetos, a primeira observação que fiz foi que o ASP.NET Charting Controls era dedicado a ASP.NET Web Forms, com seu controle na velha forma “runat=’server’”. Como todos já devem saber, o ASP.NET MVC não faz uso¹ de controles server-side, o que teoricamente impossibilitaria o uso dos Charting Controls.

Em uma rápida análise na estrutura da solução dos controles, pude comprovar um pecado no seu desenvolvimento (realmente não sei se o código foi do zero ou herdado da Dundas): a solução para Web Forms e a solução para Windows Forms são totalmente dependentes da interface, o que impossibilita a reutilização do código de uma forma arquiteturalmente correta no ASP.NET MVC.

Porém, existe uma solução simples que resolveu nosso problema.
Ao configurar todo o objeto Chart, com nosso dados, eixos, e etc, é possível gerar um FileStreamResult – dentro do ASP.NET MVC – passando o contentType “image/png”.

Desta maneira é possível gerar o gráfico, e unido de Ajax, apresentá-lo sem maiores problemas aos usuários.

Ex.:

            var chart = new Chart();
chart.BackColor = Color.Transparent; chart.Width = Unit.Pixel(500); chart.Height = Unit.Pixel(400); Series series1 = new Series("Series1"); series1.ChartArea = "ca1"; series1.ChartType = SeriesChartType.Bar; series1.Font = new Font("Calibri", 8f, FontStyle.Regular); series1.Points.Add(new DataPoint { AxisLabel = "Value1", YValues = new double[] { 2 } }); series1.Points.Add(new DataPoint { AxisLabel = "Value2", YValues = new double[] { 1 } }); series1.Points.Add(new DataPoint { AxisLabel = "Value3", YValues = new double[] { 1, 5 } }); chart.Series.Add(series1); ChartArea ca1 = new ChartArea("ca1"); ca1.BackColor = Color.Transparent; ca1.Area3DStyle.Enable3D = true; chart.ChartAreas.Add(ca1);
            MemoryStream ms = new MemoryStream();
            chart.SaveImage(ms, ChartImageFormat.Png);
            ms.Seek(0, SeekOrigin.Begin);

            return new FileStreamResult(ms, "image/png");  
image 

Abraços!

More Posts Next page »