quinta-feira, 22 de setembro de 2016

User Controls

Existem alguns temas que parecem tão complexos e obscuros que afugentam a grande maioria das pessoas, como se fosse uma selva sombria e úmida. Os poucos que desbravam esta densa vegetação, creio que em busca de uma aventura, acabam como heróis por sua coragem, desprendimento, e principalmente por encontrar as riquezas ocultas.

Esta era minha a sensação quando se falava User Control, um tema oculto e destinado apenas aos mais destemidos, que, sendo sincero, nunca tive muita intenção de abraçar, mas que ao mesmo tempo aguçava demasiadamente a minha curiosidade, e claro admiração.

Acontece que novos caminhos levaram a uma trilha na qual, o que se via a frente era apenas esta densa floresta, e nenhum desvio, a não ser a única opção de ingressar literalmente no meio do mato.

Trilhando um novo caminho

Com o advento do Abstract Editor o que pudemos observar foi que o pouco de HTML que poderíamos recorrer quando o calo apertava, simplesmente foi ocultado em um novo nível de abstração, que simplesmente deixou de aceitar baixarias, ou melhor, 'baixo nível'.

O mesmo editor também causou um bom incômodo, por nos permitir criar as tais maravilhosas interfaces responsivas, porém, com parcos recursos. Até o momento, sem o Work With for Web não saímos do lugar.

Foram muitos artigos aqui no Genexando nos quais apresentávamos algumas formas de produzir conteúdo HTML + CSS na interface, como, por exemplo, textblock.caption, mas mesmo isto, apesar de ser possível, não parece mais ser uma solução elegante e consistente no modelo atual. Nada contra este recurso, ainda o utilizo, mas que tal buscarmos algo novo?

O pior é que a solução para estas questões já estava disponível desde 2007, sob o nome de User Control, a única coisa que faltava era uma boa documentação.

User Control

No meu humilde ponto de vista, User Control acaba de ganhar muita importância neste novo cenário, pois, de repente, nossos recursos foram limitados basicamente aos Common Controls do Toolbox.

A razão é simples, nenhum (ou quase nenhum) User Control atualmente publicado no Marketplace está preparado para o cenário da responsividade. Encontram-se ainda sob a ótica das interfaces Web tradicionais, e vão exigir, no mínimo uma boa revisão por parte dos nossos heróis desbravadores.

Os User Controls também oferecem uma forma muito mais elegante para resolvermos a questão do uso de recursos para construirmos interfaces convincentes, que são as excelentes bibliotecas externas em Javascript que diariamente nos entregam novas funcionalidades, e que caberiam muito bem aos nossos projetos.

Desta forma, com a motivação adequada e certo de que poderíamos sair vivos desta selva, buscamos a ferramenta adequada para enfrentarmos o desconhecido. E o resultado desta aventura, também se mostrou um enorme desafio.

O que é um User Control?

Dificilmente você não utilizou um User Control, é quase impossível uma interface GeneXus sem pelo menos um deles. Porém, em termos estruturais, acredito que pouca gente conheça que é um pequeno projeto de um componente de interface, no qual definimos suas configurações de instalação,  aparência no GeneXus e funcionalidade no navegador do usuário. No mínimo teremos sempre quatro arquivos para registrar todas estas características.

Uma vez construído e instalado, teremos o recurso à nossa disposição no Toolbox do objeto GeneXus. Ou ainda, na propriedade Control Type de atributos e variáveis.

O objetivo fundamental será sempre o de oferecer algum recurso visual ou funcional diferenciado na interface do usuário, e que pode ser um novo controle para ingresso de dados, novos componentes de navegação como menus, navbar, dropdowns, ou mesmo recursos para controlar as ações dos usuários.

Para chegarmos a isto necessitaremos conhecer novos recursos como a linguagem Javascript, CSS, HTML, XML e XSLT. Mas também bibliotecas externas que eventualmente nos forneçam o recurso que desejamos implementar. Além dos próprios arquivos de configuração.

Não é necessário ser um programador profissional destes recursos para se alcançar resultados excelentes, veja meu caso, por exemplo, rs.

User Control: Construindo controles com o GeneXus


Como estratégia de aprendizagem deste tema peculiar, praticamente tive que ler e interpretar o funcionamento da grande maioria dos User Controls do Genexus Marketplace, entender suas semelhanças e diferenças, e em seguida buscar uma explicação plausível para seu comportamento.

A intensa programação Javascript por muitas vezes ocultavam importantes segredos, assim como as classes CSS que quando em funcionamento também não respondiam a contento, enfim, um cenário muito desafiador.

O Genexus Wiki, uma fonte importantíssima de informação, desta vez não contribuiu muito.

Ao final foi simples chegar a uma conclusão: o tema é muito importante para ficar escondido no mato.  E como resultado desta aventura, resolvi escrever um livro sobre este tema desafiador, principalmente porque o pouco material disponível praticamente pouco me ajudou.

A idéia por traz do livro foi simples: dividir os temas mais complexos em tópicos e apresentar muitos exemplos práticos para reforçar todo conteúdo apresentado. Com isso chegamos a onze capítulos que vão apresentar e desenvolver todos os recursos necessários para se construir seu próprio User Control. E ao término de cada um, uma atividade prática com o objetivo de desenvolver um controle útil com o recurso Bootstrap, ou seja, o mesmo framework utilizado pelo GeneXus para construir as interfaces responsivas.

Um detalhe, não abordo no livro User Controls para Android e iOs, nesta edição limitei a controles para Web.

Então, se você também sofrer da mesma doença: usercontrolitis curiositis, terá a sua disposição um material que eu acredito, irá te ajudar nesta aventura.

Disponível aqui:

https://www.amazon.com.br/User-Control-Desenvolvendo-controles-GeneXus-ebook/dp/B01LZT1NX7/ref=sr_1_5?ie=UTF8&qid=1474121129&sr=8-5&keywords=user+control

https://www.amazon.com/User-Control-Desenvolvendo-controles-Portuguese-ebook/dp/B01LZT1NX7/ref=sr_1_7?s=books&ie=UTF8&qid=1474120886&sr=1-7&keywords=user+control#nav-subnav