sábado, 12 de novembro de 2016

Global Events


Os habitantes de Funafuti acordaram muito preocupados nesta última semana. E isto se deve principalmente aos últimos acontecimentos, também pudera, não é sempre que o famoso Tuvalu-News noticiou algo tão estranho como a eleição americana. Simplesmente a bolsa de valores de Tuvalu teve uma queda expressiva!

Realmente estamos vivendo uma era de eventos globais, e a eleição nos Estados Unidos é um bom exemplo, pois como pode algo específico do povo americano afetar o funcionamento do mundo inteiro? Será que os americanos se deram conta da responsabilidade que possuem neste momento? Será que ao saírem de casa, no dia da eleição eles pensaram, muito bem vamos derrubar a bolsa de Tuvalu?

Por mais que gostem ou não do resultado, alguns países ficam mais 'afetados' com o problema dos outros. A própria imprensa brasileira está 'decepcionada' com o resultado, e são intermináveis programas, entrevistas, debates sobre este 'tão relevante' assunto para o Brasil, e claro que a conclusão de todos é sempre a tal: vamos ver como é que fica.  Também como explicar uma imprensa que torce ao invés de reportar.

De fato vivemos momentos globais.

Mas deixemos o Trump trabalhar e o pessoal de Tuvalu jogar o seu kilikiti em paz, e vamos ao que, de fato, interessa.


Global Events

Assim como o acontecimento americano, Genexus 15 também afetou a economia. Porém, não estamos falando de dinheiro, e sim da economia de se criar uma única WebPanel para todas as interfaces do sistema! A chamada Single Page Application.

Este tema ficou meio esquecido principalmente porque faltava exatamente o Global Events, e os resultados produzidos não eram, assim, tão legais.

Acontece que GeneXus 15 nos entregou um novo objeto em nossa Kb, o Global Events, que ao ser configurado nos permite que os nossos WebComponents possam 'conversar' com o WebPanel.


Lembrando que isso não era então possível, simplesmente porque o WebPanel tinha a mania de não escutar o que o WebComponent tentava lhe falar, era quase um monólogo onde o painel passava seus parâmetros para o componente, e esperava que este funcionasse, porém não se preocupava nem um pouco se este produzia alguma coisa que lhe pudesse interessar.

Esta situação de falta de comunicação ficou muito evidente com a GeneXus Ev3 porque a mudança do cenário dos eventos Smooth, já não aceitava mais o conceito de reconstruir a interface inteira com um Refresh total, coisa das 'antiquadas interfaces' da Ev2, Ev1, e dai pra baixo. Isto passou a ser quase um pecado, pois como você pode fazer algo com o avançado recurso de atualizar apenas um pedaço da interface (Smooth), se de vez em quando tem que ser forçado a atualizar tudo, parece que a coisa perde um pouco sua importância.

Uma Single Page Application de uma única via também parecia ter um limite de funcionamento, então, o pessoal, 'ouvindo a voz da comunidade' meteu a mão na massa e nos entregou o Global Events.

Nada como termos uma conversa franca, não é mesmo?

Para que serve isso?

Simples, serve para que você possa enviar para um WebPanel alguma ocorrência de um de seus componentes, e com isso permitir que o painel principal possa fazer alguma coisa.

Por exemplo, se você possui um WebPanel e precisa carregar um component, o comando Create é suficiente para enviar para este os parâmetros necessários para sua construção.


Desta forma um comando Component1.Object = Comp1.Create(&p1, &p2), vai passar para o objeto Comp1, que é um WebComponent, os parâmetros &p1 e &p2. E assim o objeto Comp1 será incluído na interface e apresentar seu conteúdo.

O problema é que o objeto Comp1 não possui uma maneira eficaz de enviar para o WebPanel o resultado de algum evento que possa ocorrer. Por exemplo, se este tiver um Grid, ao se selecionar uma linha, não teremos como enviá-la para a página principal. Pode-se dizer que utilizávamos algumas técnicas aleatórias profissionais para fazer isso.


Bem, não tínhamos, agora temos, pois com o Global Events, registramos um evento que ao acontecer disparará uma ação global no sistema, e poderemos interceptar esta ação em nosso WebPanel. Não fique nervoso, é simples.

É mais ou menos assim, registre um novo evento no Global Event, definindo os parâmetros que utilizará para realizar a comunicação.
Em seguida, para gerar o evento será necessário 'chamar' este evento, num formato muito parecido com a chamada a um objeto qualquer. Entre parenteses se deve informar o valor a ser transmitido,a como, por exemplo, GlobalEvents.MeuEvent(2). Esta ação é realizada no WebComponent.

Esta operação disparará um evento global, que poderá ser interceptado por um WebPanel. Para que isto ocorra será necessário criar um Event GlobalEvents.MeuEvento, neste WebPanel.



Em seguida,  uma vez que o evento tenha sido interceptado com Event MeuEvento, será possível tomar uma decisão, como por exemplo, se trocar o Comp1 para outra interface qualquer, criando o efeito da Single Page Application. Teríamos vários componentes a serem apresentados em apenas um WebPanel.

Um Exemplo

No Wiki HowTo: Using Global Events in Web Objects temos um excelente exemplo apresentado pela Sabrina Juarez, inclusive com o XPZ que pode ser baixado e colocado em sua Kb. Neste a Sabrina apresenta uma lista de autores e seus livros, e quando se escolhe algum no Grid à esquerda, os componentes que apresentam os detalhes são disparados.


É um recurso muito interessante e simples de entender.  No exemplo, apenas um pequeno detalhe, caso ocorra um erro na carga das imagens, no DataProvider LiteraryWork_DataProvider, mais especificamente nas linhas que carregam as capas dos livros, devem ser comentadas. // LiteraryWorkImage = Link("bodas_de_sangre")

Conclusão

O Global Event do GeneXus se mostra um recurso excepcionalmente interessante e com certeza vai se adequar muito bem aos projetos mais ambiciosos de interface.

Infelizmente, quanto à eleição americana, parece que o mundo também tem sido influenciado globalmente pela falta de candidatos adequados para que a população possa escolher alguém de fato representativo. Os políticos de aqui e de acolá estão adotando aquela velha estratégia suja de fechar uma lista de pessoas que infelizmente não poderiam ser escolhidas, na qual o melhor seria não escolher ninguém, digamos, que tal o menos pior?

Se a tendência perdurar até 2018, pode ser que tenhamos um Trump aqui também.