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.