ASP.NET no Delphi
8
Por
Ricardo Ferreira
Introdução
Neste artigo
iremos discutir como funciona o framework do .NET para a
web, o ASP.NET, bem como alguns conceitos de ADO.NET, o
middleware de acesso a banco de dados oficial da
plataforma .NET.
Iremos ver
também como criar um exemplo de ASP.NET usando o Delphi
8, a mais nova versão do Delphi, agora totalmente
voltando para a plataforma .NET.
Apresentação
da Tecnologia
O ASP.NET é
um ambiente de programação para se construir aplicações
para Internet com o HTML de front–end. O ASP.NET é uma
evolução do antigo ASP (Active Server Pages), com
algumas melhorias na parte de execução servidora,
integração com a plataforma .NET, acesso aos principais
objetos do COM (Component Object Model), e muito
mais.
Web
Services, é uma parte opcional do ASP.NET, que é uma
tecnologia de processamento de mensagens em XML, para
implementar comunicação entre aplicações legadas, e
ainda existe o ADO.NET, parte do .NET para acesso a
banco de dados.
Arquitetura
do ASP.NET

Os
componentes principais da arquitetura .NET, são os
WebForms, os controles ASP.NET e o código por trás das
DLL’s compiladas (Antigas ISAPI). Esse código compilado,
possue toda a lógica da aplicação, e que pode ser
escrita em qualquer linguagem de programação que
implemente os conceitos do .NET.
Esse código
quando executado dentro do servidor web é renderizado a
transformando em código HTML, que vai para o browser do
cliente.
Componentes
WebForms
Os WebForms
definem a interface com o usuário para a sua aplicação
web, contendo código HTML puro. A função deles é apenas
definir a camada de apresentação, de forma que o acesso
à lógica da aplicação seja simples e clara para o
desenvolvedor.
Para se
melhor entender o que são WebForms, vamos ver um pouco
da evolução do desenvolvimento web no Delphi.
Um dos
maiores problemas no desenvolvimento web feito nas
edições anteriores do Delphi, era conciliar o código das
regras de negócio, com a camada de apresentação. Por
exemplo, quem lembra do bom e velho WebBroker. Nele,
tínhamos que criar páginas HTML separadas, e criar
diversos objetos Actions para manipular os requests da
aplicação, e código do tipo
Request.ContentFields.Values['nome'], eram constantes na
aplicação, ou seja, tínhamos que amarrar nomes de
controles da página, dentro da lógica da aplicação no
WebModule.
Daí surgiu
na versão 6.0 do Delphi, o conceito de WebSnap, um
framework para agilizar o desenvolvimento web, de tal
forma que ela fosse escrita Snap (“Num piscar de
olhos”). A principal idéia do websnap era abstrair a
camada de apresentação, o front-end, a partir das regras
de negócio. Então se usava componentes conhecidos como
adapters, que podiam representar os dados, de qualquer
natureza, mesmo de componentes DataSets.
Ai com
certeza, o desenvolvimento web deslanchou, o
desenvolvimento era mesmo RAD, principalmente depois da
chegada do IntraWeb, que fez com que toda a complexidade
do WebSnap fosse ofuscada pela enorme facilidade de se
trabalhar com forms web.
Bom meus
caros leitores, vocês podem estar pensando, se estava
funcionando tudo tão bem, porque a Borland lança uma
nova versão do Delphi, totalmente diferente
(Particularmente mais simples), ao invés de continuar o
bom trabalho que havia feito nas edições
anteriores?
A resposta
para essa pergunta é: Evolução. O que a Borland fez com
o Delphi, foi simplesmente acompanhar a plataforma do
sistema operacional Windows. A plataforma imperante até
a edição do Windows XP, era a Win32, plataforma de 32
bits, baseada em diversas API’s.
O.NET, nada
mais é do que mais uma plataforma de desenvolvimento, e
também uma plataforma de sistema operacional. Para se
entender isso mais facilmente, pense no .NET como se
fosse as 500 milhões de DLL’s e APIS do Windows antigo,
só que agora num contexto mais claro, simples e
eficaz.
Pensando
sempre na facilidade do desenvolvedor, a Borland fez com
que o Delphi não ficasse de fora nessa nova plataforma
do Windows. Por isso mudar o Delphi, e não como muitos
pensam, que foi meramente para dificultar a vida dos
desenvolvedores.
Com o
ASP.NET podemos fazer tudo que fazíamos com todas as
tecnologias web anteriores do Delphi, só que sem se
preocupar com a relação camada de negócio, e camada de
apresentação, se preocupar apenas com a camada de
negócio que é o que mais interessa. Uma das coisas mais
fascinantes que vi no ASP.NET, além da grande facilidade
do seu desenvolvimento, é como ele trabalha com
validações a nível de cliente (Browser) e servidor (Web
Server).
Ele possue
componentes que simplificam 100% o desenvolvimento da
camada de validação de dados, na camada cliente
(JavaScript / VBScript), ou camada servidor
(Delphi).
Web
Controls
Outra grande
novidade do ASP.NET for Delphi, é os WebControls. Eles
são conjunto de componentes Web que simplificam o
desenvolvimento de interfaces web, com um rico leque de
componentes. Seu funcionamento é muito parecido como os
famosos componentes Data-Aware do Delphi (DBEdit,
DBGrid, DBNavigator). São componentes que se ligam com o
componente DBWebDataSource, que é o componente
responsável por acessar o famoso DataSet.
Isso
significa que o desenvolvimento para web com Delphi, pra
quem já está acostumado com desenvolvimento de
aplicações simples no Delphi, é quase que instantâneo
seu aprendizado.
Dentre
outras coisas, algumas vantagens que posso citar de se
usar os WebControls, é a facilidade de você desenvolver
a aplicação em tempo de design, sem ter que executar a
aplicação para ver o resultado da interface. O IDE do
Delphi foi modificado para você trabalhar de forma
simples e clara.
Ele também
automaticamente posta as alterações feitas nos controles
para o DataSet usado, sem a necessidade de se escrever
código extra para isso. Igual como acontecia com
componentes como o DBGrid.
As mudanças
de estado do DataSet também são tratados automaticamente
entre sessões. Isso significa que usuários de diversas
estações poderão operar na aplicação sem interferir nas
outra estações.
ADO.NET
ADO.NET é a
mais nova versão do middleware da Microsoft para acesso
a dados de SGBD’s e Arquivos XML, só que com acesso
total para qualquer dos componentes do .NET, seja os
WebForms, WinForms ou mesmo objetos
WebServices.
O Delphi
provê para o desenvolvedor alguns componentes que a
Borland denomina de Borland Data Providers (BDP). Esses
componentes fornecem uma abstração básica para os
objetos do ADO.NET, o que facilita bastante a
representação do mesmo, dentro do IDE do
Delphi.
Se você
estiver acostumando a trabalhar com desenvolvimento de
aplicações RAD, programação orientada a objetos usando o
conceito de propriedades, métodos e eventos, você vai
achar o desenvolvimento com ADO.NET muito
familiar.
Em artigos
posteriores, irei tratar de forma mais aprofundada o
ADO.NET, mas agora, vamos ver o como funciona o ASP.NET
dentro do Delphi.
Primeiro
exemplo de ASP.NET no Delphi 8
Neste
primeiro exemplo, iremos conectar com um banco de dados
Interbase, e mostar uma interface de acesso a dados,
usando ASP.NET e os WebControls do Delphi 8.
Para
implementar esse exemplo, você irá precisar ter
instalado em seu computador o IIS, deverá ter o
Framework do .NET, o SDK e o Runtime do .NET, bem como o
Delphi 8. É de extrema importância que você instale o
IIS antes de instalar o Delphi 8 e o framework em si,
pois poderão ocorrer problemas na execução dos testes do
exemplo.
Abra seu
Delphi 8. Dentro dele, vá em File -> New ->
ASP.NET Web Application. Isso irá abrir a caixa de
diálogo de criação de aplicação web no
Delphi.
Nesta caixa,
você irá definir como será a configuração da sua
aplicação web, qual servidor web será usado, bem como o
nome da aplicação em si. Na caixa ‘name’, digite:
‘ExemploAspDotNet’. Na caixa ‘Location’, pode deixar
como padrão que deve ser algo do tipo:
<Drive>:\InetPub\wwwroot\ExemploAspDotNet.
Essa é a
configuração default onde todas as aplicações em ASP.NET
devem ser hospedadas. O servidor usado no exemplo será o
IIS.
Clique em
OK. Será criada uma página em branco dentro do IDE do
Delphi. Nessa página, você poderá montar toda a sua
interface web, que o Delphi irá automaticamente fazer a
conversão para HTML, e ASP.NET.
Observe que
no painel inferior do IDE central do Delphi, existem 3
guias. A primeira informando o nome do arquivo .aspx,
que é realmente nossa página ASP.NET, a segunda é a unit
em si que define nosso WebForm e a ultima guia mostra o
Designer, ou seja, a parte do IDE do Delphi em que
podemos criar visualmente a aplicação.
Configurando a conexão com o Banco de Dados
Antes de
começar a montar nossa interface web, iremos montar a
conexão com o banco de dados, usando os Borland Data
Providers (BDP). Para fazer isso, acesse o Project
Manager, que fica no painel superior direito do IDE do
Delphi. Clique em Data Explorer.
Aqui se
encontram alguns providers já pré-configurados para se
trabalhar no Delphi. Aqui podemos criar novas conexões,
ou as existentes. Vamos então configurar uma conexão com
o banco de dados Interbase ‘Employee.GDB’. Expanda o
item Interbase, irá aparecer a conexão chamada
‘IBConn1’. Clique com o botão direito em cima dele, e
selecione ‘Modify Connection’ para alterar as
configurações na conexão. Se você quisesse criar uma
nova conexão, basta clicar com o botão direito do mouse
em cima do Item ‘Interbase’, e selecionar a opção ‘Add
New Connection’.
Na caixa de
diálogo Connection Editor, você deverá configurar a
conexão com o Interbase, para ele acessar o banco de
dados de exemplo. Vamos usar o banco de dados Employee
que vem junto com o Delphi. Portanto, na guia
‘Database’, configure para ele apontar para:
<Drive>:\Arquivos de Programas\Arquivos
Comuns\Borland Shared\Data\EMPLOYEE.GDB.
Isso depende
muito de onde você instalou o Delphi. Se você na hora da
instalação escolheu outro lugar para instalar os
arquivos comuns do Delphi, você deve alterar o caminho
acima para o local correto.
Depois de
configurar o caminho, configure username e password para
o seu usuário correto no Interbase, comumente, SYSDBA e
masterkey. Para testar a conexão, clique no botão ‘Test’
para ver se tudo está funcionando
corretamente.
Se aparecer
uma mensagem informando que a conexão foi executada com
sucesso, podemos continuar nosso exemplo. Se algum erro
ocorrer, cheque se o endereço está correto, se o
Interbase Server está sendo executado, ou mesmo se o
Interbase está instalado.
Para se
criar uma conexão com o banco de dados, usando BDP, é
muito simples. Basta que você arraste a conexão de
dentro do Data Explorer para alguma área da sua página
ASP.NET. Então arraste a conexão ‘IBConn1’ para dentro
da sua página. Vai ser criada uma área na parte inferior
do IDE, onde será posto um componente TBDPConnection,
que é o componente que substitue o TDatabase,
TIBDatabase, TADOConnection, ou
TSQLConnection.
Através
desse componentes podemos se comunicar com o banco de
dados. Selecione-o, e configure sua propriedade name
para ‘BdpConn’.
Com a
conexão criada e configurada, basta agora criarmos um
DataSet, que irá representar nossa tabela para o nosso
sistema web. Para se criar um DataSet no BDP, basta que
você use um componente TBdpDataAdapter. Através dele,
podemos criar um DataSet personalizado. Para se criar um
TBdpDataAdapter já configurado com a tabela, basta que
você expanda na conexão para acessar a lista de tabelas,
e dentro da lista de tabelas, arrastar uma delas para
dentro do IDE do Delphi, ou seja, o mesmo processo que
usamos para se criar a conexão.
Escolha a
tabela ‘Employee’. Arraste-a até o Container onde se
encontra o componente de conexão (BdpConn). Será criado
um componente TBdpDataAdapter com o nome
‘BdpDataAdapter1’. Mude seu nome para
‘BdpDtAdaptEmployee’.
Para se
configurar a conexão com a tabela, clique com o botão
direito em cima do componente BdpDataAdapter, e escolha
‘Configure Data Adapter’, como mostra a fugura
abaixo:
Fazendo
isso, você vai abrir a caixa de diálogo para configurar
a conexão com a tabela de banco de dados, e
opcionalmente, criar um DataSet. Na janela que se abre,
clique na guia ‘Command’. Nessa guia, você configura o
SQL que será usado para representar e manipular a
tabela. Na lista de tabelas (Tables), escolha a tabela
‘Employee’. Isso irá gerar automaticamente a instrução
SQL SELECT, dentro da caixa de SQL. Repare que você pode
gerar todas as intruções SQL requeridas para se
trabalhar com a tabela. Vemos então que a necessidade de
se usar um componente TUpdateSQL, não existe
mais.
Agora clique
na guia ‘DataSet’, e dentro dela você vai encontrar as
opções para se popular o dataset. Escolha a primeira
segunda opção, que é a de se criar um novo DataSet.
Através deste DataSet, iremos trabalhar com a tabela
Employee dentro da nossa aplicação. Chame este DataSet
de ‘DsEmployee’, e clique em OK. Isso irá criar dentro
do nosso modelo de dados, um novo componente, que será
exatamente nosso componente DataSet. Através dele,
iremos representar a tabela Employee na aplicação. Agora
repare a relação entre o componente DataSet e o
DataAdapter. Quem realmente manipula as instruções SQL
para a tabela é o DataAdapter, quem representa os dados
da tabela para a aplicação, é o DataSet.
Configure a
propriedade ‘Live Data -> Active’, para true, para
ativar nossa tabela dentro da aplicação.
Salve o
projeto. Até este ponto, temos nossa aplicação
praticamente toda configurada, faltando somente a
apresentação dos dados, ou seja, nossa
interface.
Se fossemos
criar a parte da interface no Delphi 7 ou edições
anteriores, teríamos que colocar no form ou DataModule
um DataSource, e plugar os componentes visuais nesse
datasource né?
No ASP.NET
do Delphi 8 é a mesma coisa. Para que possamos criar
nossa interface, basta que configuremos um datasource
dentro do projeto, para representar o nosso componente
DataSet, e plugar os componentes. Vamos configurar passo
a passo essa etapa do projeto.
Na paleta de
componentes, clique no botão ‘Categories’, e escolha a
opção ‘DB Web’. Dentro dessa paleta, temos todos os
componentes que precisamos para se trabalhar com
desenvolvimento web visual da forma RAD no
Delphi.
Escolha o
componente ‘DBWebDataSource’, e arraste-o até o
container dos componentes visuais, onde se encontram os
componentes de banco de dados.
Configure
seu nome para ‘DBWebDsEmployee’. Através dele, iremos
acessar nosso DataSet, basta que apontemos ele para
nosso DataSet. Para se fazer isso, clique na propriedade
‘DataSource’ do componente DBWebDataSource, e selecione
o DataSet ‘DsEmployee’, como mostra a figura
acima.
Pronto.
Nosso componente DataSource já está ligado com o DataSet
e, portanto, já está apto a propagar os dados para os
componentes visuais do Delphi. Vamos montar finalmente
nossa interface de entrada de dados. Vá até a paleta de
componentes, escolha a paleta ‘DB Web’, pegue o
componente ‘DBWebGrid’, e arraste até o Form Designer.
Será criada uma table do HTML, mas esse cara é o noss
Grid de dados, basta apenas que ele aponte para algum
DBWebDataSource válido do projeto, para ele ser usado da
forma correta.
Para isso,
vá até as propriedades desse componente Grid, e acesse a
propriedade ‘DBDataSource’, aponte essa propriedade para
o componente ‘DBWebDsEmployee’, que colocamos no
projeto.
Após isso,
configure na propriedade ‘TableName’, a tabela que será
representada no DBGrid. Fazendo isso, você já poderá ver
os dados da tabela dentro do designer web do Delphi
8.

Uma outra
forma mais simples de fazer a mesma configuração do
Grid, era selecionar o link ‘Property Builder’, da
janela de propriedades, que fica embaixo do Object
Inspector. Isso ativa o editor visual da configuração do
DBWebGrid.
Para
melhorar a aparência de nosso WebGrid, podemos escolher
alguns dos temas pré-configurados do Delphi 8. Para
isso, basta que você clique na opção ‘Auto Format’, da
janela de dicas do Object Inspector. Selecione-a, e na
janela que aparece, escolha a opção
‘Professional1’.
Repare que
após fazer isso, seu grid irá mudar de aparência. Você
pode quaiquer formatos que o Delphi oferecer, ou você
pode criar seus próprios padrões, bastando você
configurar corretamente nas propriedades (BackColor,
BorderColor, BorderWidth, GridLines, HeaderStyle, e
FooterSyle) do WebGrid.

Para testar
nosso, exemplo, simplesmente vá até o menu Run, e
escolha ‘Run without Debugging’. Você pode clicar apenas
em ‘Run’, mas fazendo isso, o Delphi irá carregar junto
com o processo da sua aplicação, o Debugger integrado,
onde você pode depurar de forma simples sua aplicação,
mas conseqüentemente o mesmo irá ficar mais lento. Sua
aplicação será aberta dentro de seu browser
padrão.
Para
finalizar nosso exemplo, vamos melhorar a estética de
nossa aplicação, configurando as colunas de nosso
WebGrid, e adicionando ao projeto, um componente
WebNavigator, para ajudar na navegação dos
registros.
Volte para o
Delphi, selecione o WebGrid, clique na propriedade
‘Columns’, e selecione o botão de pontilhado, para
editar as colunas do WebGrid.
Na janela
que se aparece, clique na guia ‘General’, e na caixa
‘DataSource’, escolha o nosso DBWebDsEmployee, se ele
ainda não estiver selecionado. Agora volte para a guia
‘Columns’, para configurar os campos do Grid. Desmarque
o checkbox ‘Create Columns automatically at Run Time’,
para que as colunas não sejam recriadas automaticamente
em tempo de execução. Adicione somente as colunas
(EMP_NO, FIRST_NAME, LAST_NAME, SALARY), na lista de
colunas selecionadas.
Configure o
HeaderText de cada coluna como especificado na figura
abaixo, quando você terminar, clique em OK.
Agora que
temos nosso grid configurando de forma mais apropriada,
podemos colocar um Navigator dentro do projeto, para
ajudar na navegação dos dados. Para isso, vá até a
paleta de componentes, e na paleta ‘DB Web’, pegue o
componente ‘DBWebNavigator', e coloque dentro do
designer, embaixo do nosso WebGrid. A configuração do
Navigator é a mesma do WebGrid, a saber, as propriedades
(DBDataSource e TableName), configure-as
apropriadamente.
Execute a
aplicação, você poderá agora navegar dentro os
registros, bem como usar o mecanismo de paginação,
criado automaticamente pelo ASP.NET.

Conclusão
Vimos neste
artigo alguns conceitos de o que é ASP.NET, como ele é
estruturado, e como montar aplicações de forma simples,
usando o Delphi 8.
Vimos também
como usar de forma correta, o novo engine de acesso a
dados do Delphi.NET, os Borland Data Providers, e como
configurá-los. Em próximos artigos iremos discutir como
fazer validações a nível de servidor e cliente, no
ASP.NET, Como implementar de forma eficiente, o design
pattern MVC (Model View Controller) dentro do ASP.NET,
bem como mostrar exemplos mais avançados, como pesquisas
dinâmicas, gerenciamento de sessões e criação de
templates em ASP.NET. Até a próxima!
Ricardo
Ferreira é Instrutor Certificado Borland,
trabalha na Argos Tecnologia como instrutor dos
cursos oficiais Borland, e é consultor de projetos
corporativos usando tecnologias como J2EE, RAD,
nas áreas de objetos distribuídos, web, e
integração de aplicações com WebSservices e
XML. |