Back-End

2 mar, 2007

Gráficos em ASP usando OWC

Publicidade

Olá pessoal, tudo bem? Espero que as dicas e orientações que eu for disponibilizando aqui no iMasters possa ajudar no desenvolvimento profissional de vocês.

Como primeiro artigo, vou mostrar um exemplo de gráfico criado com o componente do Office, o OWC (Office Web Components). Esse componente está disponível no cd de instalação do Microsoft Office. Basta instalar o arquivo OWC10.MSI ou OWC11.MSI.

Descrição: Viabilizando modelo de consulta através de gráficos.

Cenário: Empresa apresenta evolução dos indicadores comerciais através de gráficos criados a partir de planilhas eletrônicas. Criar ferramenta para visualização das informações através da própria intranet.

Esse é um caso típico da utilização de relatórios em empresas que tem intranet: a possibilidade de acessar as informações a qualquer hora e de qualquer máquina lotada na rede corporativa.

Nosso modelo permitirá a consulta a dados e a formatação do relatório pronto para visualização ou impressão.

1ª parte – Construção do banco de dados.

Para o nosso exemplo, para ficar mais simples, utilizaremos o bom e velho ACCESS.

Veja como construí as tabelas:

E a consulta:

Finalizamos a primeira etapa!!!

2ª parte – Formulário para seleção de gráfico.

Construiremos agora a página de acesso a consulta ao banco de dados para exibição do gráfico.

Veja o layout:

Vamos ao código (default.asp)!!!

<html> 
<head><title>MODELO DE GRÁFICO | BY: RICARELA.COM</title> 
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"></head> 
<body BGCOLOR="#FFFFFF"> 

<%
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'define variáveis
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dim pdTpValue, sql, slCombo

slCombo = (request.form("selProd"))
pdTpValue = slCombo 

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'define conexão com o banco
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	Set Cn = Server.CreateObject("ADODB.Connection")

	Sub abre
	
		Cn.provider="Microsoft.Jet.OLEDB.4.0" 
		Cn.connectionstring=Server.Mappath("\imaster.com.br\publica001\bancoUm.mdb") 
		Cn.open 
	
	End Sub
	
	
	Sub fecha
		cn.close
		Set cn = nothing
	End Sub



'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'abre conexão
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    call abre


'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'seleciona registros e monta formulário
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	sqlForm = "select distinct pdTp, pdDescription from cnsSales "

	Set rsSQLForm = cn.Execute(sqlForm)
	
	%>
<form name="form" action="default.asp" method="post">
	<table>
		<tr>
			<td>Selecione o produto:</td>
			<td>
				<select name="selProd" size="1" onchange="form.submit();">
					<%while not rsSQLForm.eof%>
					<option <%if slCombo = cStr(rsSQLForm("pdTp")) then response.write "selected"%> value=<%=rsSQLForm("pdTp")%>><%=rsSQLForm("pdDescription")%></option>
					<%
					rsSQLForm.movenext
					wend
					%>
				</select>
			</td>
		</tr>
	</table>
</form>	




	<%
if slCombo <> "" then

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'seleciona registros e monta tabela
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	sql = 	"select pdTp, pdDescription, slQtSale, slRef from cnsSales " & _
			"where pdTp = " & pdTpValue

	Set rsSQL = cn.Execute(sql)
%>
<table border=1>
	<tr>
		<td>DESCRIÇÃO DO PRODUTO</td>
		<td>QUANTIDADE VENDIDA</td>
		<td>ANO|MÊS DE REFERÊNCIA</td>
	</tr>
	<%while not rsSQL.eof%>
	<tr>
		<td align="center"><%=rsSQL("pdDescription")%></td>
		<td align="center"><%=rsSQL("slQtSale")%></td>
		<td align="center"><%=MudaData(rsSQL("slRef"))%></td>
	</tr>
	<%
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'prepara gráfico
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	gRefe = gRefe & MudaData(rsSQL("slRef")) & ";"
	gSale = gSale & rsSQL("slQtSale") & "|"
	gDesc = rsSQL("pdDescription")

	rsSQL.movenext
	wend
	%>	
</table>
<%	
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'chama gráfico
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%>
<p align="center">
<img border = 0 src="grafico.asp?gRefe=<%=gRefe%>&gSale=<%=gSale%>&gDesc=<%=gDesc%>">
</p>
<%

end if




'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'fecha conexão com o banco e destrói objetos
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	call fecha
	set rsSQL = nothing
	set rsSQLForm = nothing


'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'função para mudar apresentação ano|mês 
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Function MudaData(string)
	fMes = VerMes(right(string,2))
	fAno = mid(string,3,2)
	MudaData = fMes & "|" & fAno' & " " & fAno
End Function

Function VerMes(string)
	select case string
		case "01"
			VerMes = "Jan"
		case "02"
			VerMes = "Fev"
		case "03"
			VerMes = "Mar"
		case "04"
			VerMes = "Abr"
		case "05"
			VerMes = "Mai"
		case "06"
			VerMes = "Jun"
		case "07"
			VerMes = "Jul"
		case "08"
			VerMes = "Ago"
		case "09"
			VerMes = "Set"
		case "10"
			VerMes = "Out"
		case "11"
			VerMes = "Nov"
		case "12"
			VerMes = "Dez"
	end select
End Function

%>

Com o formulário criado, vamos criar a página do gráfico (grafico.asp)!

<%
Session.LCID = 1046

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'declara variáveis
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dim gDesc, gRefeDim, gSaleDim

gDesc = request.querystring("gDesc")
gRefeDim = Split(request.querystring("gRefe"), ";") 
gSaleDim = Split(request.querystring("gSale"), "|") 

redim gRefe(uBound(gRefeDim)-1)
redim gSale(uBound(gSaleDim)-1)

for i = 0 to uBound(gRefeDim) - 1
	gRefe(i) = gRefeDim(i)
	gSale(i) = gSaleDim(i)
next


'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'gera gráfico
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	set oChart = CreateObject("OWC11.ChartSpace") 
	set c = oChart.Constants 
	oChart.Border.Color = c.chColorNone 'borda
	
	with oChart 
	
		.Charts.Add 
		.Charts(0).Type = 0
		.ChartLayout = c.chChartLayoutHorizontal
		.Charts(0).HasTitle = True 
		.Charts(0).Axes(0).Font.Size = 7
		.Charts(0).Axes(0).Font.Name = "MS SAN SERIF"
		.Charts(0).Axes(1).HasTitle = true
		.Charts(0).Axes(1).Title.Font.Size = 7
		.Charts(0).Axes(1).Title.Font.Name = "Tahoma"
		.Charts(0).Axes(1).Font.Size = 7
		.Charts(0).Axes(1).Font.Name = "Tahoma"
		.Charts(0).Axes(1).Title.Caption = "Quantidade"
		.Charts(0).Title.Font.Name = "Arial"
		.Charts(0).Title.Font.Size = 10
		.Charts(0).Title.Font.Bold = true
		.Charts(0).Axes(c.chAxisPositionValue).MajorGridlines.Line.Color = "Black"
		.Charts(0).Title.Caption = ucase(mensagem)
		.Charts(0).PlotArea.Interior.Color = "#ffffff"


		'lelgenda
		.Charts(0).HasLegend = true 'legenda
		.Charts(0).Legend.Position = 2 'posiciona legenda na parte inferior
		.Charts(0).Legend.Font.Name = "tahoma"
		.Charts(0).Legend.Font.Size = 7
		.Charts(0).Legend.Border.Color = c.chColorNone 'borda

		'Adiciona o gráfico de colunas (Sales)
		i = 0
		.Charts(0).SeriesCollection.Add 
		.Charts(0).SeriesCollection(i).SetData c.chDimCategories, c.chDataLiteral, gRefe
		.Charts(0).SeriesCollection(i).Caption = gDesc
		.Charts(0).SeriesCollection(i).SetData c.chDimValues, c.chDataLiteral, gSale 
		.Charts(0).SeriesCollection(i).interior.Color = "#09B900"
		.Charts(0).SeriesCollection(i).DataLabelsCollection.Add
		.Charts(0).SeriesCollection(i).DataLabelsCollection(0).Font = "Estrangelo Edessa"
		.Charts(0).SeriesCollection(i).DataLabelsCollection(0).Font.Bold = false
		.Charts(0).SeriesCollection(i).DataLabelsCollection(0).Font.Size = 7
		.Charts(0).SeriesCollection(0).DataLabelsCollection(0).NumberFormat = "#,##0"
	end with 


	
	Response.Expires = 0 
	Response.Buffer = true 
	Response.Clear 
	Response.ContentType = "image/png" 

	Response.BinaryWrite oChart.GetPicture("png",700, 480) 

	set oChart = nothing 

%>

Usem a criatividade para explorar ao máximo deste exemplo!

Qualquer coisa é só entrar em contato! Grande Abraço.

Faça o download do exemplo deste artigo.