Você está na página 1de 75

E-Commerce

com Delphi e ASP.NET

Sobre o Autor

Guinther Pauli é autor de mais de 100 artigos publicados e do livro “Delphi – Programação para Banco de Dados e Web”. É Bacharel em Sistemas de Informação pelo Centro Universitário Franciscano (Unifra, Santa Maria – RS). É desenvolvedor 5 estrelas Microsoft e certificado oficial MCP (Microsoft Certified Profissional) e MCAD (Microsoft Certified Application Developer), em C#, ASP.NET e Visual Studio .NET. Detém quatro certificações oficiais Borland:

Delphi Advanced pela Borland dos Estados Unidos, Delphi Web Development Certified, Kylix Product Certified e Delphi Product Certified. Já ministrou palestras para mais de 5 mil pessoas em todo o país. É Editor Geral da revista ClubeDelphi (www.clubedelphi.net) e Editor Técnico da Revista WebMobile Magazine (www.portalwebmobile.com.br). Pode ser contatado pelos endereços guinther_pauli@hotmail.com ou guinther@clubedelphi.net. Possui um blog no TheSpoke no endereço br.thespoke.net/MyBlog/Guinther/MyBlog.aspx Participação especial: Rudolfo Pauli, ASP.NET Specialist e Borland Delphi Certified, desenvolvedor do Centro de Processamento de dados (CPD) da Universidade Federal de Santa Maria (UFSM), atuando na área de projetos Web e Multicamadas.

Importante

Nenhuma parte deste curso, sem autorização prévia por escrito da editora, poderá ser reproduzida, copiada ou transmitida, sejam quais forem os meios empregados: eletrônicos, fotográficos, gravação ou quaisquer outros.Todos os direitos reservados e protegidos pela lei 5.988 de 14/12/73.

1

fotográficos, gravação ou quaisquer outros.Todos os direitos reservados e protegidos pela lei 5.988 de 14/12/73. 1
fotográficos, gravação ou quaisquer outros.Todos os direitos reservados e protegidos pela lei 5.988 de 14/12/73. 1

Introdução

E-Commerce

com Delphi e ASP.NET

O objetivo deste curso é ensinar você a utilizar os poderosos recursos do ASP.NET para desenvolver aplicações para Web,com o Delphi 2005. Durante todo o curso,você vai conhecer cada uma das funcionalidades

disponíveis, aplicando na prática os conhecimentos adquiridos, através de exemplos passo a passo. Começaremos conhecendo a IDE, suas opções e janelas, para que você possa começar a se familiarizar com o ambiente de desenvolvimento. A seguir, você conhecerá um pouco sobre o .NET Framework da Microsoft, como e porque surgiu, objetivos e arquitetura. No capítulo sobre Fundamentos do ASP.NET,você aprenderá a criar suas primeiras aplicações ASP.NET,conhecendo os recursos básicos do framework. O capítulo seguinte, sobre WebForms e WebControls, introduz a utilização de controles no lado servidor para criação de formulários Web. Você conhecerá em detalhes cada um dos controles disponíveis, principais propriedades, métodos e eventos.

O acesso a dados com ADO.NET é discutido em um capítulo a parte. Aqui você vai aprender a acessar banco de dados e facilmente exibir informações do Interbase em formulários Web, para que possam ser manipulados pelo usuário no browser. Depois você conhcerá o DataSet, uma peça-chave da nova arquitetura. No capítulo sobre DataBind, veremos como utilizar esse poderoso recurso do ASP.NET, para vinculação de dados. Os principais controles para exibição e manipulação de dados são vistos a seguir: Repeater, DataList e DataGrid.

Validações são extremamente simples de serem feitas com ASP.NET, usando os novos Validation Controls. Você fará na prática um exemplo que demonstra a utilização desses controles. No próximo capítulo, sobre Cache e Estado, você aprenderá a manipular sessões, objetos em cache e alguns segredos sobre como otimizar a performance de sua aplicação Web.

Segurança, um importante fundamento de qualquer aplicativo, é discutido em detalhes neste curso. Você aprenderá a tornar seguras suas aplicações ASP.NET, configurando permissões, regras de acesso e autenticação. O capítulo sobre configuração é uma referência sobre as principais opções disponíveis nos arquivos de configuração do ASP.NET, que permitem ajustar várias características e o comportamento de suas aplicações Web. Você também apredenderá a criar User Controls e Custom Controls, para facilmente compartilhar e reutilizar código entre diferentes aplicações. E finalmente, você conhecerá e aprenderá como criar e consumir Web Services, essa tecnologia que é um dos mais importantes fundamentos do .NET Framework.

Ao final de cada capítulo (exceto os introdutórios), você será desafiado a resolver um determinado problema. Usando os conhecimentos e técnicas vistas em cada capítulo, o aluno deverá desenvolver uma solução e uma aplicação ASP.NET, ajudando a consolidar o conteúdo. As soluções para todos

2

deverá desenvolver uma solução e uma aplicação ASP.NET, ajudando a consolidar o conteúdo. As soluções para
deverá desenvolver uma solução e uma aplicação ASP.NET, ajudando a consolidar o conteúdo. As soluções para

E-Commerce

com Delphi e ASP.NET

os exercícios podem ser encontradas no final do curso. Caso esteja dando seus primeiros passos com o ASP.NET, não se preocupe, todos os exercícios estão expostos de forma simples e usando método passo a passo. Conhecer o básico sobre programação e acesso a banco de dados ajudará. Para facilitar, cada capítulo é acompanhado de vídeo-aulas, para que você possa assistir e conhecer os recursos apresentados. No final do curso,você criará uma aplicação ASP.NET completa,onde a maioria dos recursos vistos nos capítulos anteriores pode ser aplicado em um único exemplo. Em caso de dúvida, sinta-se a vontade para entrar em contato com os instrutores, através do fórum do aluno. Tenha um bom curso, sucesso com os projetos ASP.NET!

3

entrar em contato com os instrutores, através do fórum do aluno. Tenha um bom curso, sucesso
entrar em contato com os instrutores, através do fórum do aluno. Tenha um bom curso, sucesso

E-Commerce

com Delphi e ASP.NET

A IDE do Delphi 2005

N este capítulo veremos uma introdução a IDE do Delphi 2005,

conhecendo suas principais funcionalidades. Darei prioridade aos

novos recursos, incluídos a partir do Delphi 7. No entanto, também

mostrarei alguns recursos mais avançados e úteis, mesmo tendo sido introduzidos em versões anteriores do produto.

Histórico

O ambiente integrado de desenvolvimento do Delphi (IDE – Integrated

Development Environment) permite o desenvolvimento RAD (Rapid Application Development) de aplicações para Windows (incluindo Win 32 e .NET) e Web,

utilizando a linguagem Delphi ou C#. A nova IDE se chama Borland Developer Studio e está na versão 3.0.

A IDE do Delphi 2005 começou a ser projeta há cerca de quatro anos. O

projeto Galileo (codinome usado na época) definia uma IDE destinada ao desenvolvimento de aplicações para a nova plataforma da Microsoft. Essa IDE surgiu com a primeira versão do C#Builder, chamada Borland Developer Studio, e foi uma estratégia da Borland para concorrer com o MS Visual Studio.NET. Como sabemos, o Delphi 7 já trazia uma versão do compilador Delphi para o .NET. O que poucos esperavam é que o Delphi for .NET (codinome Octane) se tornaria o Delphi 8 – e não um produto à parte – selando o compromisso da Borland com o .NET Framework. O Delphi 2005, codinome Diamondback, unifica todas as versões do Delphi e representa um marco na história do produto.

Instalação

Para instalar o Delphi 2005, você precisa estar utilizando necessariamente uma das seguintes versões do Windows: 2000 (SP2 recomendado), 2003 Server ou XP Professional – veja mais detalhes sobre os requisitos mínimos no documento borland.com/delphi_net/pdf/delphi_net8_sysreqs.pdf. O Delphi 2005 não roda em Windows 95, 98 ou Me (porém, as aplicações finais ainda poderão ser executadas em todos esses sistemas, exceto no Windows 95). Além disso, você deve ter instalado na sua máquina os ítens a seguir:

.NET Framework 1.1;

.NET Framework 1.1 SDK;

Microsoft Internet Explorer 6 SP1 ou superior;

Microsoft Visual J# .NET 1.1 Redistributable

Microsoft XML Core Services (MSXML) 4.0 SP2 (Delphi 2005)

Todos esses ítens são distribuídos juntamente com o produto. Você pode também fazer o download e obter mais informações sobre a instalação, a partir

do endereço msdn.microsoft.com/netframework/technologyinfo/howtoget. Recomendo a leitura do arquivo install.txt para mais informações.

4

. Recomendo a leitura do arquivo install . txt para mais informações. 4
. Recomendo a leitura do arquivo install . txt para mais informações. 4

E-Commerce

com Delphi e ASP.NET

A nova IDE do Delphi 2005

Com certeza a principal novidade do Delphi 2005 é o suporte ao desenvolvimento com múltiplas linguagens. O Delphi 2005 é basicamente a união do Delphi 7, Delphi 8 for .NET e C#Builder, com vários novos recursos na IDE. Sim, é isso mesmo, utilizaremos a partir de agora a mesma IDE para desenvolver tanto aplicações Win32 quanto .NET! Para não haver confusão, um pequeno ícone na toolbar principal indica qual a linguagem está atualmente ativa na IDE (Delphi Win 32 , Delphi for .NET ou C# ). Isso se chama

IDE (Delphi Win 32 , Delphi for .NET ou C# ). Isso se chama personalidade .Você
IDE (Delphi Win 32 , Delphi for .NET ou C# ). Isso se chama personalidade .Você
IDE (Delphi Win 32 , Delphi for .NET ou C# ). Isso se chama personalidade .Você

personalidade.Você pode ter,inclusive,um grupo de projetos com aplicações de diferentes tipos: a IDE se ajusta conforme a linguagem do projeto selecionado.

A Figura 1 mostra a IDE do Delphi 2005.

Dica:
Dica:

Durante a instalação do produto,clicando na opção custom,você pode escolher

o que deseja instalar: Delphi Win32, Delphi for .NET ou C#. Por padrão, as três opções são instaladas.

.NET ou C#. Por padrão, as três opções são instaladas. Figura 1. A IDE do Delphi

Figura 1. A IDE do Delphi 2005

Menu e Barra de Ferramentas

A Figura 2 mostra as barras de ferramentas do Delphi 2005. Clicando sobre ela, você pode ocultar/mostrar barras, inserir/remover botões etc.

pode ocultar/mostrar barras, inserir/remover botões etc. 5 Figura 2. Menus e ToolBars do Delphi 2005 Dica:

5

Figura 2. Menus e ToolBars do Delphi 2005

Dica:
Dica:

Clique em File|New>Customize para personalizar o menu File|New

5 Figura 2. Menus e ToolBars do Delphi 2005 Dica: Clique em File|New>Customize para personalizar o
5 Figura 2. Menus e ToolBars do Delphi 2005 Dica: Clique em File|New>Customize para personalizar o

E-Commerce

com Delphi e ASP.NET

Object Repository

A Figura 3 mostra o Object Repository do Delphi 2005. Observe que agora as seções são dispostas em formato de TreeView. Essa é uma característica forte da nova IDE. Ele é um repositório de objetos, wizards, templates, formulários, DataModules etc., que constantemente você usará para criar boas aplicações ou inserir novos itens a um projeto existente. Temos as seguintes opções para criação de aplicações:

C# Projects – para construção de aplicações .NET usando o C#. Os itens nessa opção são basicamente os que estavam disponíveis na IDE do C#Builder. Inclui suporte para desenvolvimento ASP.NET Web Forms e Web Services, Windows Forms, ECO etc. Crystal Reports – para a criação de relatórios usando o Crystal; Delphi for .NET Projects – aqui estão basicamente as opções que estavam disponíveis na IDE do Delphi 8, incluindo ASP.NET Web Forms e Web Services, Windows Forms, ECO, VCL Forms (a versão adaptada da VCL para o .NET) etc. Delphi Projects – basicamente tudo o que tínhamos no Delphi 7, incluindo aplicações VCL Win32, Active X, Web Services,Web Snap, Intraweb etc. Other Files – itens que não se enquadram em nenhuma das categorias anteriores. Permite a criação de grupos de projetos, aplicações VB.NET (com suporte limitado) etc. Unit Test – para a criação de testes unitários com o Delphi usando o DUnit; Web Documents – permite a criação de páginas HTML, documentos XML, arquivos Java Script etc.

de páginas HTML, documentos XML, arquivos Java Script etc. Figura 3. Delphi 2005 suporta desenvolvimento com

Figura 3. Delphi 2005 suporta desenvolvimento com Delphi for .NET, Delphi for Win32 e C#

Você pode adicionar um formulário ao Object Repository para que possa ser usado/compartilhado por outras aplicações ou outros desenvolvedores.

6

ao Object Repository para que possa ser usado/compartilhado por outras aplicações ou outros desenvolvedores. 6
ao Object Repository para que possa ser usado/compartilhado por outras aplicações ou outros desenvolvedores. 6

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 4. Menus e ToolBars do Delphi 2005 Agora é possível

Figura 4. Menus e ToolBars do Delphi 2005

Agora é possível personalizar os ítens que aparecem no menu File>New. Para isso, acesse File>New>Customize e arraste para a caixa Menu Items as opções que você acessa com mais freqüência (Figura 5).

que você acessa com mais freqüência ( Figura 5 ). Figura 5. Customizando o menu File>New

Figura 5. Customizando o menu File>New

Tela Inicial

Ao invés de iniciar com o tradicional formulário em branco, temos agora um “mini-browser” exibindo a Welcome Page, que possui links para acesso direto a sites de recursos, tutoriais e exemplos relacionados aos produtos da Borland. Além disso, são listados os últimos projetos abertos e links para os comandos New, Open Project, Open File e Help.

7

Dica:
Dica:

Você pode personalizar a página de boas-vindas da IDE do Delphi, editando diretamente o arquivo default.htm no diretório WelcomePage da instalação do BDS.

da IDE do Delphi, editando diretamente o arquivo default.htm no diretório WelcomePage da instalação do BDS.
da IDE do Delphi, editando diretamente o arquivo default.htm no diretório WelcomePage da instalação do BDS.

E-Commerce

com Delphi e ASP.NET

Desktop

As janelas utilizadas pela IDE (como Object Inspector, Form Designer e Code Editor) não ficam mais “soltas”. Tudo fica dentro da janela principal da IDE. Você pode alterar esse comportamento escolhendo a opção Classic Unlocked na barra Desktop, localizada por padrão ao lado direito do menu principal. Para ativar o estilo “solto” para aplicações VCL, recurso que foi bastante solicitado pelos desenvolvedores, desmarque a opção Tools|Options>Environment Options>Delphi Options>VCL Designer>Embedded Designer.

Options>VCL Designer>Embedded Designer . permite que seja salva a atual configuração de layout da

permite que seja salva a atual

configuração de layout da IDE, com posicionamento e tamanho de janelas e inspectors. Por exemplo, você pode querer ter um layout para desenvolvimento Web e outro para Win32.

A barra Desktops

Tool Palette

A paleta de componentes mudou radicalmente (Figura 6). Agora é mostrada

em uma nova janela chamada Tool Palette – não se chama mais Component Palette e seu aspecto é semelhante ao da Component List das versões anteriores

da IDE. Ao selecionar a paleta, digite as iniciais do ítem que está procurando e será feita uma pesquisa incremental.Os componentes são filtrados e o texto da busca é realçado em negrito no nome do componente e no título da janela. Aqui é utilizado o termo “ítem” no lugar de “componente”, pois a Tool Palette tem diferentes finalidades: se você estiver construindo uma aplicação VCL. NET, Windows Forms ou Web Forms, os ítens exibidos serão componentes apropriados ao tipo de aplicação em desenvolvimento; se estiver trabalhando com o editor, exibe Code Snippets – templates de código comumente utilizados

(como except,for

etc.) que ao serem clicados são adicionados ao editor na

posição do cursor. Já se estiver utilizando o Visual Model Designer, a Tool Palette exibe opções para a manipulação de diagramas UML, e assim por diante.

A Tool Palette também pode mostrar agora os ítens do Object Repository para

criação rápida de projetos (esse recurso já existia no Delphi 8, porém estava “oculto”).

to

do

Dica:
Dica:

Você pode personalizar a Tool Palette de várias formas: customizar cores e efeitos gradiente, transferir ítens entre categorias, criar categorias, ajustar o tamanho dos ícones etc.

criar categorias, ajustar o tamanho dos ícones etc. Figura 6. Tool Palette exibe componentes, opções para
criar categorias, ajustar o tamanho dos ícones etc. Figura 6. Tool Palette exibe componentes, opções para

Figura 6. Tool Palette exibe componentes, opções para criação de diagramas UML,ítens do Object Repository, Code Snipetts e muito mais

8

exibe componentes, opções para criação de diagramas UML,ítens do Object Repository, Code Snipetts e muito mais
exibe componentes, opções para criação de diagramas UML,ítens do Object Repository, Code Snipetts e muito mais

E-Commerce

com Delphi e ASP.NET

Project Upgrade

Quando você abrir no Diamondback um projeto VCL construído em versões

anteriores do Delphi, a IDE abrirá a caixa de diálogo Project Upgrade (Figura 7) perguntando se você deseja migrar os fontes do projeto para Delphi for .NET (usando a VCL.NET) ou manter em Delphi Win32.

A IDE basicamente procura pelo arquivo bdsproj para verificar se o projeto já

foi salvo/migrado na nova IDE.

verificar se o projeto já foi salvo/migrado na nova IDE. Figura 7. Project Upgrade: conversão de

Figura 7. Project Upgrade: conversão de aplicações VCL para VCL.NET

Project Manager

O Project Manager já aparece aberto por padrão (Figura 8). Através dele você

pode gerenciar os arquivos presentes no projeto (adicionar, excluir, remover etc.). Um novo ítem é apresentado, listando todos os assemblies .NET usados pela aplicação. O menu de contexto Add Reference permite adicionar uma referência a um novo assembly, a uma Type Library COM ou a outro projeto.

A mesma opção está disponível no menu Project. A opção Add Web Reference

permite adicionar uma referência a um Web Service, dando suporte inclusive

à busca usando UDDI.

Web Service, dando suporte inclusive à busca usando UDDI. Figura 8. Project Manager: muitas novas opções

Figura 8. Project Manager: muitas novas opções e melhorias

9

Dica:
Dica:
Você pode clicar no botão para que as janelas fiquem reduzidas a uma barra ao

Você pode clicar no botão para que as janelas fiquem reduzidas a uma barra ao lado da IDE. Ao passar o mouse sobre essa barra, a janela surgirá novamente.

as janelas fiquem reduzidas a uma barra ao lado da IDE. Ao passar o mouse sobre
as janelas fiquem reduzidas a uma barra ao lado da IDE. Ao passar o mouse sobre

E-Commerce

com Delphi e ASP.NET

Data Explorer

O Data Explorer (Figura 9) é uma ferramenta que lembra muito o antigo SQL Explorer, porém ele é completamente integrado à IDE do Delphi 2005 (além de poder ser executado como uma aplicação independente). Vejamos alguns recursos do Data Explorer:

Visualização do conteúdo das tabelas e views: basta dar um duplo clique sobre uma tabela no Data Explorer para que seja mostrado um DataGrid junto ao editor, mostrando o conteúdo da tabela ou view;

Execução de comandos SQL de forma direta: dê um clique de direita sobre uma conexão e escolha SQL Window. Digite os comandos SQL desejados e clique no botão ;

Execução de stored procedures: dê um duplo clique em um stored procedure no Data Explorer para que seja exibido um editor, nele você pode preencher os parâmetros indicados e executar o procedure;

Criação de tabelas: basta dar um clique de direita sobre o item Tables de uma conexão e escolher a opção New Table.

Alteração da estrutura de tabelas: dê um clique de direita sobre uma tabela e escolha a opção Alter Table;

Migração de tabelas entre diferentes bancos de dados usando Copy e paste (isso mesmo!): clique de direita sobre uma tabela e escolha a opção Copy Table. Em outra conexão, clique de direita e escolha Paste Table;

Também é possível copiar estruturas inteiras de bancos de dados:

Para isso, basta utilizar o recurso Migrate Data, dando um clique de direita sobre um driver no Data Explorer.

dando um clique de direita sobre um driver no Data Explorer. Figura 9. Data Explorer: manipulação
dando um clique de direita sobre um driver no Data Explorer. Figura 9. Data Explorer: manipulação

Figura 9. Data Explorer: manipulação de BD a partir da IDE

10

um clique de direita sobre um driver no Data Explorer. Figura 9. Data Explorer: manipulação de
um clique de direita sobre um driver no Data Explorer. Figura 9. Data Explorer: manipulação de

E-Commerce

com Delphi e ASP.NET

History Manager

Clicando na aba History na parte inferior do editor de código temos acesso a uma lista de versões para cada arquivo do projeto (Figura 10). Isso funciona da seguinte forma: toda vez que você salva um arquivo na IDE, o Delphi 2005 armazena uma versão para ele, que você pode mais tarde consultar, verificar alterações ou restaurar.

mais tarde consultar, verificar alterações ou restaurar. Figura 10. History Manager permite controlar versões do

Figura 10. History Manager permite controlar versões do código-fonte

É um controle de versão simples, claro (se comparado ao que faz o Borland StarTeam), mas que pode ser bastante útil. Na lista você pode ver a data da revisão, autor etc. Para voltar a uma revisão anterior de um arquivo, basta clicar de direita sobre a versão desejada e escolher a opção Revert.Clicando na opção Diff, você pode comparar versões de arquivos. Para definir a quantidade de revisões a serem armazenadas, selecione Tools|Options>Editor Options e altere o valor da opção File backup limit.

Options

As janelas Environment Options, Debugger Options e Editor Options foram finalmente unificadas e agora estão acessíveis a partir do menu Tools|Options. Há ainda novas opções, para configuração do HTML Designer, Windows Forms Designer, do ECO, do OptimizeIt e de aplicações ASP.NET.

Structure Panel

Se você observar a nova IDE, verá que não existem mais as janelas Object TreeView e Code Explorer. Não foi para menos, a nova janela Structure (localizada por padrão em cima do Object Inspector) pode tomar várias formas: exibir o Object TreeView caso você esteja ajustando componentes em um formulário, exibir a estrutura de uma unit caso esteja no editor, mostrar a estrutura de tags de um arquivo aspx caso esteja criando uma aplicação ASP.NET etc. Se estiver visualizando o StarTeam Client embutido, a janela Structure toma a forma do painel esquerdo da interface cliente, que exibe a estrutura de diretórios do servidor.

11

Structure toma a forma do painel esquerdo da interface cliente, que exibe a estrutura de diretórios
Structure toma a forma do painel esquerdo da interface cliente, que exibe a estrutura de diretórios

E-Commerce

com Delphi e ASP.NET

Object Inspector

O Object Inspector (Figura 11) é amplamente utilizado em qualquer tipo

de aplicação na IDE. Você normalmente o usará para definir propriedades e eventos para controles e componentes. O Object Inspector foi incrementado no Delphi 2005. Se você estiver construindo uma aplicação Windows Forms, por exemplo, a descrição de uma propriedade é automaticamente exibida na

parte inferior da janela, que também pode conter links para editores. O Object Inspector não é utilizado somente para configurar componentes: você também

o utilizará para construir diagramas UML, páginas HTML e Web Forms.

Dica:

Se você não se acostumar com o novo layout do Object Inspector, que divide as

propriedades por categorias, poderá alternar para o estilo tradicional. Clique sobre a janela com o botão direito e escolha Arrange>By Name.

janela com o botão direito e escolha Arrange>By Name . Figura 11. Object Inspector com várias

Figura 11. Object Inspector com várias melhorias

Code Editor

O code editor é, obviamente, usado para a edição de códigos na IDE. Ao lado

12

esquerdo do editor é mostrado o número da linha. Outro interessante recurso

é

método, de membros de classe, ou de toda uma seção da unit, como interface

ou implementation, entre outros elementos; basta clicar nos sinais “+” ou “-”.

O menu de contexto do editor possui duas novas opções: Fold e Unfold para

manipulação do code-folding. Você pode, por exemplo, clicar em Fold|Types para “esconder” toda a seção type da unit.

O editor tem ainda opções para manipulação de macros, localizadas na barra

de status (isso já estava disponível em versões anteriores do Delphi,mas apenas usando-se teclas de atalho). Além disso, duas abas – Code e Design – permitem alternar entre o designer e o editor de código.

o suporte a code-folding: você pode mostrar/ocultar a implementação de um

entre o designer e o editor de código. o suporte a code-folding : você pode mostrar/ocultar
entre o designer e o editor de código. o suporte a code-folding : você pode mostrar/ocultar

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 12. Editor de código: novos recursos Code Insight Temos vários

Figura 12. Editor de código: novos recursos

Code Insight

Temos vários recursos para utilização no editor, que podem ser configuradas a partir da janela Options:

Code Completion: completa código automaticamente;

Code Parameters: mostra os parâmetros requeridos por um método;

Tooltip Expression Evaluation: em modo de depuração, mostra o conteúdo de uma variável quando o mouse é repousado sobre o identificador;

Tooltip symbol Insight: mostra informações sobre um identificador quando o mouse é repousado sobre ele;

Tooltip Help Insight: mostra no code editor uma declaração/ documentação de um identificador;

Error Insight: mostra erros do compilador.

Teclas de atalho:

Ctrl + Space - Code Completation Ctrl + J Code Template (veremos a seguir como configurar essa opção) Ctrl + Shift + Space Code Parameters

Sem depuração

O novo comando Run|Run Without Debugging permite rodar uma aplicação

sem acionar o depurador integrado (que por padrão é ativado quando você

aperta F9). Na verdade essa opção já existia na versão anterior do Delphi, mas estava oculta por padrão.

O uso desse comando pode aumentar a velocidade de inicialização das

aplicações executadas dentro da IDE e reduzir o uso de memória (isso é útil porque muitas vezes rodamos a aplicação sem acabar realmente usando o depurador).

13

o uso de memória (isso é útil porque muitas vezes rodamos a aplicação sem acabar realmente
o uso de memória (isso é útil porque muitas vezes rodamos a aplicação sem acabar realmente

E-Commerce

com Delphi e ASP.NET

Form Designer

Como o Delphi 2005 não mais apenas destinado ao desenvolvimento de

aplicações VCL/CLX, temos novos designers. O VCL Designer é basicamente

o tradicional Form Designer do Delphi. Uma diferença é que agora você não poderá visualizar mais de um formulário ou Data Module ao mesmo tempo

(pois não ficam mais“flutuantes”,e sim vinculados ao designer).Outra mudança

é que novos formulários no Delphi 2005 possuem a extensão .nfm em vez de

.dfm (para VCL.NET). Ainda assim, é possível usar arquivos .dfm de aplicações VCL feitas no Delphi 7, ou anterior, para efeitos de compatibilidade. A principais mudanças nos designers são notadas ao se desenvolver aplicações com o Windows Forms Designer. Componentes não-visuais, por exemplo, ficam separados na parte inferior do formulário. Na parte superior desse designer temos barras de ferramentas destinadas a ajustes nos controles visuais, como posicionamento e espaçamento. Há ainda o suporte a undo (e

não apenas undelete). Uma grande diferença em relação ao trabalho com a VCL é que objetos não são representados em modo texto (assim como IDEs de outras linguagens,como C# e Java,que fazem a representação de componentes centrada em código, ao invés de em recursos, como faz a VCL). Ou seja, não existe arquivo .dfm ou .nfm em Windows Forms ou Web Forms: valores de propriedades de qualquer componente serão inicializados no método privado InitializeComponent, chamado no construtor do formulário.

Instalando componentes

Continuando o tour pela IDE, veja na Figura 13 a janela aberta acessando- se o menu Component|Installed .NET Components. Você poderá agora utilizar facilmente, em sua aplicação Delphi, componentes desenvolvidos em outras linguagens, como VB.NET ou C# (um grande avanço comparado aos antigos controles e bibliotecas ActiveX e objetos COM). Como você verá, ainda é possível usar controles ActiveX e COM a partir de uma aplicação .NET.

é possível usar controles ActiveX e COM a partir de uma aplicação .NET. 14 Figura 13.

14

Figura 13. Instalando componentes .NET

é possível usar controles ActiveX e COM a partir de uma aplicação .NET. 14 Figura 13.
é possível usar controles ActiveX e COM a partir de uma aplicação .NET. 14 Figura 13.

E-Commerce

com Delphi e ASP.NET

Reflection

O menu Tools|Reflection é um atalho para o utilitário Reflection.exe (Figura 14), que permite examinar os metadados e o código IL gerado para um assembly (sua aplicação feita no Delphi 8, por exemplo). Se você clicar em um assembly

a partir do Project Manager|References poderá então visualizar o seu IL dentro da própria IDE (junto ao designer).

o seu IL dentro da própria IDE (junto ao designer). Figura 14. Reflection: examinado os metadados

Figura 14. Reflection: examinado os metadados de Assemblies .NET

Help

Outra mudança está no Help, que está com novo formato. Além da documentação do Delphi 8, você poderá consultar a documentação completa do SDK do .NET Framework, além de tutoriais passo a passo para criação de aplicações Windows Forms, VCL.NET e Web Services, e dicas de migração.

15

Forms, VCL.NET e Web Services, e dicas de migração. 15 Curiosidade: O “ovo de páscoa” do
Forms, VCL.NET e Web Services, e dicas de migração. 15 Curiosidade: O “ovo de páscoa” do

Curiosidade:

O “ovo de páscoa” do Delphi 2005 é bastante original. Para visualizá-lo vá até

a janela About e pressione T+E+A+M enquanto segura a tecla Alt. Surgirá a

mensagem “Borland Rules!”. Aperte mais algumas vezes essas teclas e você verá um botão “Team” ao lado esquerdo. Clicando neste botão você entrará em um pequeno jogo. Pressione a barra de espaços para atirar nos nomes dos membros da equipe do Delphi, que descerão. Ao acertar nomes-chave (como Delphi Team, Subby, Delphi MDA Team, Corbin Dunn etc.), você verá algumas figuras que mostram, desde a equipe de desenvolvedores do Delphi 8 e do C#Builder, até a fila dos carros deles estacionados na sede da Borland.

a equipe de desenvolvedores do Delphi 8 e do C#Builder, até a fila dos carros deles
a equipe de desenvolvedores do Delphi 8 e do C#Builder, até a fila dos carros deles

E-Commerce

com Delphi e ASP.NET

Error Insight

A IDE monitora constantemente seu código-fonte procurando erros,indicando na janela Structure possíveis problemas com o seu código. Além disso, o código com problema fica agora sublinhado (semelhante ao que faz o Word). Repousando o mouse sobre o código você verá em um hint a mensagem de

erro gerada pelo compilador. A Figura 15 mostra um laço for sem o do e sem

a declaração da variável i. Observe o comportamento da IDE em resposta ao problema.

i . Observe o comportamento da IDE em resposta ao problema. Figura 15. Error insight: mensagens

Figura 15. Error insight: mensagens de erro do compilador em forma de Hint e listadas na janela Structure

Help Insight

Um novo recurso da IDE permite que a documentação associada a um determinado ítem seja agora mostrada em uma janela semelhante a um hint,

dentro do próprio editor (Figura 16). São exibidos também links para a unit onde está declarado um determinado tipo, componente etc. Clicando no link

o código-fonte associado será aberto.

tipo, componente etc. Clicando no link o código-fonte associado será aberto. 16 Figura 16. Instalando componentes

16

Figura 16. Instalando componentes .NET

tipo, componente etc. Clicando no link o código-fonte associado será aberto. 16 Figura 16. Instalando componentes
tipo, componente etc. Clicando no link o código-fonte associado será aberto. 16 Figura 16. Instalando componentes

E-Commerce

com Delphi e ASP.NET

Code Snippets

Permitem incluir código rapidamente no editor, a partir de templates.

código rapidamente no editor, a partir de templates. Figura 17. Code Snippets: templates de códigos Para

Figura 17. Code Snippets: templates de códigos

Para inserir um template, selecione um bloco de código no editor e arraste para a janela anterior enquanto segura a tecla ALT.

To-Do List

A partir de agora vou apresentar alguns recursos já antigos da IDE, mas

bastante úteis.

O To-Do List (Figura 18) especificar uma lista de tarefas a serem feitas em

uma unit ou formulário. Ao clicar no ítem do To-Do list, o Delphi abre a unit e posiciona o cursor onde o código dever ser colocado. Pode ser exportado para HTML (Figura 19). No code editor, use Shift+Ctrl+T para gerar um To-Do.

). No code editor, use Shift+Ctrl+T para gerar um To-Do. Figura 18. To-Do List: organize seu

Figura 18. To-Do List: organize seu trabalho adicionando tarefas associadas ao código-fonte

seu trabalho adicionando tarefas associadas ao código-fonte Figura 19. Exportando a lista de tarefas para HTML

Figura 19. Exportando a lista de tarefas para HTML

17

seu trabalho adicionando tarefas associadas ao código-fonte Figura 19. Exportando a lista de tarefas para HTML
seu trabalho adicionando tarefas associadas ao código-fonte Figura 19. Exportando a lista de tarefas para HTML

E-Commerce

com Delphi e ASP.NET

Refactoring

“Refactoring é a técnica disciplinada de reestruturar um bloco de código existente, alterando sua estrutura interna sem afetar o comportamento externo” (Martin Fowler). Cada refactoring é uma pequena transformação aplicada ao código-fonte, visando melhorar sua legibilidade, performance, organização, adequação a um padrão etc. Porém, uma seqüência muito grande de refactorings pode produzir uma reestruturação significativa. Refactorings devem garantir que a aplicação funcione da mesma forma após a reestruturação, reduzindo chances do sistema ter graves falhas após as modificações e minimizando a chance de introdução de bugs. Refactoring está intimamente ligado a testes unitários. Os testes unitários que garantirão se o código continua eficiente e funcional após os refactorings.

Dica:
Dica:

Para mais informações sobre Refactoring visite www.refactoring.com

Suporte a Refactoring na IDE do Delphi 2005

Provavelmente um dos recursos mais interessantes da IDE do Delphi 2005 seja o suporte a Refactoring (menu Refactor). Com isso podemos, a partir da

própria IDE,fazer a reestruturação do código de aplicações,como trocar nomes de variáveis, métodos, classes, desmembrar códigos em rotinas menores etc.

A Figura 20 mostra o novo menu Refactor do Delphi 2005:

A Figura 20 mostra o novo menu Refactor do Delphi 2005: Figura 20. Novas opções para

Figura 20. Novas opções para Refactoring na IDE

As opções estão disponíveis para desenvolvimento com Delphi for .NET,

Delphi Win32 e C# (algumas não estão disponíveis para algumas linguagens).

A seguir vamos estudar em detalhes cada uma das opções disponíveis. Para

fazer os testes, você pode criar uma aplicação Windows Forms no Delphi

2005.

18

uma das opções disponíveis. Para fazer os testes, você pode criar uma aplicação Windows Forms no
uma das opções disponíveis. Para fazer os testes, você pode criar uma aplicação Windows Forms no

E-Commerce

com Delphi e ASP.NET

Rename: métodos

Quando alteramos o nome de um identificador em sua declaração, é bastante provável que essa alteração tenha que ser feita em várias partes do código, onde o identificador é referenciado (métodos e variáveis). Em nossa aplicação Windows Forms, adicione o seguinte código na seção public da classe do formulário (a seguir aperte Shit+Ctrl+C):

procedure Foo; overload; procedure Foo(A:Integer); overload;

No Form_Load do formulário digite o seguinte (dê um duplo clique no designer):

Foo();

Foo;

Foo(5);

Agora suponha que precisamos alterar o nome do primeiro método, Foo, que não recebe parâmetros. Selecione-o na declaração e ative o menu Refactor>Rename, ou aparte Shift+Ctrl+E, e indique o novo nome do método conforme mostrado na Figura 21.

o novo nome do método conforme mostrado na Figura 21 . Figura 21. Renomeando métodos Será

Figura 21. Renomeando métodos

Será exibida a caixa de diálogo mostrada na Figura 22, que indica todos os trechos do código que sofrerão alterações, funcionando como um “preview”.

os trechos do código que sofrerão alterações, funcionando como um “preview”. 19 Figura 22 . Refactoring:

19

Figura 22. Refactoring: Preview

os trechos do código que sofrerão alterações, funcionando como um “preview”. 19 Figura 22 . Refactoring:
os trechos do código que sofrerão alterações, funcionando como um “preview”. 19 Figura 22 . Refactoring:

E-Commerce

com Delphi e ASP.NET

A seguir, é possível realizar uma das seguintes ações:

A seguir, é possível realizar uma das seguintes ações: • Refactor ( Ctrl+R ) para aplicar

Refactor (Ctrl+R) para aplicar as alterações;

• Refactor ( Ctrl+R ) para aplicar as alterações; • Undo Refactoring ( Ctrl + Z
• Refactor ( Ctrl+R ) para aplicar as alterações; • Undo Refactoring ( Ctrl + Z
• Refactor ( Ctrl+R ) para aplicar as alterações; • Undo Refactoring ( Ctrl + Z

Undo Refactoring (Ctrl + Z) - desfaz as modificações feitas pela opção anterior;

Remove Refactoring (Del) – limpa um Refactoring da lista da janela Refactorings;

Remove All Refactorings - limpa todas os refactorings da lista.

Aperte o botão Refactor. Após o Refactoring, observe que o Delphi ajustou o seguinte:

A declaração do método na seção interface;

O cabeçalho da implementação;

As chamadas feitas ao método no Form_Load, primeira e segunda.

Rename: variáveis

Também podemos usar o recurso de Refactoring para renomear variáveis. Por exemplo, digite o seguinte código no Form_Load:

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); var i: integer; begin for i := 0 to Controls.Count - 1 do MessageBox.Show(i.ToString());

end;

Selecione a variável“i”, clique de direita e escolha a opção Refactoring>Rename (ou use o menu principal), será mostrada a Figura 23.

(ou use o menu principal), será mostrada a Figura 23. Figura 23. Renomeando variáveis Note que

Figura 23. Renomeando variáveis

Note que alterei o nome da variável para Num. Se você desmarcar a opção View References before refactoring, o Delphi aplica a alteração imediatamente, sem exibir o código afetado na janela Refactoring.

20

before refactoring , o Delphi aplica a alteração imediatamente, sem exibir o código afetado na janela
before refactoring , o Delphi aplica a alteração imediatamente, sem exibir o código afetado na janela

E-Commerce

com Delphi e ASP.NET

Declare Variable: declarando variáveis automaticamente

Ainda usando o código anterior, retire a declaração da variável Num. Com isso, o Delphi indicará que a variável não está declarada (note o Error Insight em ação na Figura 24).

declarada (note o Error Insight em ação na Figura 24 ). Figura 24. Error Insight do

Figura 24. Error Insight do Delphi indicando variáveis não declaradas

Selecione a variável não declarada, clique de direita sobre ela e escolha a opção DeclareVariable (Shift+Ctrl+V).Você também pode usar o ítem disponível no menu Refactor, será exibida a seguinte caixa de diálogo da Figura 25. Nela você pode informar o tipo na variável a ser declarada, se é um array (com dimensões) e se você quer que o Delphi inicialize a variável.

e se você quer que o Delphi inicialize a variável. Figura 25. Declarando variáveis automaticamente O

Figura 25. Declarando variáveis automaticamente

O resultado obtido com base nas opções da figura pode ser visto a seguir (em

negrito):

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); var Num: Integer; begin Num := 10; for Num := 0 to Controls.Count - 1 do MessageBox.Show(Num.ToString());

end;

É claro, a inicialização da variável no bloco anterior não faz sentido, mantive aqui apenas para fins didáticos.

21

É claro, a inicialização da variável no bloco anterior não faz sentido, mantive aqui apenas para
É claro, a inicialização da variável no bloco anterior não faz sentido, mantive aqui apenas para

E-Commerce

com Delphi e ASP.NET

Declare Field: adicionando campos a uma classe

Um campo (Field) é semelhante a uma variável, porém pertence a uma classe. Considere o seguinte bloco de código, declarado no Form_Load da classe:

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.

EventArgs);-

begin Mensagem := ‘Ola Mundo’; end;

Mensagem é indicado como não declarado. Selecione o identificador e escolha

a opção Declare Field (Shift+Ctrl+D) no menu de contexto. Será mostrada a caixa de diálogo da Figura 26.

contexto. Será mostrada a caixa de diálogo da Figura 26 . Figura 26. Declarando campos automaticamente

Figura 26. Declarando campos automaticamente

Aqui podemos especificar o tipo do campo (o Delphi já detecta por padrão com base no contexto da mesma), se é um array e o especificador de visibilidade da classe (private, strict private, protected, strict protected, public e published). O resultado pode ser visto no código a seguir:

TWinForm1 = class(System.Windows.Forms.Form)

private Mensagem: string;

Sync Edit

Esse recurso permite que você altere de uma só vez o nome de classes, métodos, variáveis etc. referenciados em vários pontos do código-fonte. Por exemplo, selecione um determinado bloco de código e repare que aparecerá um pequeno ícone ao lado esquerdo do editor. Clique sobre o ícone,

ícone ao lado esquerdo do editor. Clique sobre o ícone, escolha o que deseja renomear (clique

escolha o que deseja renomear (clique Tab para alternar) e digite o novo valor.

A alteração será refletida instantaneamente em todos os locais do código

selecionado (veja a Figura 27).

22

valor. A alteração será refletida instantaneamente em todos os locais do código selecionado (veja a Figura
valor. A alteração será refletida instantaneamente em todos os locais do código selecionado (veja a Figura

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 27. Sync Edit altera todas as referências ao identificador enquanto

Figura 27. Sync Edit altera todas as referências ao identificador enquanto você digita

Extract Method

À medida que vamos adicionando código aos nossos métodos, eles vão se tornando mais complexos e sua lógica mais difícil de ser compreendida. Um procedimento comum é “desmembrar” o método em rotinas menores, e incluir a chamada ao método criado no local original onde estava o código. Imagine o seguinte código no Form_Load:

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); begin MessageBox.Show(‘Ola Mundo’); MessageBox.Show(‘Delphi 2005’); MessageBox.Show(‘Refactoring’); end;

Selecione todas as linhas que contêm o MessageBox, que clique em Refactor>Extract Method (Ctrl+Shift+M). O Delphi mostará a caixa de diálog da Figura 28, onde você pode informar o nome do novo método a ser criado.

você pode informar o nome do novo método a ser criado. Figura 28. Extract Method: extraindo

Figura 28. Extract Method: extraindo métodos de um bloco de código

Clicando em Ok, o código deve agora estar semelhante ao mostrado a seguir:

procedure TWinForm1.MostraMensagens; begin MessageBox.Show(‘Ola Mundo’); MessageBox.Show(‘Delphi 2005’); MessageBox.Show(‘Refactoring’); end;

23

begin MessageBox.Show(‘Ola Mundo’); MessageBox.Show(‘Delphi 2005’); MessageBox.Show(‘Refactoring’); end ; 23
begin MessageBox.Show(‘Ola Mundo’); MessageBox.Show(‘Delphi 2005’); MessageBox.Show(‘Refactoring’); end ; 23

E-Commerce

com Delphi e ASP.NET

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); begin MostraMensagens; end;

O Delphi retira todo o código selecionado do local original, move para o novo método (que já é declarado na seção private) e inclui a chamada. Agora imagine a seguinte situação, um tanto mais complexa:

procedure TWinForm1.TWinForm1_Load(sender: System.Object;

e: System.EventArgs);

var

n1,n2,n3: integer;

begin

n1 := 10;

n2 := 20;

n3 := n1 + n2;

MessageBox.Show(‘O resultado da soma é ‘ + n3.ToString());

end;

Imagine que fôssemos extrair somente o código que mostra o resultado da soma em n3. Nesse caso, se o código fosse extraído, a variável n3 não estaria mais disponível no novo método, pois obviamente saiu do escopo. O Delphi é capaz de detectar esse comportamento e automaticamente incluir a variável na passagem de parâmetros para o novo método, como mostrado a seguir:

procedure TWinForm1.MostraSoma(n3: Integer); begin MessageBox.Show(‘O resultado da soma é ‘ + n3.ToString); end;

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); var n1,n2,n3: integer; begin n1 := 10; n2 := 20; n3 := n1 + n2;

MostraSoma(n3);

end;

Extract Resource String

Resource Strings (strings de recurso) são declaradas de forma especial quando seu executável/DLL é compilado. Dessa forma, usando um editor de recursos, você pode facilmente “abrir” a aplicação compilada e alterar as strings, sem a necessidade de fazer sua recompilação. Isso é ideal para aplicações que precisam ser traduzidas para múltiplos idiomas, por exemplo. A palavra reservada resourcestring do Delphi Language permite a declaração de strings de recurso. Imagine o seguinte bloco de código, que levanta uma exceção com uma mensagem específica:

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); begin raise Exception.Create(‘Você efetou uma operação ilegal’); end;

24

System.Object; e: System.EventArgs); begin raise Exception.Create(‘Você efetou uma operação ilegal’); end ; 24
System.Object; e: System.EventArgs); begin raise Exception.Create(‘Você efetou uma operação ilegal’); end ; 24

E-Commerce

com Delphi e ASP.NET

Clique de direita sobre a string e escolha Extract Resource String (Shift+Ctrl+L).

O

Delphi mostrará a caixa de diálogo da Figura 29, onde você pode informar

o

nome da nova string:

29 , onde você pode informar o nome da nova string: Figura 29. Extraindo string de

Figura 29. Extraindo string de recursos

Seu código agora deve ficar semelhante ao mostrado a seguir:

resourcestring StrVocêEfetouUmaOper = ‘Você efetou uma operação ilegal’;

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs); begin raise Exception.Create(StrVocêEfetouUmaOper); end;

Find Unit

Uma última dica sobre Refactoring. Considere o seguinte bloco de código, colocado em uma aplicação VCL:

procedure TForm1.FormCreate(Sender: TObject); begin Color := clBlue; end;

Supondo que a unit Graphics, que declara o identificador clBlue, não esteja na seção uses. Selecionando clBlue e acessando o menu de contexto

Refactoring>Find Unit (Ctrl+Shift+A) fará ser aberta a caixa de diálogo mostrada naFigura30. Nelapodemosprocurarporidentificador(nessecasojádetectado)

e escolher se a referência à unit será colocada na seção implementation ou interface.

será colocada na seção implementation ou interface . Figura 30. Adicionando uma unit automaticamente à

Figura 30. Adicionando uma unit automaticamente à cláusula uses

25

colocada na seção implementation ou interface . Figura 30. Adicionando uma unit automaticamente à cláusula uses
colocada na seção implementation ou interface . Figura 30. Adicionando uma unit automaticamente à cláusula uses

E-Commerce

com Delphi e ASP.NET

O resultado pode ser visto no código a seguir, em negrito:

uses Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, Dialogs, Graphics;

Configurando os pacotes do Delphi 2005

Existe um utilitário chamado Delphi Configuration Manager que

permite criar “versões” da IDE do Delphi de acordo com o tipo de aplicação que você está desenvolvendo. Por exemplo, você pode configurar a IDE para carregar somente os pacotes necessários para o desenvolvimento com ASP. NET e Delphi, tirando a VCL, C#, Windows Forms, DataSnap, IntraWeb etc. Isso permite deixar a IDE muito mais rápida. Para cada ”versão” da IDE, o utilitário cria um ícone na área de trabalho (ex.“Delphi 2005 ASP.NET”,“Delphi 2005 VCL”) etc. Para fazer o download, acesse www.alphalink.com.au/~jed/dcm.htm. Outro utilitário semelhante pode ser encontrado em www.codeline.net

26

acesse www.alphalink.com.au/~jed/dcm.htm . Outro utilitário semelhante pode ser encontrado em www.codeline.net 26
acesse www.alphalink.com.au/~jed/dcm.htm . Outro utilitário semelhante pode ser encontrado em www.codeline.net 26

E-Commerce

com Delphi e ASP.NET

Introdução ao .NET Framework

O .NET Framework é uma plataforma que simplifica o desenvolvimento

aplicações,focada na Internet e baseada em padrões consolidados

do mercado. A iniciativa foi anunciada em julho de 2000 e oferece um

da

rico conjunto de classes e objetos destinados a criação de aplicações.

Objetivos do .NET

Oferecer um ambiente integrado para desenvolvimento baseado na orientação a objetos, que podem ser executados localmente ou remotamente;

Oferecer um ambiente seguro para execução de código, eliminando problemas de performance, causados por linguagens baseadas em script ou código interpretado;

Manter a experiência do desenvolvedor através de uma variedade de tipos de aplicações, como Windows e Web;

Ser baseado em padrões da indústria, como XML e Web Services, garantindo que todo código baseado no .NET possa ser facilmente integrado com outros códigos;

Oferecer software como um serviço;

Definir um novo modelo de desenvolvimento baseado em componentes, dando fim a era COM (embora ainda seja possível usar objetos COM no .NET);

Permitir a integração entre linguagens, baseando-se em um modelo único de desenvolvimento e oferecendo uma biblioteca de classes comum (a mesma utilizada no C#, VB.NET, Delphi etc.) Acredite, programar em uma linguagem específica não será mais tão importante:com .NET você passará a programar para uma plataforma; conhecendo as classes do .NET Framework, poderá utilizar com facilidade qualquer linguagem .NET;

Permitir a distribuição simplificada de aplicações (também conhecida como “distribuição por XCOPY”), sem a necessidade de registros ou configurações adicionais;

Desenvolvimento focado na Web, utilizando padrões abertos como o HTTP, SOAP e XML;

Utilização de um ambiente seguro, gerenciado e robusto para a execução de aplicações (uma máquina virtual); compiladores para

o .NET não geram mais instruções nativas da CPU, mas código

intermediário;

Abolir a necessidade de registro de bibliotecas e objetos, ou o uso de GUIDs; acabam os problemas de versionamento de DLLs (a chamada “DLL Hell”). O GAC (Global Assembly Cache) faz o controle automático de versões de assembly.

Ser o sucessor do modelo atual de programação Win32, fazendo com

27

o controle automático de versões de assembly. • Ser o sucessor do modelo atual de programação
o controle automático de versões de assembly. • Ser o sucessor do modelo atual de programação

E-Commerce

com Delphi e ASP.NET

que o programador use um conjunto robusto de classes ao invés de chamar APIs diretamente (DLLs como user32.dll, gdi32.dll, etc.);

Ser um competidor para o Java, introduzindo a independência de sistema operacional, utilização de uma máquina virtual e código gerenciado. Veja na Figura 1 um diagrama que resume a arquitetura de aplicações .NET.

um diagrama que resume a arquitetura de aplicações .NET. Figura 1. A plataforma .NET define uma

Figura 1. A plataforma .NET define uma infra-estrutura básica para o desenvolvimento de aplicações

A seguir, vamos examinar detalhadamente cada um dos elementos presentes

no .NET Framework, suas características, fundamentos e utilização.

Common Language RunTime (CLR)

A CLR é a máquina virtual do .NET e é uma das peças-chave da plataforma.Sem

dúvida é o“kernel”de todo o framework e reponsável por toda a funcionalidade de qualquer aplicação escrita para a plataforma. Entre as atribuições da CLR estão:

Gerenciar a memória - a CLR efetua constantes verificações na memória da aplicação, garantindo a sua performance e integridade;

Gerenciar o Garbage Collection – o“coletor de lixo”da CLR se encarrega de liberar objetos alocados e não liberados pelo desenvolvedor;

Efetuar a compilação de código intermediário (discutido a seguir);

Execução de threads e execução de código gerenciado;

Realizar constantes verificações no código para garantir a segurança;

Verificação de tipos – não é possível a utilização de ponteiros sem tipos, o .NET é um ambiente de execução fortemente tipado; Vários outros aspectos estão diretamente relacionados à máquina virtual, como veremos a seguir.

28

fortemente tipado; Vários outros aspectos estão diretamente relacionados à máquina virtual, como veremos a seguir. 28
fortemente tipado; Vários outros aspectos estão diretamente relacionados à máquina virtual, como veremos a seguir. 28

E-Commerce

com Delphi e ASP.NET

MSIL - Microsoft Intermediate Language

Compiladores de linguagens (como C#,VB,Delphi etc.) não geram mais código nativo da CPU e do sistema operacional, como acontecia até agora. Ao invés disso, compiladores geram código gerenciado, em linguagem intermediária, ou seja, código para rodar na plataforma. Imagine isso como sendo algo entre linguagem de máquina e código-fonte. Assim, se for fornecida uma CLR para outro sistema operacional, seu código compilado continua o mesmo. O resultado da compilação é um Assembly .NET. O trecho a seguir mostra um exemplo de código intermediário, extraído a partir da “descompilação” de uma aplicação de console:

.method private hidebysig static void Main(string[] args) cil managed

{

.entrypoint

.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )

// Code size

2 (0x2)

.maxstack 0 IL_0000: nop IL_0001: ret } // end of method Class1::Main

Fique tranqüilo, não é preciso (apesar de ser possível) escrever diretamente em IL. Você pode examinar o código intermediário de assemblies .NET usando a ferramenta Ildasm.exe(Figura 2), distribuído com o SDK do .NET Framework (C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Bin).

( C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Bin ). Figura 2. “Descompilando” código .NET com o ILDASM.exe

Figura 2. “Descompilando” código .NET com o ILDASM.exe

O compilador JIT

Aplicações .NET são compiladas duas vezes. A primeira, ocorre quando compilamos nosso código-fonte usando o compilador da linguagem (C#, VB, Delphi etc.), como falamos anteriormente. Quando a aplicação é executada pela primeira vez, a máquina virtual do .NET Framework (CLR) identifica qual

29

Quando a aplicação é executada pela primeira vez, a máquina virtual do .NET Framework (CLR) identifica
Quando a aplicação é executada pela primeira vez, a máquina virtual do .NET Framework (CLR) identifica

E-Commerce

com Delphi e ASP.NET

sistema operacional está sendo utilizado (Windows 98, NT, 2000, XP etc.) e se encarrega de acionar o JIT (compilador Just in Time), que gera o executável nativo da plataforma. Quando a aplicação for executada novamente, a CLR considera a versão compilada. Ou seja, o produto final (o executável) tem a mesma performance de uma aplicação nativa, para Win32 por exemplo.

Managed Code

Todo código compilado para .NET é chamado de código gerenciado (Managed

Code). A máquina virtual pode então fazer constantes verificações de tipo para garantir a segurança na execução do código. Não há brechas para execução de códigos maliciosos que possam prejudicar o funcionamento da aplicação

e do sistema operacional como um todo. A CLR é um ambiente totalmente

seguro. O código compilado nativo para o sistema operacional é chamado de Unmanaged Code.

Assemblies

é

essencialmente uma unidade básica de distribuição,podendo ser um aplicação (.EXE) ou uma biblioteca (.DLL) ou ainda ser formado por um conjunto delas.

Um

Assembly

é

um

importante

conceito

no

.NET

Framework.

Ele

GAC, Side By Side Execution e Manifest

O GAC – Global Assembly Cache é o local onde o .NET armazena todos os

Assemblies (bibliotecas DLLs) compartilhadas por várias aplicações. Se você já desenvolveu aplicações para Windows que utilizam DLL, já deve ter passado por um problema bastante comum: uma nova versão da DLL é utilizada na máquina e a aplicação que a usava deixa de funcionar, problema conhecido como “DLL Hell”. No .NET, cada Assembly é versionado (ex. 1.0.0.0) internamente. Ou seja, podemos ter, na mesma máquina, duas versões da mesma DLL sendo executadas ao mesmo tempo. A aplicação usará a DLL que foi utilizada no momento da sua compilação, graças às informações armazenadas no manifest da aplicação. A possibilidade de existirem várias versões da mesma DLL física rodando na mesma máquina, cada uma sendo utilizada por uma aplicação,

é chamado de Side By Side Execution (execução lado a lado). Costumo dizer, a

grosso modo, que o GAC seria como um “System32 versionado”. Você pode utilizar o gacutil.exe do SDK para instalar e remover Assemblies do GAC, ou ainda usar um extensão do explorer do Windows, bastando abrir o diretório C:\Windows\assembly a partir do Shell (Figura 3).

30

extensão do explorer do Windows, bastando abrir o diretório C:\Windows \ assembly a partir do Shell
extensão do explorer do Windows, bastando abrir o diretório C:\Windows \ assembly a partir do Shell

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 3. GAC faz controle de versão de assemblies automaticamente: é

Figura 3. GAC faz controle de versão de assemblies automaticamente: é o fim do DLL Hell

CLS - Common Language Specification e CTS - Common Type System

Um dos principais objetivos do .NET Framework é permitir a integração entre linguagens, baseando-se em um modelo único de desenvolvimento e oferecendo uma biblioteca de classes comum,a mesma utilizada no C#,VB.NET, Delphi etc. Antes do .NET, cada linguagem definia um conjunto próprio de tipos, classes e APIs (por exemplo a MFC da Microsoft, a VCL do Borland Delphi, etc.), o que poderia aumentar a curva de aprendizado caso um desenvolvedor precisasse utilizar outra ferramenta de desenvolvimento ou linguagem. Além disso, a integração entre linguagens, componentes ou aplicações nunca foi algo simples. Várias tecnologias surgiram com esse objetivo: o COM (Component Object Model), DDE (Dynamic Data Exchange), OLE (Object Linking and Embedding), ActiveX etc. Quem nunca precisou acessar a partir de sua aplicação uma DLL escrita em outra linguagem? As Type Libraries até que facilitavam um pouco esse processo. Outras vezes, era preciso declarar uma rotina externa e utilizar tipos básicos da API do Windows, como pchar e cardinal. Em todos os casos a integração é praticamente rudimentar. Você não podia, por exemplo, estender um objeto COM escrito em VB declarando uma classe descendente em Delphi, somente interfaces. Com o .NET isso muda drasticamente. Todas as linguagens feitas para o .NET utilizam os mesmos tipos básicos, através de uma especificação chamada CTS (Common Type System). Por exemplo, os tipos System.String, System. Object, System.IO.File, System.Data.Dataset podem ser utilizados em qualquer linguagem que possua um compilador para .NET. Além disso, a CLS (Common Language Specification) define convenções e regras destinadas a garantir a interoperabilidade entre diferentes linguagens (C#, VB, Delphi etc.). Dessa forma, você pode tirar proveito de todos os recursos oferecidos pela POO entre diferentes linguagens, como herança, tratamento de exceção e polimorfismo, usando somente o código binário (em formato MSIL – Microsoft Intermediate Language) gerado pelo compilador da outra linguagem! Não é necessário possuir o código-fonte.

31

Intermediate Language ) gerado pelo compilador da outra linguagem! Não é necessário possuir o código-fonte. 31
Intermediate Language ) gerado pelo compilador da outra linguagem! Não é necessário possuir o código-fonte. 31

E-Commerce

com Delphi e ASP.NET

.NET Framework Class Library e Namespaces

Provavelmente um dos melhores recursos do .NET Framework é sua extensa biblioteca de classes e objetos.No .NET,temos classes para realizar praticamente qualquer tarefa de programação: trabalhar com arquivos, conectar a um banco de dados, construir/consumir Web Services, criar aplicações GUI ou para Web etc. Para facilitar, as classes foram organizadas em namespaces, que são estruturas lógicas destinadas a agrupar classes e tipos com funcionalidades semelhantes. Por exemplo, todas as classes básicas do framework estão localizadas no namespace System. As classes destinadas ao desenvolvimento para banco de dados estão sob o namespace System.Data. Para o desenvolvimento de aplicações visuais para Windows, o namespace é System.Windows.Forms. E assim por diante. Com isso, fica muito fácil (e intuitivo) a localização de e organização de classes no framework. A Figura 4 mostra os principais namespaces do Framework.

A Figura 4 mostra os principais namespaces do Framework. Figura 4. No .NET Framework, classes são

Figura 4. No .NET Framework, classes são organizadas logicamente em namespaces

Veja alguns dos principais namespaces do framework,contendo as respectivas classes para as finalidades indicadas:

System.Web.UI - criação de aplicações visuais para Web com ASP.NET Web Forms;

System.Web.Services - programação com Web Services usando ASP. NET;

System.Windows.Forms - criação de aplicações GUI com Windows Form;

System.Data - conectividade com fontes de dados usando ADO.NET;

System.EnterpriseServices - classe para criação aplicações COM+;

System.Globalization - localização de aplicações (cultura), incluíndo formato de data, moeda, números etc.

System.IO - manipulação de arquivos;

System.Net - classes base para os principais protocolos da Internet;

System.Reflection - reflexão no .NET;

System.Runtime.InteropServices - Interoperabilidade .NET e COM;

System.Runtime.Remoting - aplicações de objetos distribuídos;

System.Runtime.Serialization - serialização de objetos;

System.Security - configuração de segurança;

System.Text - manipulação de strings e textos;

System.Threading - desenvolvimento multi-tarefa;

System.Web.Caching - Cache em ASP.NET;

System.Web.Configuration - Configuração ASP.NET;

32

multi-tarefa; • System.Web.Caching - Cache em ASP.NET; • System.Web.Configuration - Configuração ASP.NET; 32
multi-tarefa; • System.Web.Caching - Cache em ASP.NET; • System.Web.Configuration - Configuração ASP.NET; 32

E-Commerce

com Delphi e ASP.NET

System.Web.Mail - protocolos POP3 e SMTP;

System.Web.Mobile - desenvolvimento Mobile com ASP.NET;

System.Xml - processamento de documentos XML.

Nota:
Nota:

Para uma lista completa de todos os namespaces, consulte a documentação do SDK. Não confunda namespace com Assemblies. Assemblies são unidades físicas, enquanto namespace é simplesmente uma forma de organizar logicamente classes relacionadas. Um Assembly pode definir vários namespaces. Ou ainda, um namespace pode ter classes definidas em vários tipos diferentes assembly.

Tipos de Objetos

O .NET Framework é totalmente orientado a objetos. Isso significa dizer que tudo no framework é um objeto, desde inteiros, strings até objetos de acesso a dados.Todos descendem obrigatoriamente de System.Object; Existem dois tipos de objetos no .NET:

Reference: um objeto que é referenciado através de um endereço na pilha, um ponteiro tipado.

Value: são alocados diretamente na pilha, sempre contém um valor e não podem ser nulos. Geralmente utilizados nos tipos primitivos, como inteiros, strings etc. Para permitir a utilização de tipos Value como se fossem realmente objetos, o .NET utiliza um recurso chamado Boxing, permitindo que você possa chamar métodos e acessar suas propriedades. O processo inverso é conhecido como UnBoxing. Por exemplo, você pode ter o seguinte:

var

i: integer;

s : string;

begin

i := 10;

i.ToString();

Ou sendo mais “radical” ainda:

s := 10.ToString();

Referência

Para mais informações sobre o .NET Framework, consulte o endereço msdn. microsoft.com, onde existe uma extensa documentação sobre o assunto, incluindo exemplos,tutoriais,diagramas etc.Para sua referência futura,compilei no quadro a seguir um pequeno glossário de termos que provavelmente farão parte a partir de agora do seu dia a dia como desenvolvedor .NET

33

pequeno glossário de termos que provavelmente farão parte a partir de agora do seu dia a
pequeno glossário de termos que provavelmente farão parte a partir de agora do seu dia a

E-Commerce

com Delphi e ASP.NET

Mini-glossário do .NET Framework

CLI Common Language Infrastructure:é um dos principais fundamentos da plataforma .NET.

CLI

é uma especificação que define um ambiente virtual de execução (VM – virtual machine), desenhado para

suportar diversas linguagens de programação que podem interagir entre si.A Microsoft submeteu essa especificação à ECMA (European Computer Manufacturer’s Association www.ecma-international.org/) para que outras empresas pudessem oferecer diferentes implementações. A especificação CLI inclui também as especificações do CTS, CLS, MetaData, CIL e VES (veja a seguir).

CTS Common Type System – especificação que define um sistema comum de tipos (valor ou referência) que podem ser utilizados em diferentes linguagens de programação.

CLS Common Language Specification – subconjunto do CTS, define convenções e regras

destinados a garantir a interoperabilidade entre diferentes linguagens (C#, VB, Delphi etc), incluindo herança, manipulação de exceções e polimorfismo.

CLR Common Language RunTime – implementação da Microsoft para a especificação CLI.

Para aqueles que conhecem o Java, o CLR é muito semelhante à JVM (máquina virtual Java). Entre suas principais funções, estão:conversão do código IL (Intermediate Language – linguagem intermediária) em código nativo

da plataforma, execução das aplicações .NET, gerenciamento de memória automático (Garbage Collection) e

verificações de segurança.

CIL Common Intermediate Language – compiladores construídos para a plataforma .NET

não geram instruções nativas do processador. Ao invés disso, geram código intermediário (IL – Intermediate Language). Novamente, se você conhece Java, pense nisso como algo semelhante ao bytecode, o que permite que, pelo menos em teoria, seu código compilado possa rodar futuramente em diferentes plataformas.

JIT Just-In-Time Compiler – mecanismo associado ao CLR que permite a compilação do código IL em código nativo da plataforma no momento da sua execução.

FCL Framework Class Library – conjunto de classes do .NET.

GAC Global Assembly Cache – normalmente você copia uma DLL para o diretório de sistema

do

Windows quando precisa compartilhá-la entre várias aplicações; quando uma nova versão da DLL é fornecida,

algumas aplicações podem parar de funcionar.O GAC termina com isso,permitindo que você instale diferentes versões

de um mesmo assembly:cada aplicação usará a versão para a qual foi compilada (recurso conhecido como side-by-

side execution – execução lado a lado).

GC Garbage Collector – mecanismo associado ao CLR que realiza a “coleta de lixo” (garbage collection), liberando recursos (como objetos) que não estejam mais sendo utilizados.

NameSpaces – no .NET Framework, NameSpaces permitem organizar tipos, classes e

identificadores.

Assembly – é a unidade básica de distribuição do .NET Framework,podendo conter o código IL,dados

como imagens e recursos. Um assembly pode ser formado de um simples arquivo (.exe ou .dll), ou ser construído a partir de vários arquivos.

Manifest – cada assembly possui um manifesto, que é basicamente um conjunto de informações que descrevem os arquivos que o assembly contém e de que outros arquivos ele depende.

Managed Code – código compilado para a plataforma .NET, que é gerenciado pelo CLR.

Unmanaged Code é o código de aplicações compiladas que não são gerenciadas pelo CLR e são nativas do processador.

Download e Instalação do .NET Framework

O .NET Framework SDK e Redistributable podem ser obtidos a partir dos endereços:

www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070-

9f41-a333c6b9181d&DisplayLang=en

34

www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070- 9f41-a333c6b9181d&DisplayLang=en 34
www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070- 9f41-a333c6b9181d&DisplayLang=en 34

E-Commerce

com Delphi e ASP.NET

www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-

8157-034d1e7cf3a3&DisplayLang=en

Configuração do ASP.NET no IIS

Para rodar as páginas ASP.NET deste curso, é preciso que você

tenha o Internet Information Services instalado. Para isso, você pode usar o Adicionar>Remover Programas do Painel de Controle. Caso tenha instalado o .NET Framework antes do IIS, é necessário executar a seguinte linha de comando:

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>aspnet_regiis.exe –i

 

Links

ECMA

www.ecma-international.org

Links para as especificações

msdn.microsoft.com/net/ecma

35

ECMA • www.ecma-international.org • Links para as especificações • msdn.microsoft.com/net/ecma 35
ECMA • www.ecma-international.org • Links para as especificações • msdn.microsoft.com/net/ecma 35

E-Commerce

com Delphi e ASP.NET

Fundamentos do ASP.NET

Neste capítulo vamos examinar alguns fundamentos básicos do desenvolvimento de aplicações ASP.NET. Vamos conhecer a estrutura de aplicações, arquivos envolvidos, modelo de execução e conheceremos os principais objetos e classes do framework.

Criando uma Aplicação Web Forms

Para facilitar, vamos criar uma aplicação, de forma que os conceitos serão expostos a seguir. O exemplo será extremamente simples, facilitando o entendimento dos fundamentos do desenvolvimento Web com o ASP.NET. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 1. Criando uma aplicação ASP.NET

Figura 1. Criando uma aplicação ASP.NET

No formulário principal, coloque um Button, um TextBox e um Label. Seu formulário deve estar semelhante ao mostrado na Figura 2.

36

TextBox e um Label . Seu formulário deve estar semelhante ao mostrado na Figura 2. 36

Figura 2. Olá Mundo ASP.NET!

TextBox e um Label . Seu formulário deve estar semelhante ao mostrado na Figura 2. 36
TextBox e um Label . Seu formulário deve estar semelhante ao mostrado na Figura 2. 36

E-Commerce

com Delphi e ASP.NET

No evento Click do botão digite o seguinte:

Label1.Text := TextBox1.Text;

Execute e teste a aplicação (Figura 3).

TextBox1.Text; Execute e teste a aplicação ( Figura 3) . Figura 3. Aplicação estilo “Ola Mundo

Figura 3. Aplicação estilo “Ola Mundo no ASP.NET”

Dica:
Dica:

Para executar a aplicação,clique no menu Run>Run.Se receber uma mensagem de erro do debugger, use a opção Run>Run without debugging.

Nota:
Nota:

Apesar de utilizarmos controles do lado servidor nos exemplos deste capítulo (Button, TextBox etc.), eles não serão discutidos em detalhes nesta parte do curso, mas em capítulos seguintes.

Com base neste exemplo, vamos examinar alguns detalhes sobre aplicações ASP.NET.

Arquitetura ASP.NET

Os principais componentes da arquitetura ASP.NET (Figura 4) são os Web Forms, ASP.NET Server Controls, arquivos de Code-behind e DLLs compiladas. Um Web Form contém elementos HTML, texto e Server Controls. Arquivos de code-behind contêm a lógica da aplicação para o formulário associado. DLLs compiladas geram HTML dinâmico no servidor Web.

associado. DLLs compiladas geram HTML dinâmico no servidor Web. 37 Figura 4. Arquitetura de aplicações ASP.NET

37

Figura 4. Arquitetura de aplicações ASP.NET

associado. DLLs compiladas geram HTML dinâmico no servidor Web. 37 Figura 4. Arquitetura de aplicações ASP.NET
associado. DLLs compiladas geram HTML dinâmico no servidor Web. 37 Figura 4. Arquitetura de aplicações ASP.NET

E-Commerce

com Delphi e ASP.NET

Modelo de Execução

A Figura 5 mostra o modelo de execução do ASP.NET, que funciona da seguinte forma:

1.

O

browser emite uma requisição HTTP ao servidor;

2.

Um dispositivo do framework ASP.NET executa um parser que interpreta

o código-fonte e identifica todas as suas dependências;

3.

A página é compilada em MSIL (Microsoft Intermediate Language - código

intermediário);

4.

O

runtime do .NET (CLR – Common Language Runtime) carrega e executa

o

código MSIL;

Quando algum usuário requisita a mesma página Web pela segunda vez, a seguinte série de eventos ocorre:

1. browser emite uma requisição HTTP ao servidor;

2. CLR carrega e executa imediatamente o código MSIL que já havia sido

O

O

compilado durante a primeira requisição do usuário.

O O compilado durante a primeira requisição do usuário. Figura 5. Modelo de execução do ASP.NET

Figura 5. Modelo de execução do ASP.NET

Arquivos Gerados

Os seguintes arquivos foram gerados na aplicação:

NomeProjeto.dll assembly compilado, em código MSIL;

WebForm1.aspx – página Web com controles e código html/aspx;

Web.config – arquivo de configuração da aplicação;

Global.asax – arquivo com código para responder aos eventos à nível de aplicação;

WebForm1.pas – contém a implementação dos eventos e código servidor responsável pelo processamento da página.

Code-Behind

Observe que, diferente do ASP, há uma separação clara entre o código de interface (arquivo aspx) e o código servidor (arquivo .pas). Esse é recurso conhecido como code-behind. Com isso, podemos integrar facilmente

38

código servidor (arquivo . pas ). Esse é recurso conhecido como code-behind . Com isso, podemos
código servidor (arquivo . pas ). Esse é recurso conhecido como code-behind . Com isso, podemos

E-Commerce

com Delphi e ASP.NET

programadores e Web Designers em uma mesma equipe de desenvolvimento. Além disso, o código é sempre compilado, o que garante a performance superior do ASP.NET. O arquivo aspx pode ser modificado sem a necessidade de recompilação do projeto na IDE.

Web Forms e Controles no servidor

O ASP.NET introduz o conceito de controles no lado servidor, que facilitam e

muito a criação de formulários Web.Com isso,podemos desenvolver aplicações para Web de forma muito semelhante ao que fazíamos ao desenvolver aplicações para Windows, utilizando recursos visuais e drag & drop da IDE. ASP. NET é desenvolvimento RAD para Web. Cada controle possui propriedades, métodos e eventos,que podem ser herdados e reutilizados através de múltiplas aplicações. Isso é desenvolvimento POO.

Programação orientada a eventos

O conceito de eventos no lado servidor facilita a inclusão de código em

resposta a requisições e ações feitas sobre controles de tela. Por exemplo, é muito simples interceptar e fornecer uma resposta/saída para um clique em um botão, escolha de um ítem em uma caixa de seleção e assim por diante.

Estrutura do documento aspx

Vamos analisar o código e a estrutura da página WebForm1.aspx criada na aplicação anterior:

<%@ Page language=”c#” Codebehind=”WebForm1.pas” AutoEventWireup=”false” Inherits=”OlaMundo.WebForm1” %> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN” > <HTML>

39

<HEAD>

<title></title>

</HEAD> <body ms_positioning=”GridLayout”> <form runat=”server” ID=”Form1”> <p>

<asp:TextBox id=”TextBox1” runat=”server”> </asp:TextBox> <asp:Button id=”Button1” runat=”server” text=”Button”></asp:Button>

</p>

<p>

<asp:Label id=”Label1” runat=”server”>Label </asp:Label>

</body>

</HTML>

</p>

</form>

runat=”server”>Label </asp:Label> </body> </HTML> </p> </form>
runat=”server”>Label </asp:Label> </body> </HTML> </p> </form>

E-Commerce

com Delphi e ASP.NET

Analisando o código, podemos decompor as funcionalidades de um Web Form em três níveis de atributos:

atributos da página (page attributes) - definem funções globais;

atributos do corpo da página (body attributes) - definem como uma página será mostrada;

atributos do formulário (form attributes) - definem como grupos de controles serão processados.

A tag @Page define atributos específicos da página que serão usados pelo

page parser do ASP.NET e pelo compilador; você pode incluir apenas uma tag @Page por arquivo .aspx. Os atributos da tag body definem a aparência dos objetos que serão mostrados

no browser. Por exemplo, o atributo ms_positioning diz respeito ao layout da página, determinando como os controles e o texto serão posicionados. Estão disponíveis duas opções:

FlowLayout – controles ajustam-se automaticamente na tela, dependendo do tamanho da janela do browser;

GridLayout – controles são fixados na página através de coordenadas absolutas.

A tag form define como grupos de controles serão processados. Apesar

de você poder ter diversos formulários HTML em uma página, apenas um formulário server-side poderá estar presente em uma página aspx. Repare ainda o atributo runat nos controles, ajustado para o valor server, indicando que os mesmos irão rodar no servidor Web.

Estrutura do documento HTML

Obviamente, o código que é enviado ao browser é HTML puro, com algum Java Script. O ASP.NET é capaz de detectar o browser utilizado e enviar o código compatível com o mesmo. Por exemplo, ele pode suprimir a utilização de Java Script se o mesmo não suportar (browsers mais antigos,por exemplo).O browser jamais “enxerga” o código aspx ou do arquivo fonte de code-behind. Veja o código HTML gerado para o Web Form anterior:

<html> <head> <title></title> </head> <body ms_positioning=”GridLayout”> <form name=”_ctl0” method=”post” action=”WebForm1.aspx” id=”_ctl0”> <input type=”hidden” name=” VIEWSTATE” value=”dDwtMTA4MzE0MjEwNTs7PnBEsKiGxbH4nju5tJEN0hxXcynQ” /> <input name=”TextBox1” type=”text” id=”TextBox1” style=”Z-INDEX: 1; LEFT: 22px; POSITION: absolute; TOP: 22px” /> <input type=”submit” name=”Button1” value=”Button” id=”Button1” style=”Z-INDEX: 2; LEFT: 190px; POSITION: absolute; TOP: 22px” /> <span id=”Label1” style=”Z-INDEX: 3; LEFT: 22px; POSITION: absolute; TOP:

54px”>Label</span>

</form>

</body>

</html>

Observe que cada controle tem um ID e que o ASP.NET usa estilos para posicionar os mesmos em coordenadas absolutas de tela.

40

que cada controle tem um ID e que o ASP.NET usa estilos para posicionar os mesmos
que cada controle tem um ID e que o ASP.NET usa estilos para posicionar os mesmos

E-Commerce

com Delphi e ASP.NET

Response

Response é declarado no namespace System.Web e é um objeto do tipo HTTPResponse. É usado para encapsular respostas HTTP enviados pelo servidor Web ao browser. Algumas de suas principais propriedades são Cache, Cookies, Filter e Buffer. Alguns dos seus principais métodos são Redirect e Write. Vamos fazer um exemplo prático que mostra o uso do objeto. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 6. Criando uma aplicação ASP.NET

Figura 6. Criando uma aplicação ASP.NET

O código a seguir demonstra a utilização do objeto. Coloque no evento Load

de um formulário, dando um duplo clique no Web Form.

function GetSaudacao: System.string; begin result := ‘Bom-dia! Hoje é {0}!’; if DateTime.Now.Hour > 12 then result := ‘Boa-tarde! Hoje é {0}’; if DateTime.Now.Hour > 18 then result := ‘Boa-noite! Hoje é {0}’;

end;

procedure TWebForm1.Page_Load(sender: System.Object; e: System. EventArgs); begin Response.Write(System.String.Format( GetSaudacao,System.DateTime.Now));

end;

A Figura 7 mostra o exemplo em execução.

end ; A Figura 7 mostra o exemplo em execução. 41 Figura 7. Aplicação em execução

41

Figura 7. Aplicação em execução

end ; A Figura 7 mostra o exemplo em execução. 41 Figura 7. Aplicação em execução
end ; A Figura 7 mostra o exemplo em execução. 41 Figura 7. Aplicação em execução

E-Commerce

com Delphi e ASP.NET

Request

Request é declarado no namespace System.Web e é um objeto do tipo HTTPRequest. É usado para capturar informações enviadas pelo browser para o servidor durante o processo de uma requisição HTTP. Algumas de suas principais propriedades são QueryString, Cookies e Files. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 8. Criando uma aplicação ASP.NET

Figura 8. Criando uma aplicação ASP.NET

O código a seguir demonstra a utilização do objeto (coloque no evento Load de um formulário), exibindo no browser informações sobre a requisição (caminho, IP, parâmetros, variáveis etc.):

procedure TWebForm1.Page_Load(sender: System.Object; e: System. EventArgs); begin with System.String do begin Response.Write(Format(‘ApplicationPath: {0} <hr>’, Request.ApplicationPath)); Response.Write(Format(‘FilePath: {0} <hr>’,Request.FilePath)); Response.Write(Format(‘Headers: {0} <hr>’,Request.Headers)); Response.Write(Format(‘HttpMethod: {0} <hr>’,Request.HttpMethod)); Response.Write(Format(‘Path: {0} <hr>’,Request.Path)); Response.Write(Format(‘PhysicalApplicationPath: {0} <hr>’, Request.PhysicalApplicationPath)); Response.Write(Format(‘PhysicalPath: {0} <hr>’,Request.PhysicalPath)); Response.Write(Format(‘RequestType: {0} <hr>’,Request.RequestType)); Response.Write(Format(‘Url: {0} <hr>’,Request.Url)); Response.Write(Format(‘UserAgent: {0} <hr>’,Request.UserAgent)); Response.Write(Format(‘UserHostAddress: {0} <hr>’, Request.UserHostAddress)); Response.Write(Format(‘UserHostName: {0} <hr>’,Request.UserHostName)); end; end;

42

Response.Write(Format(‘UserHostName: {0} <hr>’,Request.UserHostName)); end; end ; 42
Response.Write(Format(‘UserHostName: {0} <hr>’,Request.UserHostName)); end; end ; 42

E-Commerce

com Delphi e ASP.NET

A Figura 9 mosta o exemplo em execução.

Delphi e ASP.NET A Figura 9 mosta o exemplo em execução. Figura 9. Usando o objeto

Figura 9. Usando o objeto Request

Cookies

HTTPCookie é uma classe declarada no namespace System.Web, usada para capturar/salvar informações na máquina cliente (browser). Cookies são largamente utilizados por qualquer aplicação Web, permitindo que o servidor armazene no browser informações sobre o cliente. Por exemplo, quando você entra em um Web Site e preenche um formulário com seus dados, o servidor pode gravar um cookie na sua máquina. Quando você visitar o site novamente, o servidor é capaz de identificá-lo fazendo a leitura do respectivo cookie. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

43

Lembre-se de dar um nome ( Name ) para aplicação na janela que aparecerá a seguir
Lembre-se de dar um nome ( Name ) para aplicação na janela que aparecerá a seguir

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 10. Criando uma aplicação ASP.NET No formulário ( Figura 11

Figura 10. Criando uma aplicação ASP.NET

No

formulário

(Figura 11).

principal,

coloque

um

TextBox,

um

Button

e

um

Label

11 ) . principal, coloque um TextBox, um Button e um Label Figura 11. Formulário principal

Figura 11. Formulário principal da aplicação

O código a seguir mostra os manipuladores para os eventos Click do botão e Load do formulário. No exemplo, solicitamos o nome do usuário na primeira vez que ele entra no site, gravando essa informação em um Cookie. A partir daí, sempre que o usuário “logar”, verificamos se o Cookie existe (e não expirou) e damos uma mensagem de boas-vindas:

procedure TWebForm1.Button1_Click(sender: System.Object; e: System. EventArgs); var ck: System.Web.HttpCookie; begin // Cria Cookie, expira em 3 dias ck := System.Web.HttpCookie.Create(‘Usuario’,TextBox1.Text); ck.Expires := DateTime.Today.AddDays(3); Response.Cookies.Add(ck); end;

procedure TWebForm1.Page_Load(sender: System.Object; e: System. EventArgs); begin if Request.Cookies[‘Usuario’] <> nil then Label1.Text := System.String.Format(‘Seja bem-vindo {0}’, Request.Cookies[‘Usuario’].Value);

end;

System.String.Format(‘Seja bem-vindo {0}’, Request.Cookies[‘Usuario’].Value); end ; 44 Figura 12. Usando Cookies

44

Figura 12. Usando Cookies

System.String.Format(‘Seja bem-vindo {0}’, Request.Cookies[‘Usuario’].Value); end ; 44 Figura 12. Usando Cookies
System.String.Format(‘Seja bem-vindo {0}’, Request.Cookies[‘Usuario’].Value); end ; 44 Figura 12. Usando Cookies

E-Commerce

com Delphi e ASP.NET

IsPostBack

O evento Load de um formulário é sempre disparado quando uma requisição

é enviada ao servidor. No entanto, em algumas situações, precisamos saber se

a requisição feita é a primeira ou é uma resposta subseqüente. Isso é possível

através da verificação da propriedade IsPostBack do objeto Page. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 13. Criando uma aplicação ASP.NET

Figura 13. Criando uma aplicação ASP.NET

No formulário principal, coloque um Button e no evento Load do formulário digite:

procedure TWebForm1.Page_Load(sender: System.Object; e: System. EventArgs); begin if not IsPostBack then Response.Write(‘Primeira requisição’) else Response.Write(‘IsPostBack (não é a primeira)’);

end;

Veja a aplicação em execução nas Figuras 14 e 15.

é a primeira)’); end ; Veja a aplicação em execução nas Figuras 14 e 15. 45

45

Figura 14. Testando o IsPostBack

é a primeira)’); end ; Veja a aplicação em execução nas Figuras 14 e 15. 45
é a primeira)’); end ; Veja a aplicação em execução nas Figuras 14 e 15. 45

Clique no botão neste momento.

E-Commerce

com Delphi e ASP.NET

no botão neste momento. E-Commerce com Delphi e ASP.NET Figura 15. IsPostBack permite identificar se a

Figura 15. IsPostBack permite identificar se a requisição é a primeira

Server

Server é declarado no namespace System.Web e é um objeto do tipo HTTPServerUtility. Possui vários métodos utilizados no processamento de requisições HTTP, como: CreateObject, CreateObjectFromClsid, MapPath e Transfer. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 16. Criando uma aplicação ASP.NET

Figura 16. Criando uma aplicação ASP.NET

O código a seguir, que deve ser colocado no evento Load do form, mostra como usar um importante método desse objeto, o MapPath,que permite obter o caminho físico de um arquivo no disco. Deve ser usado sempre que possível, pois a indicação do caminho completo ao invés do relativo diretamente no código pode fazer com que sua aplicação pare de funcionar, caso seja instalada em um local diferente do caminho utilizado em tempo de desenvolvimento.

46

pare de funcionar, caso seja instalada em um local diferente do caminho utilizado em tempo de
pare de funcionar, caso seja instalada em um local diferente do caminho utilizado em tempo de

E-Commerce

com Delphi e ASP.NET

procedure TWebForm1.Page_Load(sender: System.Object; e: System. EventArgs); begin // Retorna c:\inetpub\wwwroot\Cap04Ex06\WebForm1.aspx

Response.Write(Server.MapPath(‘WebForm1.aspx’));

end;

A

Figura 17 mostra a aplicação em execução.

end ; A Figura 17 mostra a aplicação em execução. O Figura 17. Aplicação em execução

O

Figura 17. Aplicação em execução

Response.Redirect e Server.Transfer

método Redirect do objeto Response redireciona o usuário para uma nova

página (URL), que pode ser tanto um site da Web externo ao projeto ou uma

página aspx da própria aplicação. Para passar dados de uma página para outra, você deve utilizar parâmetros na URL (como limitação de tamanho e uso de tipos de dados primitivos).

O método Transfer do objeto Server é outra forma de chamar uma página aspx

(da mesma aplicação), porém permite passar dados diretamente no servidor de um formulário para outro, que podem ser objetos, DataSets, conexões etc. Vamos criar um exemplo que demonstra a utilização de ambas as técnicas. Em um primeiro momento, vamos usar o Redirect para passar um valor digitado em um formulário para outro. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

na janela que aparecerá a seguir ( New ASP.NET Web Application ). 47 Figura 18. Criando

47

Figura 18. Criando uma aplicação ASP.NET

na janela que aparecerá a seguir ( New ASP.NET Web Application ). 47 Figura 18. Criando
na janela que aparecerá a seguir ( New ASP.NET Web Application ). 47 Figura 18. Criando

E-Commerce

com Delphi e ASP.NET

Adicione um segundo formulário aspx ao projeto.

Dica:
Dica:

Para adicionar um novo formulário ao projeto, a partir do Project Manager, dê um clique de direita no nome da aplicação e a seguir selecione New>Other>New ASP.NET Files>ASP.NET Page.

No primeiro formulário, coloque um Button e um TextBox. No evento Click do Button, digite o seguinte:

procedure TWebForm1.Button1_Click(sender: System.Object; e: System. EventArgs); begin Response.Redirect(‘WebForm2.aspx?Nome=’ + TextBox1.Text); end;

Isso passa o valor digitado no TextBox para a página WebForm2.aspx. A URL formada pelo método Redirect anterior será algo do tipo:

http://localhost/caminho/WebForm2.aspx?Nome=Guinther

No evento Load do segundo formulário, digite o seguinte:

procedure TWebForm2.Page_Load(sender: System.Object; e: System. EventArgs); begin Response.Write(‘Olá ‘ + Request.QueryString[‘Nome’]); end;

Aqui usamos QueryString do Request para recuperar o valor passado no primeiro formulário (Figura 19).

o valor passado no primeiro formulário ( Figura 19 ). Figura 19. Passando informações entre páginas

Figura 19. Passando informações entre páginas

Esse recurso é bastante utilizado em vários tipos de aplicações Web. Por exemplo, poderíamos ter em uma página uma lista de produtos, com a descrição e foto, obtidos a partir de uma consulta ao banco de dados. Ao clicar em um produto, passamos o código do mesmo para o outro formulário, que se encarregará de fazer uma consulta detalhada ao banco de dados, obtendo mais informações sobre o mesmo. Para ver como funciona o outro método, mude a linha do Redirect para:

Server.Transfer(‘WebForm2.aspx’);

E o evento Load do segundo formulário para:

Response.Write(‘Olá ‘ + TWebForm1(Context.Handler).TextBox1.Text)

48

E o evento Load do segundo formulário para: Response.Write(‘Olá ‘ + TWebForm1(Context.Handler).TextBox1.Text) 48
E o evento Load do segundo formulário para: Response.Write(‘Olá ‘ + TWebForm1(Context.Handler).TextBox1.Text) 48

E-Commerce

com Delphi e ASP.NET

Nota:
Nota:

Para ter acesso ao TextBox1 a partir de outra classe, altere seu especificador de visibilidade para public.

No código, fazemos um typecast em Context.Handler para o tipo do primeito WebForm, tornando possível o acesso direto ao objeto. Não é necessária a passagem de qualquer valor por URL.

ViewState

Aplicações ASP.NET são state-less. Isso significa dizer que o servidor trata cada requisição cliente como se fosse uma nova solicitação. Nenhuma informação é armazenada na memória do servidor após o envio da página HTML para o browser. É claro, o ASP.NET permite a utilização de alguns recursos especiais para recuperar o estado de controles. No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 20. Criando uma aplicação ASP.NET

Figura 20. Criando uma aplicação ASP.NET

Coloque os seguintes controles no formulário: Button, TextBox e ListBox (Figura 21).

49

controles no formulário: Button, TextBox e ListBox ( Figura 21 ). 49 Figura 21. Formulário principal

Figura 21. Formulário principal da aplicação

controles no formulário: Button, TextBox e ListBox ( Figura 21 ). 49 Figura 21. Formulário principal
controles no formulário: Button, TextBox e ListBox ( Figura 21 ). 49 Figura 21. Formulário principal

No evento Click do botão digite:

E-Commerce

com Delphi e ASP.NET

procedure TWebForm1.Button1_Click(sender: System.Object; e: System. EventArgs); begin

ListBox1.Items.Add(TextBox1.Text);

end;

Isso adiciona ao ListBox o texto digitado no TextBox.Execute a aplicação e faça um teste adicionando vários ítens ao ListBox (Figura 22).

teste adicionando vários ítens ao ListBox ( Figura 22 ). Figura 22. ViewState faz o gerenciamento

Figura 22. ViewState faz o gerenciamento automático do estado de controles

Se você já desenvolveu em alguma outra linguagem para Web (Java, PHP, ASP etc.) deve ter ficado curioso como o ASP.NET consegue manter os ítens digitados na lista, mesmo entre as requisições. Se toda requisição é tratada como se fosse uma nova, como os ítens digitados persistiram? O recurso conhecido como View State possibilita que os controles armazenem automaticamente seu estado entre chamadas sucessivas (requisições) a uma mesma página. Você pode visualizar esse recurso em funcionamento através do código fonte HTML gerado para a nossa página, que deve estar semelhante ao mostrado a seguir:

<input type=”hidden” name=” VIEWSTATE”

value=”dDwxODQ3MTM0NzMyO3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDE+Oz47bDx0PHQ8O3A8bD

xpPDA+O2k8MT47aTwyPjtpPDM+Oz47bDxwPE9sw6EgTXVuZG8gQVNQLk5FVCE7T2zDoSBNdW5

kbyBBU1AuTkVUIT47cDxFdSBtYW50ZW5obyBtZXUgZXN0YWRvIGVudHJlIHJlcXVlc3RzITtF

dSBtYW50ZW5obyBtZXUgZXN0YWRvIGVudHJlIHJlcXVlc3RzIT47cDxVc2FuZG8gbyBWaWV3U

3RhdGU7VXNhbmRvIG8gVmlld1N0YXRlPjtwPFRlc3RlO1Rlc3RlPjs+Pjs+Ozs+Oz4+Oz4+Oz

7ZZcwCSIWouRv7D8d3ZO5Ume8Tyg==” />

Os dados de cada controle ficam“codificados”neste campo do tipo Hidden,que é recuperado a cada requisição. Assim, o ASP.NET pode “devolver” ao controle suas propriedades originais a cada requisição.Tudo de forma automática. Além disso, isso garante a escalabilidade da solução, pois NADA, absolutamente NADA, é mantido na memória do servidor entre as requisições. Mais adiante neste curso esse recurso será explorado em mais detalhes. Por exemplo, veremos como adicionar nossos próprios objetos ao ViewState e como usar outros tipos de objetos para tratamento de sessão, como Cache,

Session etc.

50

objetos ao ViewState e como usar outros tipos de objetos para tratamento de sessão, como Cache,
objetos ao ViewState e como usar outros tipos de objetos para tratamento de sessão, como Cache,

E-Commerce

com Delphi e ASP.NET

Exercício Resolvido

Criar uma aplicação ASP.NET com duas páginas ASPX. No primeiro Web Form, colocar dois TextBoxes e um Button. Quando o usuário clicar no Button, passar o valor digitado nos dois TextBoxes como parâmetro da URL em um Redirect para o segundo WebForm. Neste segundo WebForm, exibir a soma dos dois números, fazendo a conversão dos parâmetros da URL. Se não for possível fazer a soma (os parâmetros não forem números, por exemplo), mostrar uma mensagem de erro ao usuário (usar um try except). A seguir, adaptar o mesmo exemplo para que use Cookies para guardar os valores do primeiro WebForm e recuperar no segundo WebForm, mantendo a mesma funcionalidade. A solução para este exercício pode ser encontrada nos apêndices do curso.

51

mantendo a mesma funcionalidade. A solução para este exercício pode ser encontrada nos apêndices do curso.
mantendo a mesma funcionalidade. A solução para este exercício pode ser encontrada nos apêndices do curso.

E-Commerce

com Delphi e ASP.NET

Web Forms e Controls

N este capítulo vamos conhecer em detalhes os controles disponíveis

no ASP.NET destinados a criação de aplicações Web Forms. Para cada

um, examinaremos suas principais propriedades, métodos e eventos.

Primeiro, é importante saber como o ASP.NET divide os tipos de controles.

Tipos de Servers Controls

Podemos dividir os Server Controls em quatro categorias:

HTML Server Controls – modelo de objetos que possuem estrutura bastante semelhante aos elementos HTML (tags) que eles geram;

Web Server Controls – são objetos que possuem uma implementação bem mais robusta que os HTML Server Controls.Seu modelo de objetos não reflete necessariamente a sintaxe HTML,permitindo a construção de controles bem mais sofisticados (calendários, por exemplo), do que simples botões e caixas de textos;

Validation Controls – são um tipo especial de Web Server Control, utilizados para validar entradas de usuário nos outros controles. Por exemplo, eles permitem a verificação de um campo requerido, se um valor está em uma determinada faixa de valores específicos ou se é de um determinado tipo;

User Controls – utilizados para adicionar elementos que se repetem em diversas páginas aspx. São geralmente usados na construção de menus, barras de ferramentas e outros elementos reutilizáveis.

HTML Controls

Os HTML Controls representam elementos HTML diretamente. Também podem rodar no servidor, bastando para isso adicionar o atributo RunAt = Server na definição do elemento no arquivo aspx.São indicados para a migração de formulários HTML para aspx. A lista a seguir mostra os HTML Controls e as respectivas tags HTML que eles geram.

Links

Referência dos elementos HTML

www.htmlhelp.com/reference/html40/alist.html

www.w3schools.com/html/html_reference.asp

52

dos elementos HTML • www.htmlhelp.com/reference/html40/alist.html • www.w3schools.com/html/html_reference.asp 52
dos elementos HTML • www.htmlhelp.com/reference/html40/alist.html • www.w3schools.com/html/html_reference.asp 52

E-Commerce

com Delphi e ASP.NET

Controle

Exemplo de Tag HTML gerada

<a href = “pagina.aspx”></a>

<a href = “pagina.aspx”></a>

<input type=”button” value=”Button”>

<input type=”button” value=”Button”>

<input>

<input>

<textarea></textarea>

<textarea></textarea>

<input type=”password”>

<input type=”password”>

<input type=”submit” value=”Submit”>

<input type=”submit” value=”Submit”>

<input type=”reset” value=”Reset”>

<input type=”reset” value=”Reset”>

<input type=”image” src=”imagem.jpg”>

<input type=”image” src=”imagem.jpg”>

<input type=”checkbox”>

<input type=”checkbox”>

<input type=”radio”>

<input type=”radio”>

<select><option selected=”true”>1

<select><option selected=”true”>1

</option><option>2</option></select>

<select size=”2”><option>1</option><option>2 </option></select>

<select size=”2”><option>1</option><option>2 </option></select>

<input type=”hidden”>

<input type=”hidden”>

<input type=”file”>

<input type=”file”>

<a href=”pagina.aspx”>Anchor</a>

<a href=”pagina.aspx”>Anchor</a>

<img alt=”” src=”imagem.jpg”>

<img alt=”” src=”imagem.jpg”>

<table border = “1”><tr><td>1</td></tr></table>

<table border = “1”><tr><td>1</td></tr></table>

<span>Span</span>

<span>Span</span>

<div>Div</div>

<div>Div</div>

<div ms_positioning=”FlowLayout”>Div</div>

<div ms_positioning=”FlowLayout”>Div</div>

<div ms_positioning=”GridLayout”>Div</div>

<div ms_positioning=”GridLayout”>Div</div>

<hr>

<hr>

Controle

Exemplo da tag HTML gerada

Usado para fazer banners em páginas

Usado para fazer banners em páginas

Um botão, gerando um input type=”submit”

Um botão, gerando um input type=”submit”

Cria um calendário que pode ser bastante personalizado

Cria um calendário que pode ser bastante personalizado

Cria um controle de checagem

Cria um controle de checagem

Cria uma lista de controle de checagem

Cria uma lista de controle de checagem

Um dos principais componentes do ASP.NET, para gerar tabela de dados

Um dos principais componentes do ASP.NET, para gerar tabela de dados

Para gerar tabela de dados

Para gerar tabela de dados

Lista de opções, estilo ComboBox do Windows Forms

Lista de opções, estilo ComboBox do Windows Forms

Usado para criar links entre páginas

Usado para criar links entre páginas

Mostra uma imagem, gerando a tag img src

Mostra uma imagem, gerando a tag img src

Mostra uma imagem que pode responder a um click de mouse

Mostra uma imagem que pode responder a um click de mouse

Exibe uma label (texto)

Exibe uma label (texto)

Botão que funciona como hyperLink

Botão que funciona como hyperLink

Lista de opções selecionáveis

Lista de opções selecionáveis

Usado para inserir texto diretamente no código HTML, sem estilos

Usado para inserir texto diretamente no código HTML, sem estilos

Cria uma painel, exatamente como em aplicações Windows Forms

Cria uma painel, exatamente como em aplicações Windows Forms

Container para controles gerados dinamicamente no servidor

Container para controles gerados dinamicamente no servidor

Cria um botão de rádio para marcação

Cria um botão de rádio para marcação

Cria uma lista de botões de rádio para marcação

Cria uma lista de botões de rádio para marcação

Permite exibir ítens de uma lista (fonte de dados por ex.) usando templates

Permite exibir ítens de uma lista (fonte de dados por ex.) usando templates

Cria uma tabela ( table )

Cria uma tabela (table)

Usado para entrada de dados

Usado para entrada de dados

Mostra o conteúdo de um documento XML

Mostra o conteúdo de um documento XML

53

templates Cria uma tabela ( table ) Usado para entrada de dados Mostra o conteúdo de
templates Cria uma tabela ( table ) Usado para entrada de dados Mostra o conteúdo de

E-Commerce

com Delphi e ASP.NET

Web Controls

Os Web Controls são controles mais especializados, que geram código HTML mais complexo e não representam diretamente elementos HTML simples.A lista a seguir mostra os Web Controls e uma breve descrição de sua funcionalidade.

Básicos: Label e TextBox

No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 1. Criando uma aplicação ASP.NET

Figura 1. Criando uma aplicação ASP.NET

No formulário principal colque três TextBoxes e um Label (Figura 2).

colque três TextBoxes e um Label ( Figura 2 ). Figura 2. Formulário principal da aplicação

Figura 2. Formulário principal da aplicação

O controle Label permite que seja exibido um determinado texto estático em um Web Form. O texto a ser exibido é configurado na propriedade Text, que também pode conter uma declaração HTML. O controle TextBox é usado para entrada de dados e pode assumir três diferentes formatos:

54

uma declaração HTML. O controle TextBox é usado para entrada de dados e pode assumir três
uma declaração HTML. O controle TextBox é usado para entrada de dados e pode assumir três

E-Commerce

com Delphi e ASP.NET

Entrada simples dados (padrão);

Entrada de senhas;

Entra de textos com múltiplas linhas;

Para alterar o comportamento anterior, use a propriedade TextMode do controle, que pode ser SingleLine, MultiLine ou Password (use um para cada TextBox). A propriedade Columns do TextBox o tamanho horizontal do controle em caracteres.MaxLenght especifica o tamanho máximo em caracteres.Rows indica o tamanho vertical em linhas quando o controle é configurado como MultiLine. Wrap indica se o texto deve ser quebrado quando em modo MultiLine. AutoPostBack é uma importante propriedade disponível na maioria dos controles do ASP.NET. Ela indica se o controle irá disparar um evento imediatamente após a sua ocorrência ou somente quando o formulário for submetido. Configure essa propriedade para True em todos os TextBoxes. Temos um único manipulador para o evento TextChanged dos três TextBoxes, que mostra na Label o texto informado em caixa alta.

procedure TWebForm1.TextBox1_TextChanged(sender: System.Object; e:

System.EventArgs); begin Label1.Text := (Sender as TextBox).Text.ToUpper; end;

Dica:
Dica:

Para apontar os três manipuladores para o mesmo método, adicione normalmente o evento no primeiro controle, dando um duplo clique na área branca ao lado do nome do evento. Para os demais, selecione o evento já definido ao invés de dar o duplo clique.

o evento já definido ao invés de dar o duplo clique. Figura 3. Usando os controles

Figura 3. Usando os controles básicos do ASP.NET

Botões: Button, LinkButton e ImageButton

No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

55

Lembre-se de dar um nome ( Name ) para aplicação na janela que aparecerá a seguir
Lembre-se de dar um nome ( Name ) para aplicação na janela que aparecerá a seguir

E-Commerce

com Delphi e ASP.NET

E-Commerce com Delphi e ASP.NET Figura 4. Criando uma aplicação ASP.NET Os três tipos de botões

Figura 4. Criando uma aplicação ASP.NET

Os três tipos de botões disponíveis no ASP.NET são Button, LinkButton e ImageButton (coloque um de cada tipo no formulário). Todos disparam um submit ao servidor quando clicados. Utilize o evento Click para inserir um manipulador no servidor em resposta ao evento de Click. Como alternativa, você pode usar o evento Command para fornecer um manipulador no servidor em resposta ao Click no controle. Para esse evento, é passado o valor de CommandName e CommandArgument do controle. A propriedade CausesValidation indica se o um Click no controle deve disparar as rotinas para validação da página, vistas a seguir. Use a propriedade Text do Button para configurar seu texto. Para o ImageButton, use a propriedade ImageURL para indicar a imagem usada no botão. AlternateText indica o texto que deve ser mostrado caso a imagem não possa ser exibida no browser. O LinkButton é semelhante aos botões anteriores, porém ele é renderizado com um link HTML que pode submeter os dados para o formulário. As Figuras 5 e 6 mostram um exemplo de utilização dos botões.

5 e 6 mostram um exemplo de utilização dos botões. 56 Figura 5. Usando botões em

56

Figura 5. Usando botões em páginas ASP.NET

exemplo de utilização dos botões. 56 Figura 5. Usando botões em páginas ASP.NET Figura 6. Aplicação

Figura 6. Aplicação em execução

exemplo de utilização dos botões. 56 Figura 5. Usando botões em páginas ASP.NET Figura 6. Aplicação
exemplo de utilização dos botões. 56 Figura 5. Usando botões em páginas ASP.NET Figura 6. Aplicação

E-Commerce

com Delphi e ASP.NET

RadioButton e RadioButtonList

No Delphi 2005, inicie uma nova aplicação clicando em File>New>Other. A seguir,no ítem Delphi for .NET Projects,selecione o ítem ASP.NET Web Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicação na janela que aparecerá a seguir (New ASP.NET Web Application).

que aparecerá a seguir ( New ASP.NET Web Application ). Figura 7. Criando uma aplicação ASP.NET

Figura 7. Criando uma aplicação ASP.NET

Coloque quatro RadioButtons no formulário, quatro Labels e um Button no formulário, ajustando suas propriedades Text e posicionamento conforme mostrado na Figura 8.

Text e posicionamento conforme mostrado na Figura 8. Figura 8. Formulário principal da aplicação RadioButtons

Figura 8. Formulário principal da aplicação

RadioButtons representam uma lista de opções mutuamente exclusivas. Somente um ítem do grupo pode estar selecionado. O RadioButtonList facilita a exibição de vários ítens, que possam vir de uma tabela do banco de dados, por exemplo. Use a propriedade Textdo RadioButtonpara indicar o seu texto.Use GroupName para agrupar vários RadioButtons relacionados. Quando você selecionar um

57

para indicar o seu texto.Use GroupName para agrupar vários RadioButtons relacionados. Quando você selecionar um 57
para indicar o seu texto.Use GroupName para agrupar vários RadioButtons relacionados. Quando você selecionar um 57

E-Commerce

com Delphi e ASP.NET

item nele, todos os demais RadioButtons que pertencem ao mesmo grupo serão desmarcados. A propriedade Checked indica se o item está marcado. A Figura 9 mostra o formulário em execução. Os RadioButtons devem ser organizados em dois grupos, “Comida” e “Esporte” (use a propriedade GroupName). Ao clicar no botão, mostramos os itens selecionados em dois Labels.

no botão, mostramos os itens selecionados em dois Labels . Figura 9. Usando RadioButtons Aqui está

Figura 9. Usando RadioButtons

Aqui está o código que deve ser colocado no Click do botão:

procedure TWebForm1.Button1_Click(sender: System.Object; e: System. EventArgs); begin if RadioButton1.Checked then Label1.Text := RadioButton1.Text else if RadioButton2.Checked then Label1.Text := RadioButton2.Text; if RadioButton3.Checked then Label2.Text := RadioButton3.Text else if RadioButton4.Checked then Label2.Text := RadioButton4.Text; Label1.Text := ‘Comida preferida: ‘ + Label1.Text ; Label2.Text := ‘Esporte preferida: ‘ + Label2.Text ; end;

RadioButtonList

Vamos fazer um exemplo com o RadioButtonList. O