Por que WebService é interessante?
Um dos nossos maiores problemas é o avanço tecnológico, e por que isso gera problema? Os sistemas vão ficando obsoletos com o passar do tempo e aquela tecnologia que foi selecionada na época e foi tão eficaz durante certo tempo, deixa de ser suficiente para atender às novas demandas das pessoas e processos. Por exemplo, um ótimo sistema programado lá atraz com dBase ou Clipper, atualmente não funciona em uma camada web ou mesmo smartdevice, simplesmente porque essas tecnologias morreram no meio do caminho, e muitas outras também como Visual FoxPro, Visual Basic, Cobol. Algumas inclusive se adaptam melhor a evoluções, como Java que foi se adaptando com o passar do tempo, mas também essa está fadada há acabar um dia.
Então o que ocorre com essa proliferação imensa de sistemas obsoletos de distintas tecnologias rodando em uma empresa, sendo que muitos dos quais ainda operam de forma eficiente em seus processos. A resposta: ficam isolados em seus processos, ou mesmo, sofrem atualizações tecnológicas (são reprogramados).
Uma solução mais simples seriam interligar novos sistemas (mais tecnológicos) aos bancos de dados dos sistemas antigos (obsoletos) para se buscar uma conexão entre eles. Esse mecanismo é provido por Data Views, que também é um método de conexão entre sistemas, mas com a desvantagem de que a base de dados deve estar disponível para acesso, não apenas read-only, por outros sistemas.
Uma solução mais inteligente seria interligar os novos sistemas aos sistemas obsoletos por meio de uma camada de comunicação, fazendo com que o sistema novo consuma uma informação do sistema antigo, sem o conhecer, ou seja, não interferem em suas regras de negócio, estrutura funcional, tabelas, campos, ou seja, apenas solicita uma informação e o sistema antigo a devolve para ser processada no sistema novo. Esse mecanismo é chamado de Web Service e essa funcionalidade é apenas uma visão simples de sua utilidade.
Transação como WebService
Então imagine estar em um sistema de Faturamento e ter acesso a um formulário do sistema de Custos, mas sem acessar diretamente as tabelas do sistema de Custos. Desta forma poder-se-ia ajustar certos valores (controlados) no sistema de Custos na interface do sistema de Faturamento. Interessante hein?
Esse recurso é interessante porque normalmente consideramos webservices não diretamente sob o ponto de vista de interfaces para usuários, mas procedures e mecanismos que rodam de forma oculta dos usuários.
Considerando que já temos à nossa disposição um objeto que já realiza insert, update e delete, que é a transação, é sobre ele que trabalharemos. E no melhor estilo GeneXus o que precisamos apenas é definir uma propriedade na Transação: Export as WebService. Isso possibilita que um Business Component (Transação marcada como BC), possa ser acessado por qualquer usuário de outro sistema, bom, não se esqueça de integrar nisso tudo um mecanismo de segurança.
Exemplinho
Então vamos a um exemplo simples, imagine uma transação de Pais que se encontra em uma determinada Kb qualquer, que definimos com um papel de produtor de informação, ou seja, tem a funcionalidade de criar países em sua própria Kb e também permitirá o acesso remoto desta operação em outras kb´s.
Sem muita complicação na estrutura, mas que
foi marcada como Business
Component e com a propriedade Expose as WebService=True.
Ao executar essa aplicação, o objeto Pais_BC passa
a ser acessível no browser como um arquivo WSDL. Ou seja, responde a uma chamada web service.
Desta forma, podemos em um sistema
consumidor, definir certa interface para acessar esse objeto para realizar
operações, como falamos de transação, de inserção, atualização e remoção de
registros de certa tabela. Nessa nova Kb o que teríamos é um objeto externo,
obtida pela operação Tools->Application Integration->WSDL Import, que
apontado para o endereço do WDSL exemplificado na imagem anterior, nos
devolveria três objetos:
Um External Object chamado de Pais_BCBC,
e dois SDT´s denominados Pais_BCBCPais e Pais_BCBCMessages_Message. O primeiro SDT traz a
estrutura da transação mais alguns atributos de controle e o segundo as
mensagens devolvidas pelas operações.
Apesar de termos agora a possibilidade de
operar remotamente a transação em qualquer objeto Gx desta nova kb, poderíamos inclusive,
gerar um formulário de Pais e inserir registros nessa tabela remota, que
podemos fazer por meio de um webpanel.
Nesse nosso teste é carregar o pais 1, por
meio deste objeto externo e apresentá-lo na interface, o método LoadKeySvc realiza a carga
de um registro no WebService. Um evento
Enter faz o papel de atualizar a informação, por meio do método SaveSvc.
Event Start
&Messages = &Pais.LoadKeySvc(1, &Pais_SDT)
do 'MessagesShow'
EndEvent
Event Enter
&Messages = &Pais.SaveSvc(&Pais_SDT)
do 'MessagesShow'
EndEvent
Sub 'MessagesShow'
for &Message in &Messages
msg(&Message.Description)
endfor
EndSub
Se você tem dificuldades em determinar os
tipos das variáveis, ai vai uma ajudinha.
A interface mais simples é inserir a variável
&Pais na
tela, que é apresentada no formato de uma tabela com campos. Se quiser simplificar, arraste a variável &Pais_SDT, para a interface que o GeneXus monta o formulário.
Finalmente, ao executar o formulario remotamente verá que é possível alterar um registro de Pais estando em outro sistema. A operação remota produz o mesmo efeito da
manipulação do formulário da transação na Kb original.
Conclusão
Conclusão
Se você tem por objetivo dividir
seu projeto em kbs isoladas, e se a quebra de intregridade referencial
provocada por essa divisão não afetar significativamente seu modelo, então
temos aqui um recurso excepcional para trabalhar com informações que não
precisam estar em uma mesma base de dados, ou sistema, enfim, temos em nossa mão
um mecanismo para acessar e operar informações de tabelas distantes.
Observe o quão simples foi fazer
tudo isso em GeneXus, visto que a complexidade envolvida no processo limitou-se
a compreensão de meras propriedades e objetos. Portanto, com um pouco de
investimento cerebral é possível pensar em sistemas mais modularizados, melhores
e mais eficientes, e também reaproveitar o que está pronto sem ter que
reprogramar tudo.
Controle remoto? sim, eficiente, interessante e muito simples.
Maiores informações em:
3 comentários:
Show de bola, Douglas.
Parabéns pelo post... muito claro e objetivo.
GeneXus é X!
Ok Sérgio
Obrigado, e fique a vontade no GeneXando.
Ab
Quanta Agilidade esse GX, obrigado pelo post.
Postar um comentário