_G.gif" border="0" hspace="0">
Clique aqui para ler todos os artigos desta edição
Criando um site para Controle de Projetos com ASP.NET 2.0 – Parte I
Que tal explorarmos algumas funcionalidades do ASP.NET 2.0 desenvolvendo uma aplicação real? Interessante, não é? Quando o assunto é ASP.NET, ouvimos falar de controles de Login, DataSets, Profiles, Ajax, e mais uma porção de coisas separadamente, mas raramente vemos todas essas funcionalidades em um único exemplo. É isso que faremos neste artigo.
De uma forma bem prática e objetiva iremos construir uma aplicação que faz controle de projetos utilizando as principais funcionalidades do ASP.NET 2.0. Vamos fazer uma aplicação de controle de projetos, pois é um tipo de aplicativo muito comum em nosso dia
Database
Toda aplicação começa com a modelagem de uma base de dados. Neste artigo utilizaremos o SQL Server 2005, mas você também pode utilizar a versão 2000 ou a Express. Não vamos entrar nos detalhes da estrutura das tabelas desse sistema.
Vou propor um diagrama, que você pode conferir na Figura 1, e construiremos nossa aplicação em cima dessas tabelas. Obviamente que esse é um tipo de aplicação que pode sofrer variações entre uma empresa e outra, portanto sinta

Figura 1. Diagrama do banco VMProjetos
Veja que nosso database foi criado com o nome VMProjetos, e nele temos quatro tabelas:
· Clientes: Cadastraremos os clientes do sistema. Veja que a chave primária nesse caso é o CNPJ do cliente;
· Projetos: É a principal tabela da aplicação, onde abriremos novos projetos. Veja que a chave primária é o proId, que foi declarado como inteiro e definido como identity;
· Projeto_Apontamentos: É a tabela onde os recursos envolvidos no projeto deverão apontar as horas consumidas durante o projeto. Veja que a chave primária dessa tabela é o ID do Projeto junto com o ID do Apontamento. O ID do apontamento (apoId) também foi definido como inteiro e identity;
· Projeto_Despesas: Nessa tabela os recursos irão lançar as despesas ocorridas durante o projeto. Assim com nos apontamentos, a chave primária dessa tabela é o ID do Projeto juntamente com o ID da Despesa. O ID da despesa (desIs) foi definido como inteiro e identity.
Você pode conferir o script completo para a criação das tabelas na Listagem 1.
Listagem 1. Script para a criação das tabelas no banco WPProjetos
USE [WMProjetos]
GO
/****** Table [dbo].[Clientes] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Clientes](
[cliCNPJ] [varchar](18) COLLATE Latin1_General_CI_AS NOT NULL,
[cliNome] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[cliEndereco] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[cliCidade] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[cliUF] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[cliCEP] [varchar](9) COLLATE Latin1_General_CI_AS NOT NULL,
[cliFone] [varchar](15) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
(
[cliCNPJ] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Table [dbo].[Projeto_Apontamentos] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Projeto_Apontamentos](
[proId] [int] NOT NULL,
[apoId] [int] IDENTITY(1,1) NOT NULL,
[apoRecurso] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[apoCustoHora] [decimal](8, 2) NOT NULL,
[apoDataHoraIni] [datetime] NOT NULL,
[apoDataHoraFim] [datetime] NOT NULL,
[apoHoras] [int] NOT NULL,
[apoTotalCusto] [decimal](12, 2) NOT NULL,
[apoDescricao] [varchar](500) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_Projeto_Apontamentos_1] PRIMARY KEY CLUSTERED
(
[proId] ASC,
[apoId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Table [dbo].[Projeto_Despesas] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Projeto_Despesas](
[proId] [int] NOT NULL,
[desId] [int] IDENTITY(1,1) NOT NULL,
[desRecurso] [nvarchar](256) COLLATE Latin1_General_CI_AS NOT NULL,
[desData] [datetime] NOT NULL,
[desValor] [decimal](12, 2) NOT NULL,
[desNroNF] [varchar](20) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_Projeto_Despesas] PRIMARY KEY CLUSTERED
(
[proId] ASC,
[desId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Table [dbo].[Projetos] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Projetos](
[proId] [int] IDENTITY(1,1) NOT NULL,
[cliCNPJ] [varchar](18) COLLATE Latin1_General_CI_AS NOT NULL,
[proNome] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[proGerente] [nvarchar](256) COLLATE Latin1_General_CI_AS NOT NULL,
[proTotalHoras] [int] NOT NULL,
[proTotalCusto] [decimal](14, 2) NOT NULL,
[proTotalDespesas] [decimal](14, 2) NOT NULL,
CONSTRAINT [PK_Projetos_1] PRIMARY KEY CLUSTERED
(
[proId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
USE [WMProjetos]
GO
USE [WMProjetos]
GO
USE [WMProjetos]
GO
ALTER TABLE [dbo].[Projeto_Apontamentos] WITH CHECK ADD CONSTRAINT
[FK_Projeto_Apontamentos_Projetos] FOREIGN KEY([proId])
REFERENCES [dbo].[Projetos] ([proId])