18/05/2017 André Celestino

As vantagens do uso do Open Tools API na equipe de desenvolvimento Delphi

Olá, pessoal. É com grande prazer que marco início das minhas atividades de elaboração de artigos para o blog da DB1 Global Software.

Meu nome é André Luis Celestino e trabalho como Desenvolvedor Delphi na área de IT Services. Prazer em conhecê-los!

Neste primeiro artigo, pretendo relatar brevemente sobre como o Open Tools API do Delphi aprimorou a produtividade da nossa equipe. Caso vocês ainda não conheçam, o Open Tools API, também conhecido como “IOTA”, é um conjunto de Interfaces disponibilizadas pela Embarcadero para criar extensões para o Delphi, como plugins. A propósito, alguns wizards de apoio, como o CnPack, GExperts ou MMX, bastante utilizados por programadores Delphi, foram desenvolvidos através do Open Tools API.

Em poucas palavras, o IOTA fornece meios para acessar algumas propriedades internas do Delphi, incluindo o estado da IDE, editor de código, notificações de eventos (como compilações) e informações do Project Manager. É possível, por exemplo, codificar um item de menu para compilar um projeto da lista ou substituir textos no editor. Interessante, não?

De forma geral, pode-se afirmar que o IOTA permite “customizar” o Delphi, adicionando ações que não fazem parte de sua instalação nativa.

Na maior parte do tempo, a nossa equipe Delphi trabalha com algumas ferramentas externas, como exploradores de bancos de dados, aplicativos para busca de arquivos e monitores de SQL. Além disso, o sistema que desenvolvemos contempla uma arquitetura em 3 camadas, fazendo-se necessário reiniciar o servidor de aplicação todas as vezes que uma nova alteração é codificada. Pensamos, então, que seria muito produtivo se existisse uma forma de executar essas ações, a partir do próprio Delphi, para agilizar o nosso trabalho.

Pois bem, decidimos investir no potencial do Open Tools API!

Desenvolvemos um novo menu contemplando as seguintes ações:

  • Atalhos para aplicativos externos utilizados com frequência;
  • Procedimentos para compilar módulos específicos do projeto;
  • Atalhos para abrir os executáveis compilados;
  • Configuração para alterar conexões com os bancos de dados (desenvolvimento e homologação);
  • Link para a documentação oficial do Delphi.

Embora estes menus, em geral, já tenham aperfeiçoado a nossa produtividade, o grande masterpiece do nosso plugin está no Visualizador de DataSets. Codificamos um item de menu para exibir, durante o debugging em runtime, os dados do DataSet selecionado no editor de código em tempo real. Com esse recurso, podemos analisar os dados dos registros recuperados de uma consulta, além dos filtros, índices e os campos, auxiliando muito nas atividades de depuração. Para o desenvolvimento essa funcionalidade, utilizamos as Interfaces do Open Tools API para identificar o texto selecionado no editor de código e extrair os dados da propriedade “Data” do DataSet, simulando uma operação de avaliação de expressão (Evaluate Expression). Em seguida, desenhamos uma tela para apresentar os dados, o filtro atual do DataSet, os índices e uma lista para marcar ou desmarcar os campos a serem exibidos.

Aos poucos, continuamos promovendo o plugin, adicionando novos recursos que julgamos importante para a nossa produtividade. Confira abaixo uma imagem do plugin que, na verdade, adiciona um novo item de menu chamado “DB1” dentro do Delphi:

Exemplo de menu desenvolvido com o Open Tools API

Conheça mais sobre o Open Tools API no link a seguir faça alguns testes! Garanto que você identificará várias ações personalizadas que poderão aprimorar a sua experiência como desenvolvedor.

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Extending_the_IDE_Using_the_Tools_API

Até mais!

Sobre o autor

André Celestino Desenvolvedor Delphi há 7 anos com especialização em Engenharia e Arquitetura de Software. É Embarcadero MVP, possui certificação Delphi Developer, Scrum Fundamentals e SAFe Practitioner. Trabalha na unidade de IT Services na DB1 e atualmente cursa uma pós-graduação em tecnologias WebMobile.