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:

 

CoClassName        Nome da classe que será registrada no Windows;

 

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

 

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

Single Instance               Uma 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 Model                 Utilizado 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;

Apartment                      O 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;

Free                       Este 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:

 

CoClassName      COMidasServer

Instancing          Multiple 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:

 

DataSet                                                             Table1

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/NSAPI                    A 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.

CGI                                A 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/CGI                         Variaçã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

ComputerName               Deve 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

Connected                       TRUE

 

         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:

 

Name                    XMLBroker1

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

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

 

Name                                         XMLBroker2

RemoteServer    DCOMConnection1

ProviderName       ProviderClients

 

         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 clique    duplo 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:

 

Default        TRUE. 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

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

PathInfo      Parâ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).