7

Edição 70- ClubeDelphi 6 BOOK ... · desenvolvidas em Delphi 7 ou 2005/2006. O objetivo principal é demonstrar como reutilizar . Stored Procedures. do banco de dados em diferentes

  • Upload
    tranque

  • View
    221

  • Download
    1

Embed Size (px)

Citation preview

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.netEdição 70- ClubeDelphi6

Open Tools APIOpen Tools APIGustavo Chaurais

Crie seus próprios plug-ins para o IDE do Delphi

Se você já pensou: “o Delphi é tão bom, mas por que o IDE não tem

mais essa funcionalidade para facilitar meu trabalho?”, certamente

irá se identificar com o que a Open Tools API (OTA) permite fazer. De

maneira rápida e fácil, podemos implementar desde simples itens

no menu a poderosos assistentes com a função de automatizar a

criação de formulários. Só dependemos de nossa criatividade e/ou

necessidade para criar excelentes plug-ins e melhorar ainda mais a

ferramenta de trabalho.

Hoje existem diversos plugins, pagos e gratuitos, disponíveis na

internet para download. Por exemplo, podemos citar o GExperts e o

CnPack, que oferecem conjuntos de funcionalidades para aumentar

ainda mais a produtividade do desenvolvedor. Neste artigo, você

aprenderá a criar seus próprios plug-ins e wizards para o IDE do

Delphi, usando OTA.

Um primeiro exemplo – “Hacking”Antes de começarmos a utilizar a API do OTA, vamos ver como

podemos acessar os objetos do IDE através de pacotes. Note que

essa é uma maneira totalmente desaconselhada para a construção

de plug-ins, pois existem meios que nos garantem uma maior confia-

bilidade em tal tarefa, principalmente no tocante a compatibilidade

entre versões da ferramenta.

No Delphi, crie um pacote (File>New>Other>Package), adicione

nele uma nova unit (File>New>Unit) e salve os arquivos como

“HackingPackage.dpk” e “Hacking.pas”, respectivamente. Substitua

o conteúdo de Hacking.pas pelo código da Listagem 1 e lembre-se

que a declaração do método Register é case-sensitive.

Compile e instale seu pacote. Quando lhe for perguntado sobre a

adição de uma referência à VCL, responda OK. Veja que conseguimos

acessar facilmente os objetos internos do IDE e alterar algumas

propriedades, como o título e a cor do formulário principal. A seção

finalization da unit, que só pode ser declarada se existir initialization,

servirá para restaurarmos os valores antigos e liberarmos regiões

alocadas da memória.

Agora, a menos que você queira continuar com o IDE do Delphi

na cor vermelha, desinstale o pacote através de Component>Install

Packages.

Mais uma vez, devemos salientar que essa técnica deve ser usada

somente em situações extremas, e foi apresentada aqui apenas para

fins didáticos. Como veremos, existem soluções muito mais elegantes

para a construção de plug-ins.

Open Tools API e IOTAWizardA Open Tools API, comumente chamada apenas de OTA, pode ser

compreendida como um conjunto de ferramentas para a extensão

do IDE. Sua infra-estrutura é baseada em interfaces e pacotes, ou seja,

para registrar um plug-in que exerça determinada tarefa, é preciso

apenas implementar a interface correspondente e compilar tudo em

um pacote. Além disso, os plug-ins construídos poderão rodar tanto

no Delphi quanto no C++ Builder, sem grandes problemas.

Dica: Para o bom entendimento deste artigo, é ideal que o leitor

tenha conhecimento básico sobre o uso de interfaces. Para aprender

mais sobre interfaces, consulte a minha coluna no portal ClubeDelphi

(www.clubedelphi.net).

Listagem 1. Código de Hacking.pas do projeto HackingPackage

unit Hacking;

interface

uses Forms, Graphics;

procedure Register;implementation

var TituloAntigo: string; CorAntiga: TColor;

procedure Register;begin TituloAntigo := Application.Title; // Muda o Caption do próprio Delphi Application.Title := ‘Revista ClubeDelphi’; CorAntiga := Application.MainForm.Color; // Muda a cor do main form do IDE Application.MainForm.Color := clRed;end;

initialization

finalization Application.Title := TituloAntigo; Application.MainForm.Color := CorAntiga;end.

BOOK - Clube70.indb 6BOOK Clube70 indb 6 9/1/2006 16:18:559/1/2006 16 18 55

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.net Edição 70 - ClubeDelphi 15

API HookingAPI HookingMichael Benford

Parte III – Monitorando cópia, execução e exclusão de arquivos

No primeiro artigo desta série (edição 68), fomos apresentados à

técnica de API Hooking. Vimos do que se trata, tivemos noções de

como ela funciona etc. Na segunda parte (edição 69), aprendemos

sobre o conceito de IPC (Inter Process Communication), que nos per-

mite fazer uma DLL conversar com um aplicativo executável.

Agora, na terceira e última parte desta série, iremos desenvolver

uma aplicação completa usando o que aprendemos, para sabermos

bem do que ela é capaz de fazer. Resolvi dar esse desfecho à trilogia

porque a maioria dos programadores desconhece a técnica de API

Hooking. E, quando ficam sabendo do que se trata, inicialmente não

percebem o quanto ela é avançada.

Eis o que faremos: um aplicativo que monitore as ações do sistema

operacional sobre arquivos, mais especificamente em programas

executáveis. O usuário irá criar uma lista de aplicativos protegidos

e, com base nela, nosso software irá vigiar o sistema e bloquear

alterações no arquivo.

Uma tarefa cansativaO leitor que acompanhou esta série deve ter notado que a codi-

ficação das DLL’s usadas no processo de hooking, dependendo de

quais API’s serão “hookadas”, pode tornar-se bastante trabalhosa. Para

cada API, devemos ter uma variável de função e um callback, que são

clones da declaração da API original. Para a função CreateProcess, por

exemplo, precisaríamos escrever duas vezes seus 10 parâmetros.

Pior, se fosse necessário usar a variável Next dentro do callback, o

que é comum em praticamente 100% dos casos, mais uma codifica-

ção da API deveria ser escrita. E isso é apenas para a versão Ansi da

API. Resta ainda a versão Wide, que acarretaria a digitação de mais

três declarações muito parecidas com a primeira (seriam mudados

apenas os tipos Ansi para Wide em parâmetros string). No final, isso

demandaria a codificação de 60 parâmetros.

Implementar tanto código igual em lugares diferentes, além de

ser uma tarefa trabalhosa e totalmente manual, é um processo alta-

mente propenso a erros. E se tratando de API Hooking, a omissão de

um parâmetro em callbacks e/ou variáveis Next pode levar o sistema

operacional à instabilidade, forçando um reboot no PC para que as

coisas voltem ao normal (veja Regras de hooking, na edição 68).

Um grande aliadoObservando esse problema, percebi que a automatização do

processo reduziria o tempo gasto na digitação do código extenso

e eliminaria as chances de erro por parte do programador. Então,

criei um expert para o IDE do Delphi, que gera todo o código da DLL

automaticamente, facilitando nossa vida. Usaremos essa ferramenta

para o desenvolvimento da aplicação proposta para este artigo.

Este plug-in que desenvolvi é distribuído como um software

freeware e está disponível para as versões 6, 7 e 2005 do Delphi (com

código-fonte, que pode servir de base para quem quiser criar seus

próprios plug-ins). Para baixar, acesse os sites www.projetobms.net ou

www.otamasters.net, clicando no link Downloads. Em seguida, feche

o Delphi, caso ele esteja aberto, execute o arquivo baixado e siga as

instruções apresentadas pelo assistente de instalação.

Nota: Por ser uma versão beta, algumas funcionalidades apre-

sentadas aqui podem mudar ou desaparecer (pouco provável) na

versão final.

Mãos à obra!Vamos começar pela criação da DLL que será utilizada pelo nosso

aplicativo. Como dito anteriormente, ele vai monitorar operações

sobre programas. Então, devemos saber quais API’s “hookar” em cada

situação. Essas situações, com suas respectivas API’s, são:

• Cópia: CopyFileA/W, CopyFileExA/W;

• Mudança de pasta/unidade e renomeação: MoveFileA/W, MoveFileExA/W;

• Exclusão: DeleteFileA/W;

• Execução: CreateProcessA/W;

• Edição de atributos: SetFileAttributesA/W.

Precisamos, portanto, criar uma DLL que contenha as variáveis Next

e os callbacks dessas API’s. Para isso, faremos uso de nosso wizard.

Muito bem. Clique no menu File, selecione New e Other. Clique

sobre o nó (ou aba, se seu Delphi é anterior ao 2005) API Hooking.

Marque então API Hook DLL Wizard e clique em OK. A primeira tela

do assistente será mostrada.

Como primeiro passo, devemos escolher uma biblioteca de

funções de hooking para utilizar. Por padrão, o assistente já vem

com duas pré-configuradas. Ambas são as comentadas na primeira

parte desta série de artigos, sendo uma delas a nossa já conhecida

BmsApiHook, do colega Bruno Martins Stuani. Selecione-a e clique

em Avançar. A próxima etapa é selecionar quais API’s queremos

“hookar” (Figura 1).

BOOK - Clube70.indb 15BOOK Clube70 indb 15 9/1/2006 16:19:009/1/2006 16 19 00

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.net Edição 70 - ClubeDelphi 19

Cadastros com FirebirdCadastros com FirebirdEverson Volaco

Criando cadastros básicos em Delphi utilizando Stored Procedures dinâmicas

Neste artigo veremos como criar Stored Procedures dinâmicas

no Firebird 1.5.x para uso, de forma genérica, em telas de cadastro

desenvolvidas em Delphi 7 ou 2005/2006. O objetivo principal é

demonstrar como reutilizar Stored Procedures do banco de dados

em diferentes telas de cadastro de nossa aplicação, como também

reutilizar código através do suporte a herança de formulários.

Nossa aplicação Delphi conterá um formulário de cadastro genéri-

co que será utilizado como base para a criação de todas as telas de

cadastro do sistema, onde utilizaremos em todas elas apenas duas

Stored Procedures do banco de dados: uma para inclusão, alteração

e exclusão dos dados, e outra para consulta dos dados.

Nota: Para o exemplo deste artigo utilizei o Delphi 7 com o

driver DBX InterXpress for Firebird (Upscene Productions), que pode

ser baixado a partir do site www.upscene.com. O mesmo exemplo

podem ser desenvolvido em Delphi 6, 2005 ou 2006.

Criando o banco de dadosPara a criação do banco de dados e de seus objetos utilizei a ferra-

menta IBExpert Personal Edition que pode ser baixada gratuitamente

a partir do site www.ibexpert.com. Para criar o banco de dados que

será utilizado em nosso exemplo, abra o IBExpert e selecione a

opção Database>Create Database a partir do menu principal da

ferramenta.

Na janela Create Database preencha as informações necessárias

para a criação do banco de dados Firebird (veja a Figura 1).

Por padrão, o campo Client Library File vem configurado para a biblio-

teca do InterBase (gds32.dll). Como estamos utilizando Firebird, altere

esse campo apontando o mesmo para a biblioteca fbclient.dll que está

disponível dentro do diretório Bin da instalação do Firebird.

Ao clicar no botão OK será aberta a janela Database Registration

para que possamos registrar nosso banco de dados dentro do IB

Expert. Para o campo Server Version selecione o banco e versão que

está utilizando, no nosso caso Firebird 1.5. Para o campo Database

Alias, digite uma alias para o banco de dados, por exemplo: “Cadas-

tro”. Através do botão Test Connect é possível testar a conexão com o

banco de dados recém criado. Pronto, basta clicar no botão Register

para registrar o novo banco dentro do IBExpert.

Para conectar no banco basta dar um clique duplo em cima do

alias Cadastro criado na janela Database Explorer ou ainda a partir

da opção Connect to Database disponível no menu de contexto.

Criando as Tables, Generators e TriggersAntes de implementarmos as Stored Procedures com SQL dinâmico,

principal assunto deste artigo, devemos criar os outros objetos que

farão parte do nosso banco de dados, como por exemplo, as tabelas

de cadastros que serão utilizadas por nossa aplicação Delphi para

armazenar os dados informados pelo usuário.

Após conectar no banco de dados, acesse a opção Tools>SQL

Editor disponível no menu principal para acessar o editor de SQL

do IBExpert. Será dentro dessa janela que executaremos todas as

instruções DDL (Linguagem de Definição de Dados) para criar nossos

objetos, inclusive as SP’s.

Nota: A ferramenta IBExpert traz consigo opções para facilitar

a criação e gerenciamento dos objetos dentro do banco de dados.

Para acessar essas opções, basta selecionar o tipo do objeto que

deseja trabalhar dentro da janela Database Explorer e selecionar

as opções de Create, Alter ou Drop desse tipo de objeto a partir do

menu de contexto.

Começaremos criando as tabelas que farão parte do banco de

dados. Nesse exemplo criaremos duas tabelas: “Clientes” e “Forne-

cedores”. Dentro do SQL Editor entre com as instruções SQL, uma por

vez, como mostrado na Listagem 1.

Para fazer o auto-incremento do campo-chave de cada uma

das tabelas criadas, utilizaremos Generators, Triggers e a função

GEN_ID. Como visto em artigos anteriores sobre IB/FB, Generators são Figura 1. Criando o banco de dados Firebird através do IBExpert Personal Edition

BOOK - Clube70.indb 19BOOK Clube70 indb 19 9/1/2006 16:19:039/1/2006 16 19 03

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.net Edição 70 - ClubeDelphi 25

Delphi + Ajax.NET Delphi + Ajax.NET Rodolfo de Faria

Otimizando o tráfego HTTP com chamadas assíncronas e Callbacks em aplicações ASP.NET

Conforme já foi dito em outros artigos da ClubeDelphi, para de-

senvolver para Web é necessário quebrar paradigmas. Um deles é

que um Web Form (ASP.NET) é limitado e não possui tantos recursos

quanto um formulário tradicional (TForm da VCL). Ajax surge como

uma opção para enriquecer as interfaces via Web e melhorar a usa-

bilidade das páginas, deixando-as mais responsivas.

O funcionamento do protocolo HTTP é chamado de request/

response, isto é, a cada ação do usuário (clique por ex.), uma requi-

sição é enviada ao servidor e após uma espera, outra página HTML

é devolvida ao browser (ou seja, há refresh total da página). Esse

ciclo “clique, espera, atualiza página” é demorado, consome banda

e é pouco eficiente. E se pudéssemos atualizar apenas as partes da

página onde de fato houve modificações? Ajax faz isso e também

permite que o usuário continue interagindo com a página enquanto

uma requisição paralela está em andamento.

Neste artigo veremos como são implementadas requisições síncro-

nas e assíncronas usando a biblioteca Ajax.NET e como as páginas

podem ser atualizadas sem efetuar postback (execução do método

Submit do formulário da página).

Uma roupagem nova para tecnologias já conhecidas O acrônimo Ajax significa Asynchronous Javascript + XML e con-

siste na combinação do objeto XmlHttpRequest com JavaScript e

XML para envio e recebimento de informações sem a necessidade

de se efetuar postback. Com ele é possível fazer requisições em

background e atualizar a tela de modo transparente para o usuário,

assemelhando-se a uma aplicação desktop.

O termo Ajax foi cunhado por Jesse James Garrett da empresa

Adaptive Path (www.adaptivepath.com), mas o objeto XmlHttp

Request já existia no Internet Explorer desde sua versão 5 como um

componente ActiveX. Outros browsers já possuem uma implemen-

tação nativa desse objeto.

Ajax .NET Ajax.NET é uma biblioteca open source para .NET Framework que

visa simplificar a programação com Ajax. Baixe-a no endereço: ajax.

schwarz-interactive.de. No site existem duas versões: Ajax.NET e Ajax.

NET Professional. Usaremos a primeira versão. Veja na Figura 1 a

ilustração de uma solução Ajax.

No lado cliente uma função JavaScript cria um objeto XMLHTTP

Request e faz uma requisição de dados ao servidor. No lado servidor um

HttpHandler recebe a requisição, chama um dos métodos marcados

com o atributo [AjaxMethodAttribute] e serializa o objeto de re-

torno usando JSON (JavaScript Object Notation). No cliente, a string

JSON é transformada novamente em objeto, a função de callback é

chamada e alguma parte da página é atualizada. Isso acontece de

maneira transparente para o usuário.

Neste artigo, para ver como o Ajax funciona na prática, vamos criar uma

aplicação simples com dois controles HtmlTextBox, onde iremos digitar

no primeiro controle e uma descrição aparecerá no segundo.

Adicionando Ajax.dll ao projeto No Delphi 2005 ou 2006 crie uma nova ASP.NET Web Application

e salve-a como “DemoAjax”. No Project Manager dê um clique de

direita e escolha Add Reference (Figura 2). No editor, clique em

Browse, localize o arquivo Ajax.dll e clique em OK. Adicione Ajax na

cláusula uses da unit.

Editando o Web.ConfigNo Project Manager dê um duplo clique no arquivo Web.Config e

insira o código a seguir dentro da tag system.web:

<httpHandlers> <add verb=”POST,GET” path=”ajax/*.ashx” type=”Ajax.PageHandlerFactory, Ajax” /></httpHandlers>

Figura 1. Ilustração de uma solução Ajax baseada na imagem obtida de www.adaptivepath.com

BOOK - Clube70.indb 25BOOK Clube70 indb 25 9/1/2006 16:19:069/1/2006 16 19 06

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.netEdição 70 - ClubeDelphi32

Debugando com CodesiteDebugando com CodesiteBruno Sonnino

Conheça uma excelente ferramenta para debugar seu código

Você está desenvolvendo um aplicativo e as coisas não estão

correndo como deveriam: o programa não faz o que deveria fazer,

você tem muita dificuldade para seguir o código usando o debugger

integrado do Delphi, pois os métodos se entrelaçam e eventos são

ativados durante a execução, ou mesmo o erro está no meio de uma

rotina de reescrita da tela (nesse caso, quando o debugger é ativado

a tela é coberta e a rotina é chamada novamente), ou mesmo sua

aplicação é multithreaded, onde diversas tarefas são executadas

simultaneamente (por exemplo aplicações Web ou servidores de

aplicação DataSnap).

Normalmente, minha primeira opção quando isso acontece é co-

locar uma chamada para ShowMessage para que a caixa de diálogo

mostre o valor da variável. Quando a rotina com erro é chamada

diversas vezes, isso é impraticável, pois temos que clicar no botão

OK cada vez, além de interromper a execução, escondendo bugs e

introduzindo outros.

Passo então para a segunda opção: criar um arquivo de log, usan-

do WriteLn. Essa opção é mais interessante, pois não interrompe a

aplicação e permite mostrar todas as informações que desejo. Esse

enfoque funciona até o momento em que as funções começam a se

entrelaçar ou quando tenho que enviar informações mais complexas,

como uma imagem. Uma solução para esses problemas pode ser o

CodeSite, da Raize Software, já premiado como melhor ferramenta

de debugging pela revista Delphi Informant.

Introdução ao CodeSiteO CodeSite, que pode ser obtido em www.raize.com, é como um

super gerador de arquivos de log, pois permite enviar dados de

diversos tipos para o log, inclusive tipos personalizados. O log pode

então ser visualizado localmente, no Viewer, gravado num arquivo,

para ser visto em outro computador ou mesmo enviado para outra

máquina. As mensagens podem ser de diversos tipos, sendo mos-

tradas com ícones diferentes, podendo ser filtradas, para esconder

mensagens desnecessárias.

Após instalar o CodeSite, basta incluir a unit CodesiteLogging na

cláusula uses e usar o método Send, do objeto CodeSite, como:

CodeSite.Send(‘Teste de mensagem’);

Ao executar o programa, duas coisas acontecem: aparece um

novo ícone na barra de tarefas, ao lado do relógio: é o CodeSite

Dispatcher e a mensagem enviada é mostrada no CodeSite Viewer,

como na Figura 1.

O Send é um método sobrecarregado e pode receber diversos tipos

como parâmetro. Você pode enviar para o log de mensagens dados de

diversos tipos: strings, inteiros, imagens, listas e até dados personalizados

(como veremos mais adiante). Você pode incluir na mensagem uma

string explicativa e também um tipo de mensagem. Conforme o tipo, a

mensagem é mostrada com um ícone diferente no log.

O código a seguir envia as mensagens disponíveis no CodeSite. Note

que não enviamos a mensagem csmClear, que limpa o Viewer.

var i: Integer;begin for i := csmFirst to csmLast do if i <> csmClear then Codesite.Send(i,’Mensagem número’, i);

A Figura 2 mostra o log de mensagens após a execução do código.

Muitas dessas mensagens não serão enviadas dessa maneira. Por

exemplo, para enviar um separador ao Viewer, usamos o método Add-

Separator ou para limpar as mensagens usamos o método Clear.

Usando o CodeSiteO método Send, embora seja muito importante, é apenas parte do

que o CodeSite pode fazer. Um recurso muito interessante é o tracing

Figura 1. CodeSite Viewer

BOOK - Clube70.indb 32BOOK Clube70 indb 32 9/1/2006 16:19:109/1/2006 16 19 10

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.

www.clubedelphi.netEdição 70- ClubeDelphi38

DataSnap e SOAPDataSnap e SOAPGuinther Pauli

Aplicações distribuídas usando ClientDataSet, XML e Web Services

Quando pensamos na criação de aplicações para Internet, a pri-

meira coisa que vem à mente é o desenvolvimento Web. Usando

um browser, podemos acessar nossa aplicação a partir de qualquer

local do planeta, consultar informações dinâmicas vindas de um

banco de dados, fazer compras on-line, efetuar cadastros e muito

mais. Usando tecnologias como ASP.NET Web Forms com o Delphi,

podemos criar aplicações Web de forma muito semelhante ao que

já estamos acostumados a fazer no Desktop.

Os problemas começam a surgir quando tentamos fazer na Web

as mesmas coisas que estamos acostumados a fazer com a VCL

Win32. Em várias oportunidades aqui na Revista, e também nas

palestras que tenho ministrado sobre desenvolvimento Web, a

primeira coisa que gosto de deixar claro é: um browser não é um

formulário Delphi.

Considero os protocolos HTTP e HTML arcaicos para serem usados

como base na construção de aplicações; esses protocolos nasceram

há anos, quando a Internet se limitava a consulta de informações

estáticas, como imagens e textos (do tempo onde as primeiras apli-

cações dinâmicas sugiram com o CGI - Writeln). De lá pra cá, tudo o

que se fez, foi meramente criar tecnologias que facilitam o desen-

volvimento sobre eles, mas as limitações continuam a existir. Claro,

temos alguns facilitadores, mas nada como o velho e bom TForm.

Por exemplo, ao desenvolver para Web, você precisa aprender al-

gumas coisas que até então pareciam esotéricas para quem sempre

desenvolveu para Desktop: manter estado, fazer gerenciamento de

sessão, processar requisições HTTP, ter uma preocupação triplicada

com escalabilidade e por aí vai. Como se já não bastasse, o HTML

oferece um conjunto pobre de elementos (tags) para a construção de

formulários, se comparamos com a VCL. É muito mais fácil construir

uma interface rica de elementos visuais usando VCL.

Porém, a necessidade de acessar informações On-Line e centralizar

o banco de dados em um local que possa ser acessado pela Internet,

não nos deixa outra saída: mais cedo ou mais tarde vamos precisar

construir aplicações para Web!

O que proponho neste artigo é unificar o melhor dos dois mundos:

a facilidade do desenvolvimento Desktop com VCL Win32 com os

benefícios que só a Internet oferece. Você aprenderá hoje, neste arti-

go, a criar aplicações distribuídas para Internet usando VCL (“TForm-

based”, ao invés de um browser), DataSnap, SOAP e Web Services. E

o melhor de tudo, você verá que graças ao Delphi, esse trabalho se

torna muito simples, rápido, prático e RAD.

Vantagens ao utilizar DataSnap com SOAPAntes de começar nosso exemplo, na já tradicional metodologia

passo a passo, gostaria de justificar o porquê da abordagem que

estou propondo e quais as suas vantagens:

• Ao usar VCL para desenvolver para Internet, você não precisa

aprender outro framework. Podemos continuar usando os mesmos

controles que já usamos há anos;

• É muito simples migrar uma solução client/server para a aborda-

gem proposta, você vai economizar tempo e código;

• Não sofreremos com as limitações impostas pelo HTTP e HTML:

esqueça gerenciamento de estado, sessão, processamento de re-

quisições e afins;

• Diferente do HTML, que a cada requisição trafega formulários com-

pletos (resfresh total da página no postback), mesmo que você tenha

solicitado a simples mudança em um controle, em nossa solução tudo o

que vai tr afegar por HTTP são os dados dinâmicos, em formato XML;

• Aplicações client e usando essa arquitetura são chamadas

rich-client, elas contém basicamente código de tratamento de inter-

face. O acesso a dados, regras de negócio, SQL, tudo fica no servidor.

Isso garante uma centralização e compartilhamento de acesso.

Usando as tecnologias abordadas neste artigo, você poderá ao final:

• Acessar seu banco de dados a partir de qualquer lugar da Internet;

• Criar aplicações distribuídas para a Internet. Você pode, por

exemplo, centralizar o banco de dados e servidor de aplicação na

matriz da empresa e distribuir as aplicações clientes para as filiais,

que terão acesso a dados em tempo real e que se mantêm sempre

atualizados, sem a necessidade de sincronização;

• Poderá ter sua aplicação oferecida como um serviço: seus clientes

podem pagar um taxa, por exemplo, e acessar a aplicação através

da Internet, sem a necessidade de nenhuma configuração local na

empresa, tudo fica configurado e armazenado no servidor.

Arquitetura da soluçãoPara ter uma visão geral da arquitetura da aplicação que será criada,

veja o esquema da Figura 1. Durante todo este tutorial, sempre que

tiver uma dúvida de como a solução está sendo implementada e

em que camada está sendo empregada determinada tecnologia,

consulte essa figura. Ela será nosso “mapa”.

Temos três camadas envolvidas na solução:

• C amada de Dados: o banco de dados (SGBD), nesse caso usare-

mos o Firebird 1.5;

BOOK - Clube70.indb 38BOOK Clube70 indb 38 9/1/2006 16:19:149/1/2006 16 19 14

Hugo Ramos
www.clubedelphi.net Edição 70- ClubeDelphi 6 BOOK - Clube70.indb 6 Clube70 9/1/2006 16:18:55 16 18
Hugo Ramos
Página de Degustação Não Perca! Adquira já a sua edição e confira a matéria por completo.