Curso de dbExpress e DataSnap - Parte XXII
Veja neste artigo de Guinther Pauli, mais um capítulo do curso de dbExpress e DataSnap. Acesso exclusivo para Assinantes.
Curso de dbExpress e DataSnap
Parte XXII – Clientes DataSnap
Neste artigo, veremos como construir uma aplicação cliente que fará acesso ao servidor de aplicação criado na parte anterior deste curso. Também conheceremos mais alguns detalhes envolvidos na construção de aplicações DataSnap e multicamadas.
Clique em File|New|Application. Salve a unit com o nome de “uFrmMain.pas” e o projeto com o nome de “DataSnapClient.dpr”. Dê ao formulário o nome de FrmMain e caption de “DataSnap Client”. Crie um DataModule clicando em File|New|DataModule. Salve sua unit como “uDM.pas” e dê a ele o nome de “DM”.
Coloque no DM um componente TDCOMConnection da guia DataSnap. Na propriedade ServerName escolha nosso servidor de aplicação registrado, chamado neste caso de AppServerDCOM.RDM.
Figura. Configurando ServerName do DCOMConnection
Configure a propriedade Connected para True. A janela principal do servidor de aplicação deve aparecer neste momento. Coloque um componente ClientDataSet. Configure sua propriedade RemoteServer para o DCOMConnection. Na propriedade ProviderName escolha o DataSetProvider (que está no RDM, que por sua vez aponta para o SQLDataSet de Customers). Configure a propriedade Active para True. Os dados da tabela CUSTOMERS serão trazidos do servidor de aplicação. Dê um duplo clique no ClientDataSet e adicione todos os campos TFields. Seu DM deve estar como mostrado a seguir.
Figura. DataModule da aplicação cliente
Quando o ClientDataSet recebe os dados vindos do servidor de aplicação, os mesmos são decodificados, pois vieram empacotados
Volte ao formulário principal. Aperte Alt+F11 e na lista escolha uDM. Coloque um DataSource da guia DataAccess e na propriedade DataSet aponte para o ClientDataSet que está no DM. Usando DBEdits e Labels (além de um DBNavigator) construa o formulário mostrado a seguir:
Figura. Thin-Client DataSnap
Coloque um Button, dê o caption de “Apply” e no evento OnClick digite o seguinte :
DM.ClientDataSet.ApplyUppdates(-1);
ApplyUpdates aplica a cache do ClientDataSet (chamada DELTA) no servidor de aplicação. O servidor de aplicação irá tentar aplicar a cache recebida no servidor de banco de dados por meio do componente DataSetProvider (resolving). Se algum erro for constatado, o servidor de aplicação devolve os dados ao cliente, para que sejam manipulados no evento OnReconcileError do ClientDataSet.
Chamando o método de negócio
Coloque um botão no formulário (com o caption “CPF”) e no seu evento OnClick digite:
procedure TFrmMain.Button2Click(Sender: TObject);
var
CPF : string;
begin
CPF:=InputBox('Chamando método remoto','Qual o nº do seu CPF?','');
DM.DCOMConnection.AppServer.VerificaCPF(CPF);
ShowMessage('CPF válido');
end;
Pressione F9 para executar a aplicação cliente. Insira alguns registros. Teste a validação do CPF. Não esqueça de pressionar Apply depois de gravar um registro, caso contrário, a cache (delta) não irá para o servidor de aplicação e seus dados não serão realmente gravados no servidor de banco de dados. A chamada ao método ApplyUpdates do ClientDataSet dispara o evento OnUpdateData e BeforeUpdateRecord do DataSetProvider no servidor de aplicação, onde você pode trocar alguns valores, decodificar dados, inserir novos valores antes dos dados serem realmente aplicados no banco.
Observe que demos um raise no servidor de aplicação quando um CPF for inválido. Essa exceção entretanto não é levantada no servidor de aplicação, o que poderia ser fatal. Observe a declaração do método VerificaCPF:
procedure VerificaCPF(const CPF: WideString); safecall;
SafeCall é a diretiva que protege uma método contra exceções. Qualquer exceção que for levantada dentro da pilha da chamada do método será propagada para a aplicação cliente.
Neste cliente usamos a vinculação dinâmica com o servidor de aplicação, através do uso da propriedade AppServer. Como AppServer é do tipo Variant, o Delphi não pode verificar na compilação se o método VerificaCPF realmente existe no servidor de aplicação. Isto é feito em tempo de execução (vínculo dinâmico). Experimente digitar “VerCPF” e nada acontece até o método ser finalmente chamado. Se um método não é encontrado no servidor uma exceção do tipo EOleError é gerada:
Figura. Vínculo dinâmico – chamadas são resolvidas em tempo de execução
Poderíamos ter usado vínculo estático (importando a Type Library) da mesma forma como fizemos no primeiro exemplo, para que o compilador, já em design-time, identifica-se os métodos suportados pela nossa interface IRDM (observe também que nossa interface IRDM é derivada da interface IAppServer).
AppServer é propriedade de TDispatchAppServer, que é uma das classes base de TDCOMConnection. TDispatchAppServer implementa os métodos definidos por IAppServer.
Download
Leia todos artigos da série
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX
- Curso de dbExpress e DataSnap - Parte XXX
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo