segunda-feira, 13 de junho de 2011

Interfaces web na base do fórceps!

Você sabe o que é fórceps?  Calma, não é um novo acrônimo na informática, nem mesmo significa alguma tecnologia nova relacionada a TI, ou mesmo um novo modelo de roteador.

Durante muito tempo minhas interfaces web não respondiam de forma adequada, e os valores apresentados não eram corretos, isto apesar de serem geradas sem erros. Ou seja, construir uma interface gráfica web em Genexus parecia, de vez em quando, um parto mal resolvido, não que eu saiba direito o que significa isso, mesmo porque esse assunto é mais relacionado com as meninas, mas imagino que deve doer pra caramba. 

Então, como dominar esse assunto e sofrer menos com as dores de parto, ou pior, apelando para o fórceps, ou seja, vai meio que na marra! Abaixo apresento meu manual para um parto sadio.

URL ou Formulário
Para responder essa pergunta é necessário primeiro entender como ocorre o mecanismo de comunicação entre o cliente e o servidor no protocolo HTTP. Como assim? Existem dois tipos de chamadas que podem acontecer entre um cliente a um servidor web. Pelo endereço de URL ou via FORM.
A chamada com URL acontece quando digitamos um um endereço válido no navegador, como por exemplo: http://www.google.com, ou quando estamos em um programa, ao selecionar uma opção no menu do sistema.


A chamada via FORM, por sua vez, ocorre quando preenchemos algum controle Edit em um formulário na interface web e  em seguida pressionamos algum botão que faz com que o controle seja enviado ao servidor, esse botão normalmente é do tipo SUBMIT. A própria interface do Google possui um formulário, e ao pressionar o botão Pesquisa Google, por exemplo, estamos realizando um acesso ao programa do Google, através de uma chamada de Formulário.

Na nomenclatura oficial do WWW, a chamada via URL é denominada GET, e a via Formulário é denominada POST, salvo os detalhes de configurações que podem ser feitas, alterando um pouco isso.

GET

Sempre a primeira chamada a um programa acontece pela URL, e é denominada GET.  Sua principal característica é a passagem de parâmetros, que acontece no próprio ‘endereço’ do programa. Para isso usa-se uma interrogação (?) para separar o nome do programa da lista de parâmetros. O GxTechnical, por exemplo, cria chamadas com um montão de parâmetros separados por virgula (,).


Existem nessa chamada dois elementos fundamentais, o programa (ou script) que é informado antes da interrogação, http://www2.gxtechnical.com/portal/hgxpp001.aspx, e os parâmetros que consiste na lista após a interrogação, 15,1,400,O,S,0,PAG;CONC;2;22;D;33688;1;PAG;,

POST

A chamada que acontece pelo envio de um formulário, é denominada POST, e têm por característica principal a passagem de parâmetros de forma interna, ou seja, os valores não são facilmente perceptíveis ao usuário, é como se ficassem ocultos. Os dados são encapsulados (embutidos) no pacote enviado ao servidor.

Genexus

Genexus realiza ambos os processos de comunicação de forma automática. A primeira chamada a um programa sempre acontece sempre no formato GET e, na seqüência, após a manipulação de um formulário apresentado por este programa, ocorrem chamadas POST, tanto nos objetos Transação quanto WebPanel.
Então vamos de fato aos eventos ‘Start’ e ‘Refresh’, que ocorrem na abertura da Transação ou WebPanel. Qual a seqüência em que são executados e seus significados, em função do tipo de chamada no servidor?

Chamada GET
É realizada na primeira chamada a um programa, e nesse caso, ocorre uma seqüência simples de eventos até que a página seja completamente construída no servidor e enviada ao usuário.


Nesta chamada o servidor executa as ações programadas no evento Start, em seguida as que se encontram no Refresh e finalmente para cada linha da tabela referenciada na interface o evento Load.
Chamada POST
Esta é a chamada realizada quando o usuário provoca um evento na interface previamente apresentada, por exemplo, quando pressiona o botão Confirmar, ou quando seleciona uma linha com evento associado em um controle Grid.

Nessa chamada ocorrem duas ações antes do evento Refresh, sendo a primeira a leitura de todas as variáveis que se encontram no formulário, ou seja, os conteúdos fornecidos pelo usuário ficam conhecidos do programa, antes disso os valores considerados são os definidos em Start.  Em seguida, após conhecer os valores digitados, ocorre o Evento provocado pelo usuário, ou seja, se foi o botão Confirmar, ocorrem às ações que foram programadas no evento Enter, e assim por diante.

Finalmente, após essas duas ações terem sido consideradas inicia-se a carga da database, ou seja, o evento Refresh e Load.

Podemos entender então que até o evento Refresh ser executado, as ações anteriores diz respeito ao conhecimento dos valores default e informados pelo usuário, consistindo em uma fase de definições.  E ainda que antes do Refresh, não temos ainda a configuração exata que a interface deverá trabalhar, visto que os valores manipulados ainda não foram totalmente conhecidos. 

Portanto, o melhor lugar para se pensar na construção da interface gráfica é o evento Refresh, ao invés do evento Start.  O evento Load seria muito interessante também, mas não se esqueça que se houver alguma tabela base associada à interface, o evento se transforma em um for...each, ou seja, é executado mais de uma vez. 

Então agora fica mais compreensível a sequencia do parto: 

  1. Start possui apenas valores default.
  2. Para construir uma interface que tenha um comportamento condizente com a operação do usuário inicie a programação da mesma a partir do evento Refresh.
  3. Genexus não possui um evento posterior ao Load, isso poderia ser incluído na ferramenta, vamos incluir na lista do Genexus dos Sonhos!
  4. E por favor, quando o assunto tem mesmo a ver com nomes de criança, não se inspire na novela das 8, no jogador de futebol da moda, ou em nomes famosos, rs....
Conclusão

Bom, agora se voce de fato ficou interessado em assuntos relacionados a partos, inclusive leu esse post achando que eu ia falar a respeito de contrações, dilatação, cesariana, ..., recomendo um site na web: http://www.gestantes.net/ ou mesmo http://www.amigasdoparto.com.br/.