Artigo Clube Delphi Edição 9 - XML no Delphi

Artigo da Revista Clube Delphi Edição 9.

Esse artigo faz parte da revista Clube Delphi edição 9. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.


XML no Delphi

Toda a força da palheta Internet Express

 

É importante salientar que esta matéria possui um perfil bem dinâmico, mostrando como construir alguns exemplos passo a passo.  O detalhamento dos conceitos técnicos a respeito do assunto não são a preocupação principal, pois abordaremos isto nas próximas edições da revista.

Esta palheta vem adicionar um recurso muito interessante para o desenvolvedor Delphi: o fato de poder exportar dados em formato XML.

A XML (Extended Markup Language) é uma extensão da HTML (Hypertext Markup Language), e traz várias melhorias no sentido de performance e flexibilidade dos aplicativos. Uma das principais diferenças para quem trabalha com banco de dados, é que a XML "bufferiza" os dados no Browser, não necessitando executar um pesado Request a cada movimentação de registro feita pelo usuário.

Vejamos como funciona a tecnologia XML:

 

Enviar e receber dados em pacotes XML são tarefas que necessitam de uma camada MIDAS para captura das informações no banco de dados. Note a diferença de camadas em uma aplicação ISAPI normal e uma aplicação ISAPI com XML:

 

 

 

Vamos criar, passo a passo, uma aplicação para prover informações em pacotes XML:

 

Primeiramente, devemos criar o pequeno servidor MIDAS que irá buscar as informações no banco de dados.

 

Crie um novo projeto no Delphi:

 

Dentro da nova aplicação, abra o Repositório de Objetos; Selecione a aba MultiTier; clique duas vezes sobre o item Remote Data Module, que a janela irá aparecer:

 

 

Confira na tabela abaixo o significado das opções:

 

CoClassNameNome da classe que será registrada no Windows;

 

InstancingIndica como o Datamo-dule será instanciado. Os possíveis valores para Instancing são:

 

InternalCria a instância do DataModule dentro do próprio processo. Recomendável quando o servidor que estiver sendo construído for uma DLL;

Single InstanceUma instância da aplicação será criada para cada cliente conectado;

Multiple Instance   Apenas uma instância da aplicação será criada. Uma  instância do DataModule será criada para cada cliente conectado, porém, dentro do  espaço de processo da aplicação.

 

 

Threading ModelUtilizado apenas quando o Remote Data Module está sendo criado dentro de uma DLL. Confira os possíveis valores:

 

Single Somente uma requisição será processada por vez. As demais permanecerão em fila;

ApartmentO Datamo-dule1 é instanciado para cada requisição do cliente. Nesta situação, os dados estão seguros, pois todos os acessos serão safe-thread, ou seja, livre de conflitos de memória. Esta opção é recomendável para aplicações que utilizem o BDE;

FreeEste thread terá um comportamento parecido com Apartment, porém, neste caso, os dados não estarão Thread-Safe. As concorrências deverão ser tratadas para que um conflito de acesso à memória não ocorra;

Both   Igual à opção Free, porém, o retorno para o cliente será feito em fila, e não em threads.

 

Baseado nisto, vamos configurar a caixa de diálogo conforme a tabela abaixo:

 

CoClassNameCOMidasServer

InstancingMultiple Instance

Tread Model Apartment

 

Após dar OK na caixa de diálogo, o objeto TremoteDataModule apa-   recerá:

 

 

Primeiramente, devemos colocar um objeto TSession, que irá controlar as ações de vários usuários concorrentes dentro da aplicação. É importante também configurar a propriedade AutoSessionName para TRUE. Esta propriedade irá criar um nome de seção diferente para cada usuário conectado.

Após, um objeto Database deve ser inserido no DataModule1. Configure corretamente o objeto database para que aponte para o alias DBDEMOS.

E, em seguida, coloque um objeto Ttable no DataModule. Linke o table com o objeto Database e aponte-o para a tabela Animals.

Devemos agora inserir o objeto que irá prover os dados para a aplicação XML. Este objeto será da classe TdataSetProvider, e se encontra na palheta MIDAS. Coloque um objeto DataSetProvider e configure-o de acordo com a tabela abaixo:

 

DataSetTable1

Name ProviderAnimals

 

E OK! Salve a aplicação e gere o executável. A partir deste momento, teremos um servidor midas instalado na máquina.

Devemos agora criar a aplicação XML, que irá recuperar os dados através do servidor MIDAS e fornece-los para a máquina cliente através do protocolo HTTP:

Crie uma nova aplicação no Delphi. Abra o repositório de objetos e selecione a opção Web Server Application.

A janela de seleção Web Server Application será exibida. Vejamos as opções:

 

 

ISAPI/NSAPIA aplicação será gerada em forma de DLL. Esta opção irá oferecer melhor desempenho e menos consumo de memória, pois a aplicação será alocada somente uma vez na memória. Os demais usuários irão utilizar a mesma instância do aplicativo, já instanciada no mesmo espaço de memória do servidor Web. A opção NSAPI representa a mesma tecnologia para servidores NETSCAPE.

CGIA aplicação será gerada em forma de executável (.EXE). Esta opção, apesar de ser bem prática, oferece desempenho inferior ao ISAPI, visto que cada solicitação será carregada na memória de forma independente. Ou seja, para 10 conexões,  o aplicativo será carregado 10 vezes do disco, em dez espaços de memória diferentes.

Win/CGIVariação  do CGI criada para ser utilizada em servidores Windows 16 bit.

 

Nota: A última versão do Internet Information Server já permite que aplicativos CGI ocupem o mesmo espaço de memória, como uma aplicação ISAPI. Para maiores informações, consulte o guia de referência do IIS.

Selecione a opção ISAPI e dê OK. Um novo objeto TwebModule será exibido:

 

 

Primeiramente, coloque um objeto TDCOMConnection (palheta MIDAS). Este objeto irá realizar a conexão com nosso servidor MIDAS.  Configure suas propriedades de acordo com a tabela abaixo:

 

ServerName Nome do servidor Midas a ser conectado

ComputerNameDeve ser preenchido apenas quando o servidor midas não estiver local. Neste caso, o nome da máquina onde o servidor está instalado deve ser assinalado nesta propriedade

ConnectedTRUE

 

Em seguida, insira dois objetos TXMLBroker (palheta MIDAS) dentro do WebModule. Este objeto irá recuperar os dados das tabelas contidas dentro do servidor. Configure suas propriedades de acordo com a tabela abaixo:

 

NameXMLBroker1

RemoteServerObjeto TDCOM Connection, que representa a conexão com o servidor MIDAS. Selecione DCOMConnection1

ProviderNameNome do objeto DataSetProvider que representa as tabelas exportadas pelo servidor MIDAS. Selecione ProviderAnimals.

 

NameXMLBroker2

RemoteServerDCOMConnection1

ProviderNameProviderClients

 

Agora, devemos inserir a última classe requerida, Tmidas PageProducer. Este objeto irá criar a página XML baseada nos dados da tabela. Insira um objeto Tmidas PageProducer no formulário.

Selecione o objeto Midas PageProducer1 e dê um cliqueduplo sobre a propriedade WebPageItems do objeto. O Editor HTML será exibido:

 

 

Clique com o botão direito sobre o item MidasPageProducer1 e selecione a opção New Component. Em seguida, escolha Dataform. Após, clique com o botão direito sobre o novo item, DataForm, e selecione Datagrid. Selecione o novo item, DataGRid1 e configure sua propriedade XMLBroker para o nome do objeto XMLBroker que irá prover os dados convertidos em XML. Neste caso, selecione XMLBroker1. Repare que o DbGrid já irá exibir o título das colunas.

O último passo é criar uma ação para executar este MidasPageProducer. Clique com o botão inverso no objeto WebDataModule e selecione a opção actions editor. No editor de ações, crie uma nova ação através do botão New Action. Um objeto TwebAction será criado. Configure suas propriedades de acordo com a tabela abaixo:

 

DefaultTRUE. Isto irá executar a ação quando o usuário digitar o nome do aplicativo no browser, sem nenhum parâmetro. Ex: www.clubedelphi .com.br/project1.exe

ProducerNome do objeto responsável pela reposta ao cliente. Neste caso, será o objeto MidasPage Producer1, que retornará uma página XML para o cliente.

PathInfoParâmetro que o usuário deverá digitar na URL para executar esta ação. Como esta é a ação default, não é necessário informar esta propriedade.

E Ok! Compile o projeto, e repare que o aplicativo project1.dll será adicionado no diretório da aplicação.

O próximo passo é copiar o aplicativo para algum diretório de aplicações do servidor WEB. No diretório da aplicação, alguns arquivos JavaScript deverão ser copiados. Estes arquivos estão no diretório <Delphi> \Source\WebMidas:

 

Xmldb.js

Xmldisp.js

Xmldom.js

Xmlerrdisp.js

Xmlshow.js

 

É importante notar que o servidor WEB deverá estar corretamente configurado e ajustado para que a aplicação funcione de forma estável.

 

Nota: Os arquivos .js também poderão residir no diretório de scripts do servidor.

 

Utilizando o DBNavigator com XML

 

Vamos criar um outro tipo de interface para a nossa Homepage: Os dados serão exibidos em campos e o usuário poderá navegar entre eles através de uma barra de navegação. Para a construção deste exemplo, abra o cliente XML construído anteriormente.

Insira um novo MidasPage Producer. Com este, iremos contruir a nova página de visualização dos dados.

Dê um clique duplo sobre a propriedade WebPageItems, para que o editor de páginas seja exibido.

Selecione o item MidasPage Producer1 e clique com o botão inverso do mouse. Selecione a opção New Component...

Na janela de seleção, selecione a opção  DataForm.

Clique sobre o item dataform1 e pressione o botão inverso do mouse. Selecione a opção FieldGroup.

Clique novamente sobre o item Dataform1 e adicione o item DataNavigator.

Ok! Será necessário criar uma ação para este PageProducer. Clique com o botão inverso sobre o WebDataModule e selecione a opção Action Editor.

Crie uma nova ação e configure sua propriedade Producer para o objeto MidasPageProducer2, que acabara de ser criado.

Compile o projeto e instale-o no servidor Web. Para testar a aplicação basta digitar a URL:

http://servidorweb/diretorio_ da_aplicação/project1.exe/MidasPage Producer2

E o resultado será parecido com a ilustração ao lado:

 

 

 Os exemplos citados nesta matéria, foram construídos localmente, utilizando o Personal Web Server. Para quem não conhece, o PWS é um servidor web local, feito para Windows 9x, e que pode ser encontrado no próprio CD-ROM do Windows 98 ou no endereço www.microsoft-naio-sei -oque.com. Na próxima edição veremos mais alguns exemplos desta poderosa ferramenta, e iremos mostrar passo a passo como instalar o aplicativo em um servidor Web real (no caso, o Internet Information Server).

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados