Olá! Fazia muito tempo que não postava no meu blog. Pretendo voltar a publicar com mais freqüência.
Hoje gostaria de postar algo interessante que tive que fazer na empresa onde trabalho, que era implementar um gráfico. Fazendo algumas pesquisas vi que o próprio Google possui uma API para construção de gráficos e é extremamente fácil de usar!
A documentação completa dessa API está no site oficial do Google Chart:
https://google-developers.appspot.com/chart/
Meu objetivo aqui é mostrar essa API sendo usada dentro do nosso mundo .NET, usando as seguintes tecnologias:
- C#
- ASP.NET MVC 4
- Web API 2
- JQuery
Mostrarei apenas os pontos fundamentais da solução, o código fonte completo está localizado no meu GitHub:
https://github.com/slipmp/GoogleChart
Vamos para o código!
Código HTML:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
//Responsável por carregar a engine de criação do Google Chart
google.load('visualization', '1.0', { 'packages': ['corechart'] });
$(document).ready(function() {
getBestSellingProducts();
//Esse método é responsável por chamar o API que retornará os dados
//em formato JSON
function getBestSellingProducts()
{
$.ajax({
url: '/api/ProductApi/GetBestSellingProducts',
type: 'GET',
dataType: 'json',
success: function (data) {
drawChartCallBack(data);
},
error: function () {
alert('Erro ao carregar o Google Chart');
}
});
}
// Método responsável por carregar todas as informações no gráfico.
function drawChartCallBack(arrayBestSellingProducts) {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Produto');
data.addColumn('number', 'Quantidade');
for (i = 0; i < arrayBestSellingProducts.length; i++)
{
data.addRow([arrayBestSellingProducts[i].Product.Name,
arrayBestSellingProducts[i].Quantity]);
}
// Opções do gráfico
var options = {
'title': 'Produtos mais vendidos - www.slipmp.com',
'width': 740,
'height': 400
};
// Instancia o gráfico à partir de elementos na página.
// No caso será redenrizado em um elemento chamado
// divGoogleChart que por sua vez é uma div.
var chart = new google.visualization.PieChart
(document.getElementById('divGoogleChart'));
chart.draw(data, options);
}
});
</script>
DTOs (Data transfer object) utilizados:
namespace GoogleChart.Dto
{
public class Product
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Product(string name)
{
_name = name;
}
}
/// <summary>
/// Entidade que representa os produtos mais
/// vendidos.
/// </summary>
public class BestSellingProducts
{
private Product _product;
private Int32 _quantity;
public Product Product
{
get { return _product; }
set { _product = value; }
}
public Int32 Quantity
{
get { return _quantity; }
set { _quantity = value; }
}
public BestSellingProducts(Product product,Int32 quantity)
{
_product = product;
_quantity = quantity;
}
}
}
Camada de negócios:
namespace GoogleChart.BusinessLayer
{
public class ProductBo
{
/// <summary>
/// Esse método em teoria buscaria os dados em uma base de dados.
/// Por questões didáticas ele está fixo aqui.
/// </summary>
/// <returns></returns>
public List<BestSellingProducts> GetBestSellingProducts()
{
return new List<BestSellingProducts>(new List<BestSellingProducts>
{
new BestSellingProducts(new Product("Notebook"),475),
new BestSellingProducts(new Product("Roteador"),250),
new BestSellingProducts(new Product("Celular"),50),
new BestSellingProducts(new Product("Computador"),70),
new BestSellingProducts(new Product("Livro"),30),
new BestSellingProducts(new Product("Tablet"),130),
new BestSellingProducts(new Product("Servidor"),20)
});
}
}
}
WEB Api 2 – Controller responsável pela requisição vinda via GET:
namespace GoogleChart.Controllers
{
/// <summary>
/// Classe que representa o WebAPI Controller.
/// </summary>
public class ProductApiController : ApiController
{
/// <summary>
/// Método no controller que faz a busca na Camada de negócios.
/// O retorno será básicamente o que será usado no nosso gráfico.
/// </summary>
/// <returns>Retorna no formato JSON</returns>
public IEnumerable<BestSellingProducts> GetBestSellingProducts()
{
var productBo = new ProductBo();
return productBo.GetBestSellingProducts();
}
}
Espero ter ajudado em algo pessoal 😉
Qualquer dúvida deixe nos comentários! Abraços!

Leave a Reply