Back-End

18 mar, 2009

Delphi para Internet, parte 3: Acessando dados XML com Intraweb

Publicidade

Leia mais artigos dessa série:

Delphi para Internet, parte 1

Delphi para Internet, parte 2

Olá pessoal

Tenho recebido vários emails pedindo a continuidade dos artigos sobre Intraweb, por isso criei esta terceira parte abordando o cadastro e consulta de dados em arquivos XML utilizando o framework Intraweb como interface.

Vamos primeiramente criar nosso XML,  seguindo a estrutura abaixo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="NOME" fieldtype="string" WIDTH="20"/>
<FIELD attrname="CIDADE" fieldtype="string" WIDTH="15"/>
<FIELD attrname="PAIS" fieldtype="string" WIDTH="15"/>
</FIELDS>
<PARAMS/>
</METADATA>
<ROWDATA>
<ROW NOME="JOAO" CIDADE="SAO PAULO" PAIS="BRASIL"/>
<ROW NOME="EUFRAZIO" CIDADE="SANTOS" PAIS="BRASIL"/>
<ROW NOME="ROONEY" CIDADE="MANCHESTER" PAIS="INGLATERRA"/>
<ROW NOME="MALDINI" CIDADE="MILAO" PAIS="ITALIA"/>
</ROWDATA>
</DATAPACKET>

Note que no exemplo acima estão previamente cadastrados alguns registros, mas isso não é uma regra. Você pode muito bem criar apenas a estrutura sem nenhum registro.

Copie este XML e cole em um bloco de notas ou um editor de sua preferência, salvando-o como Dados.xml.

Feito o XML, crie um novo projeto Intraweb: File/New/Other/VCL for the web, de um nome para seu projeto e salve-o, de preferência no mesmo diretório de seu arquivo XML para uma melhor organização.

Criado o projeto e com seu WebForm na tela adicione os seguintes componentes:

Componente Nome Valor
*IWRegion rgCadastro
iwDbEdit DBENome
iwDbEdit DBECidade
iwDbEdit DBEpais
Iwlabel lblNome Nome:
Iwlabel lblCidade Cidade:
Iwlabel LblPais País:
IwDbNavigator Navegacao

*Nota: O IwRegion é semelhante a um Panel que estamos acostumados a ver em aplicativos Win32, neste exemplo colocaremos todos os controles ao lado dentro deste container.

Feito a parte de cadastro vamos para a parte de consultas, adicionando logo abaixo os seguintes componentes:

Componente Nome Valor
IwDbGrid DbgResultado
IwLabel lblPesquisa
Iwedit EdtPesquisa
IwButton btPesquisa

Coloque os componentes e o resultado final de seu layot deverá fica semelhante a figura abaixo:

Bem, nossa parte de layout está pronta vamos agora programar as funcionalidades de nossa página que é algo nada complicado.

Adicione um ClientDataSet e o renomeie como CDSCadastro, e na propriedade FileName busque o arquivo DADOS.XML, e logo após adicione os campos.

Concluída a parte de conexão com nosso XML adicione um datasource com o nome de dsCadastro e na propriedade Dataset selecione seu CDSCadastro como de costume numa aplicação win32.

Agora vamos linkar o CDSCadastro com os campos e com nosso dbNavigator:

Componente Propriedades
EdtNome Datasource=dsCadastro / Datafield=NOME
edtCidade Datasource=dsCadastro / Datafield=CIDADE
EdtPais Datasource=dsCadastro / Datafield=PAIS
Navegacao Datasource=dsCadastro / Datafield

 

*Detalhe importante: Setar a propriedade Active de seu CDS como true.

Agora compile seu projeto e veja o resultado, podemos navegar nos registros previamente criados, além de adicionar outros, excluir e alterar através de nosso iwDBnavigator.

Vamos para nossa parte de consulta, que será exibida em nosso Grid. Para isto dê um ctrl-c e ctrl-v no CDSCadastro e no dsCadastro renomeie para CDSConsulta e DsConsulta (não utilizei o mesmo CDS por questões óbvias, o ponteiro de consulta iria aparecer nos campos do cadastro), não é necessário setar a propriedade Filename pois já está setada.

Faça o link do dbgConsulta com o dsConsulta, através da propriedade Datasource, e agora é só programar a consulta no botão btConsulta através do evento Onclick ou AsyncClik caso você queira utilizar o Ajax.

procedure TIWForm2.btPesquisaClick(Sender: TObject);
begin
CDSConsulta.Close;
CDSConsulta.Filter := 'NOME = '+ QuotedStr(edtPesquisa.Text);
CDSConsulta.Filtered := true;
CDSConsulta.Open;
end;

Note que na consulta estamos filtrando apenas por nome, informando ao comando Filter o campo do XML a ser pesquisado, o resultado é este:

Bom pessoal finalizamos mais este artigo abordando um pouco mais profundamente o Intraweb.

É importante ressaltar que apesar destas aplicações web serem feitas de forma bem semelhante a aplicações WIN32, é preciso ter um certo cuidado, pois quanto mais carregada sua tela for de componentes, ou quanto mais pesadas forem suas consultas a banco de dados, mais lenta sua página será, pois tudo isso será gerado pelo código de sua página. É altamente recomendável, separar as consultas e regras de Negócio da Interface Web, deixando-os em camadas diferentes justamente para não ter problemas de lentidão.

Um abraço a todos e o meu agradecimento ao Bruno Lichot, da CodeGear, que sempre que possível esclareceu minhas duvidas.

Até a próxima!