DataAbstract

Introdução ao framework

 

Recentemente a empresa criadora da ferramenta RemObjects SDK (RemObjects Inc.), anunciou seu mais novo produto chamado Data Abstract. Nesta matéria darei uma introdução ao framework e veremos como ele funciona na prática. Para que você possa testar os exemplos aqui criados, será necessário efetuar o download da ferramenta ( www.remobjects.com ).

O que é DataAbstract?

Data Abstract não é apenas mais uma camada de acesso a dados, mas sim um framework que nos permite trabalhar com diversos drivers de acesso à banco de dados como: dbExpress, ADO, IBObjects, etc. Nestas middle-awares, encontramos alguns problemas, como camadas intermediárias para o tráfego de dados como ODBC, muitos componentes para efetuar uma única consulta, entre outros, mesmo sendo multi-driver ou especializadas. Como solução para os problemas apresentados nas tecnologias acima, surgiu o DataAbstract com sua arquitetura especializada em aplicações multi-camadas.

 

Dica: Uma ótima combinação é utilizar a ferramenta com o RemObjects SDK, que produz aplicações multi-camadas otimizadas por utilizar o formato de mensagens binárias e utilizando diferentes protocolos para sua transferência.

DataAbstract na prática

Agora, veremos como o framework funciona. Por motivos de clareza omiti os passos necessários para sua instalação, que são simples. Primeiro criaremos nosso servidor, para isso no Delphi vá em File | New na guia RemObjecs SDK selecione a opção DataAbstract VCL Server como na figura 1.O ECO faz com que o modelo de classes seja uma parte integrante do sistema, durante o projeto e codificação e em tempo de execução, tornando o modelo UML realmente executável. Através da utilização da OCL (Object Constraint Language), que também faz parte da especificação oficial da UML, pode-se definir expressões para acessar classes, objetos e associações, realizar consultas e especificar restrições. Vejamos alguns exemplos de expressões OCL:

 

 Figura 1 - Selecionando o tipo de aplicação.

Após selecionarmos o tipo de aplicação, deveremos informar informações do projeto como: Nome, Nome do serviço de biblioteca, Nome do Serviço, Server Class e Message Class (Para a troca de informações entre cliente e servidor) e o diretório do projeto. Na figura 2 temos as configurações utilizadas no exemplo.

 

Figura 2 - Configurações do projeto.

Nota: Por padrão a opção “Create Test Client and Project Group” já é marcada. Neste exemplo não iremos utilizá-la.

Após configurarmos, nosso projeto é criado automaticamente com 1 DataModule (ServerDataModule) responsável por gerenciar a troca de dados, 1 DataModule (ServicoDA) responsável pelo serviço.

 

Figura 3 - Componentes do ServerDataModule

Temos os componentes ROIndyHTTPServer e ROBinMessage que são responsáveis pela troca de dados entre a aplicação cliente e o servidor.

Temos os componentes DADriverManager e DAConnectionManager que são responsáveis por gerenciar drivers e conexões DataAbstract.

Temos alguns drivers DataAbstract disponíveis para a aplicação.

No DataModule chamado ServicoDA, temos os seguintes componentes:

 

DADataDictionary é utilizado para conter definições de campos.

DABinAdapter é utilizado para se conectar à aplicação remota(cliente) para enviar pacotes de dados em formato binário.

DASchema é utilizado para conter comandos SQL, definições de DataSets, abstração de comandos SQL para um driver específico.

Agora iremos criar nossos DataSets, para isso no componente DASchema clique com o botão direito do mouse e selecione a opção Edit Schema. Com isso o Schema Modeler é executado.

 

Schema Modeler

No Schema Modeler, podemos editar facilmente comandos SQL de nossa aplicação. Este utilitário é importante por padronizar comandos SQL de diferentes servidores. No exemplo utilizaremos o database employee.gdb que é um exemplo do Interbase. Veja na figura 4 a tela principal do utilitário.

 

Figura 4 - Tela principal do utilitário Schema Modeler.

Criando a conexão

Criaremos a conexão com o banco de dados diretamente na Schema Modeler, para esta tarefa selecione o botão  da barra de conexões “connections” localizada na parte superior-direita do utilitário.

 

Figura 5 - A barra Connections

A tela para a criação de uma nova conexão é simples, siga os passos da figura 6. Onde criamos a conexão com o banco de dados Employee do Interbase utilizando o driver dbExpress.

 

Figura 6 - Connection Wizard.

Criando o DataSet

Iremos agora criar o dataset para a tabela Country, para isso selecione a tabela e arraste-a até a barra chamada DataSets, então um menu é aberto, nele selecione a opção Create New DataSet and Delta Commands. O wizard para seleção de chave-primária é aberto selecione o campo Country e clique em OK. Com isso nossos comandos para alteração, exclusão e inclusão foram criados, podemos retornar ao Delphi. Ainda no ServicoDA insira um DABusinessProcessor, este componente será responsável por controlar os comandos retornados ao servidor. Configure-o de acordo com a tabela abaixo:

Propriedade

Valor

Schema

Schema

UpdateCommand

Update_COUNTRY

ReferencedDataSet

COUNTRY

InsertCommand

Insert_COUNTRY

DeleteCommand

Delete_COUNTRY

Com isso, nosso servidor já esta pronto! Precisamos compilar e selecionar no menu RemObjects a opção Lunch Server Executable para iniciarmos o servidor.

A aplicação cliente

Inicie um nova aplicação, no menu File | New | Other na guia RemObjects SDK selecione a opção Data Abstract ClientDataModule. Então um DataModule “especial” é criado , logo, devemos informar em uma janela o serviço a ser utilizado, como na figura7.

 

Figura 7 - Selecionando o serviço.

Como o servidor esta sendo executado na mesma máquina informamos o endereço de LocalHost e a porta 8099, o serviço a ser utilizado é o ServicoDA. Após selecionar o serviço correto clique em Finish.

No DAClientDataModule, temos os componentes responsáveis pela comunicação com o servidor. Clique com o botão direito do mouse e selecione a opção Create Data Table do menu esta opção exibe a janela ilustrada na figura8 e cria automaticamente um DACDSDataTable que equivale ao nosso conhecido ClienDataSet.

 

Figura 8 - DataTable Editor.

Configurando o DACDSDataTable

No primeiro campo devemos informar o dataset a ser representado pelo “DACDS”, no exemplo selecione o COUNTRY que todas os outros campos são configurados automaticamente, clique em OK. Um DADataSource é criado para que possamos exibir informações, volte ao formulário da aplicação nele insira 1 DBGrid (Data Controls) e 4 Buttons (Standard), posicione-os como na figura 9.

 

Figura 9 - Formulário da aplicação.

Códigos da aplicação Cliente

Agora que configuramos nossa aplicação devemos inserir os códigos necessários para que possamos efetuar operações básicas. Não se esqueça de “usar a Unit “do DAClientDataModule.

No evento OnShow do Formulário insira o seguinte código:

 

procedure TForm1.FormShow(Sender: TObject);

begin

 DAClientDataModule2.tbl_COUNTRY1.Open; // para abrir o DACDS.

end;

 

No evento OnCloseQuery, coloque:

 

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

 DAClientDataModule2.tbl_COUNTRY1.Close; // para fechar o DACDS.

end;

 

No evento OnClick do botão de inserir digite:

 

procedure TForm1.BtnInserirClick(Sender: TObject);

begin

DAClientDataModule2.tbl_COUNTRY1.Append; // Coloca o DACDS em modo de inserção.

end;

 

No evento OnClick do botão de Excluir digite:

 

procedure TForm1.BtnExcluirClick(Sender: TObject);

begin

DAClientDataModule2.tbl_COUNTRY1.Delete; // Coloca o DACDS em modo de exclusão.

end;

 

No evento OnClick do botão de Excluir digite:

 

procedure TForm1.BtnAlterarClick(Sender: TObject);

begin

DAClientDataModule2.tbl_COUNTRY1.Edit; // Coloca o DACDS em modo de edição.

end;

 

No botão aplicar digite o seguinte código:

 

procedure TForm1.BtnAplicarClick(Sender: TObject);

begin

DAClientDataModule2.tbl_COUNTRY1.Post // Salva os dados.

DAClientDataModule2.tbl_COUNTRY1.ApplyUpdates(True); // Aplica os dados.

end;

 

Agora devemos conectar nosso DBGrid ao DADataSource e já poderemos testar a aplicação! Veja na figura 10 a aplicação em execução.

 

Figura 10 - A aplicação em execução.

Conclusão

Neste artigo procurei através da criação de um exemplo, introduzir você leitor ao poderoso framework DataAbstract. Ele nos oferece muitos mais do que simplesmente processar consultas SQL, mas conta com diversos mecanismos como DataDictionary, Field Mapping, integração com outras ferramentas, entre outros, que certamente serão assuntos de outros artigos.