Desenvolvendo Aplicações Web com InterBase e Delphi - Parte II

Implementando um cadastro de Clientes com WebBroker do Delphi.

Agora estamos na parte 2 de 3 nosso artigo, espero que o primeiro já tenha lhe dado uma ajuda até mesmo em seus aplicativos cliente servidor, para muitos o desenvolvimento Web ainda passa desapercebido, infelizmente se não atentarem que brevemente teremos Browsers em nossas geladeiras, ou quem sabe ainda um no fogão para que você possa pedir um pizza! Deixando o futurismo de lado, vamos dar continuidade a nosso artigo. Neste abordarei a tecnologia WebBroker do Delphi, que está presente desde sua versão 3, e que vem melhorando a cada versão, e aqui vai uma dica, visite constamente o site Commmunity Borland e confira as novidades para a sua versão. Nesta fase do artigo deveremos dominar alguns conceitos antes.

Protocolo HTTP

Este é o protocolo pelo qual as informações são trafegadas na Web, este protocolo é Sateless. Além de escrever uma palavra bonita, saiba o que é isso: Stateless significa que o protocolo HTTP não armazena estado, sendo assim as informações do usuário por exemplo, ou seja, um usuário conecta a ele, solicita os recursos e depois desconecta, este mesmo usário ao reutilizá-lo, ele simplesmente já o desconhece. Há maneiras de solucionar isso, como Sessions e Cookies; Session é um objeto da tecnologia ASP, e a mesma pode ser desenvolvida em Delphi como um objeto COM (Component Object Model), e os Cookies podem ser também facilmente construídos em Delphi.
Onde devemos chegar? Quero que você pense o seguinte seus aplicativos são como Robôs, que trafegando em HTTP, receberam as solicitações, as processarão e finalmente as devolverão, após isso se desconectarão de seus clientes (Browsers). O Http é um serviço que para estar disponível você precisa de um servidor web instalado em sua máquina, que pode ser um PWS (Personal Web Server) que vem no CD de instalação do Windows 98, na pasta Add-Ons, ou um mais poderoso, IIS (Internet Information Server), que está na sua versão 5 e pode ser instalado junto com W2K. (Windows 2000).

Requisições HTTP (Request)

O Protocolo HTTP é o protocolo de comuncação padrão na Internet, é através dele que as informações trafegam de um servidor web até um cliente, quando você solicita um recurso, você sempre está solicitando uma Requisição ao servidor, esta Resposta (Reponse) pode ser enviada através de texto formatado no padrão entendido pelos Browsers(Clientes), que por sua vez é o HTML, ou até mesmo um som ou imagem.

Respostas HTTP (Response)

Lembre-se, sempre que o HTTP é "Stateless", ou seja, ele não armazena estado, ou seja ele abre a conexão, processa, responde e a destrói. Se ele armazenasse estado seria muito bom, principalmente para utilizar-se dos recursos de Midas (Tecnologia Multi-Tier da Borland), mas infelizmente não! Sendo assim estas respostas, nós a chamamos de "Response", que por sua vez, são enviados aos clientes após o processamento de uma requisição.

Métodos de Requisição

POST : Este método envia os dados diretamente para serem tratados e processados no servidor, geralmente usado para transmissão segura, como informações de Cartões de Créditos, usuários e etc.

GET: As informações enviadas através das requisições são adicionadas na URL após um sinal de "?", este método é muito utilizado principalmente em consultas de banco de dados. Como por exemplo:

http://edgar/site/consulta.dll/searchbyuf?uf=PA&nome=Frankr%Borland

Na requisição acima duas informações estão sendo enviadas para o servidor: "uf" e "nome", obeserve que a concatenação das informações é feita através de "&", e o espaço "%".

Todos os métodos de Requisição enviam estas informações, e sempre nas aplicações a interceptaremos através dos campos que as mesmas capturam.

Delphi

No Delphi, diferentemente de seus aplicativos normais, não pense em Forms para seu front-end, e sim em aplicações de processamento e respostas, sendo que estas respostas são simplesmente "Textos". Pense na funcionalidade de escrever um cadastro e devolver uma string caso fosse efetivado com sucesso, e uma outra com a falha sugerida. Estes textos por sua vez, serão formatados em HTML e serão trafegados no HTTP. Pense sobre o seguinte, seu aplicativo receberá as requisições HTTP, as processará e as devolverá como Responstas, pode-se observar todo o ciclo:

CLIENTE=>REQUEST =>APLICATIVO=>{PROCESSA}=>RESPONSE=>CLIENTE

Sendo assim, vamos inicar nosso aplicativo, espero que esteja com o Delphi aberto, vá em File/New e na janela de New Items selecione WebServer Application, vai ser exibido uma janela com os três possível modelos de aplicações web em Delphi,

A diferença básica entre as 3 são as seguintes:

a)ISAPI - Este modelo irá gerar uma DLL, sendo que está DLL é carregada como um serviço no servidor Web, ou seja ela é instancida apenas uma vez e compartilha seus serviços entre os clientes, instanciado apenas o WebModule a cada requisição.

b)CGI - Este modelo irá gerar um executável, é... um executável! Porém é um aplicativo estilo console, se for executado fora de um browser o máximo que verás é uma telinha de DOS. Ele é bem versátil em alguns casos, mas peca no aspecto de instanciar 1 aplicativo (executável) por requisição, e isto geralmente causa problemas inesperados, principalmente se utilzar BDE, nas configurações por exemplo ShareMem, se ultrapassar o máximo configurado os clientes já não conseguem acessar seu aplicativo.

c)Win CGI - Este modelo foi projetada para uma "estrutura de comandos" que chamam de linguagem, e mais erroneamente chamam de ferramenta orientada a objetos, este padrão trabalha com auxilio de arquivos *.INI.

Para testes é muito eficiente usar CGI e depois alterar algumas palavras no projeto para transformá-la em ISAPI, pois a execução de cgi é mais simples.

Voltando ao nosso aplicativo, você irá se deparar com um "WebModule", o que viria a ser isso? Um WebModule é como um Datamodule, suporta qualquer componente não-visual, a diferença é que ele funciona como um Dispatcher, isto significa que ele poderá receber, processar e responder solicitações HTTP.

Primeiramente em seu WebModule adicione um componente da paleta DataAccess chamado Session, configure sua propriedade AutoSessionName para True, depois você vai fazer o seguinte, passar a propriedade Active também para True. Um Session é utilizado em caso de aplicações em Rede Paradox, Multi-Camadas, Multi-Thread e Web, a propriedade autosession name é passada para True, pois a aplicação irá gerar uma nova sessão para cada requisição a mesma, separando assim o acesso a dados dos clientes.

Agora adicione um DataBase e o configure da seguinte maneira:

IBDataBase

Propriedade Valor
Params

SERVER NAME=200.212.61.153:C:\Program Files\Borland\InterBase\examples\Database\employee.gdb USER NAME=SYSDBA

PASSWORD=masterkey

LoginPrompt=False

DatabaseName DbConn

obs: Ao invés do Ip coloque seu IP

Agora insira um StoredProc e configure da seguinte maneira.

Propriedade Valor
DataBaseNmae Dbconn
StoredProcName SP_DIU_CUSTOMER
ParamBindMode pbbyNumber

Você pode visualizar os parâmetros apartir da propriedade PARAMS do StoredProc.

Agora faça o seguinte crie uma página html, e dentro da mesma um form html, e crie os textfields para associá-los ao nosso StoredProc de nosso aplicativo.como está abaixo se for o caso, visualize o código-fonte e copie esta página.

Cadastro de Clientes
Company:
Contact
Phone:
City:
 
InterBase SuperPage

O que iremos fazer agora é criar nosso WebAction para que trate as informações enviadas para o ServidorWeb, informações esta que o usuário digita na página html.

Selecione o WebModule1, vá até o Object Inpector (F11), vá na propriedade Actions e dê um clique na Elipsis, automaticamente será exibido o WebAction Items, onde você vai clicar no botão "Add New" ou pressionar a teclar Insert, automaticamente será exibido um novo ActionItem, os WebModules são divididos em WebActions, estes por sua vez servem para de uma forma lógica separar os processos a serem executados pelo aplicativo, o próprio nome já diz tudo: "Ação", onde pode ser para excluir, inserir ou atualizar. Continuando, vá até esse webaction criado, selecione-o e configure as seguintes propriedades:

Propriedade Valor
Name

inserir

PathInfo /inserir

A propriedade PathInfo, informa a separação de paths no URL, para que assim cada ação possa agir em somente um path específico, ficando mais simples a referência ao Action em questão.

O Action "inserir", assim como todos os webactions possui somente um evento, e é disparado sempre que o action receber uma requisição referenciada. Escreva o código abaixo no evento OnAction:

Vamos entender o código acima

Trabalhamos com um Bloco Try...Except, na porção Try verificamos se uma transação foi ou não ativada (iniciada).

if not InTransaction then StartTransaction

Fazemos todas as passagens de parâmetros, e executamos o ExecProc, este método não retorna resultset o cursor vai só ao servidor, o que torna mais veloz.

Ao Objeto Response, na propriedade Content foi atribuído o texto HTML, formatado bem simples, a única consideração é para a chamada do link "Voltar", utilizei um JavaScript para retornar a página anterior. O content do Response é enviado e exibido até o cliente.

Se algum erro ocorrer na porção Try, o Except será executado, o "E" foi requisitado, para que pudessemos chamar a propriedade Message do Objeto Exception levantado.

Após escrever o código, vá em Project/Options, e configure o OutPut Directory, se estiveres usando PWS você deve ter um diretório cgi-bin, no meu caso eu utilizo o W2K, e configuro para Scripts, isto é para que automaticamente o executável seja criado neste diretório.

ex: c:\inetpub\wwwroot\Scripts

Agora execute seu aplicativo, e pronto! não esqueça que na propriedade action do form html você dever apontar seu script CGI em Delphi.

Bom pessoal, vimos neste artigo como tirar proveito de Delphi e Interbase 6, num aplicativo que roda na Web, o código acima poderia ser escrito em "N" maneiras diferentes, utilizando até outros componentes, mas quis fazer o mais simples possível, para finalizar a série de artigos criaremos um objeto de consulta em ASP, acessando nosso banco Employee. Até a próxima.

Segue os ScreenShots de funcionamento:

Entrando com os dados nos campos do form HTML.

A finalização de nosso processo, e nosso aplicativo funcionando.

Clique aqui e faça download do Projeto

Edgar Silva é Diretor Técnico da Argos Tecnologia, atuando em projetos envolvendo Multi-camadas com J2EE e outras tecnologias Borland como BizSnap e DataSnap, além de Frameworks J2EE como Struts, Turbine e o Argos Framework. Foi durante muitos anos um dos principais instrutores da Borland Latin America, viajando o país inteiro para formação de novos instrutores e profissionais certificados Borland. É Borland Delphi Certified Developer & Instructor e Borland JBuilder Certified Developer & Instructor (Java).
COMENTÁRIOS
Ricardo Vicente - 24/11/2003 - 12:47:40
Edgar,

Como acessar dados do tipo MEMO passados por parémetros a uma página HTML ?
EX: Na tag abaixo, o valor que aparece é (MEMO) e não o conteudo do campo OBSERVação.


Como faão para exibir esse conteudo ?
ricvicente@uol.com.br

Abraãos
................................................
Ricardo Vicente - 24/11/2003 - 12:48:25
Edgar,

Como acessar dados do tipo MEMO passados por parémetros a uma página HTML ?
EX: Na tag abaixo, o valor que aparece é (MEMO) e não o conteudo do campo OBSERVação.


Como faão para exibir esse conteudo ?
ricvicente@uol.com.br

Abraãos
................................................
Ricardo - 24/11/2003 - 12:49:45
|textarea rows="5" name="observacao" cols="55"||#OBSERVACAO||/textarea|
PS: Troque | por < ou >

................................................
Ricardo - 24/11/2003 - 17:36:27
|textarea rows="5" name="observacao" cols="55"||#OBSERVACAO||/textarea|
PS: Troque | por < ou >

................................................
O Envio de Comentários está suspenso temporáriamente