segunda-feira, 27 de agosto de 2012

Genexus e Jquery

Genexus e Jquery é uma poderosa combinação capaz de expandir as nossas idéias ao criar novos projetos. Esta biblioteca Javascript, lançada em 2006 possui código aberto e é capaz de simplificar a utilização do Javascript. Cada vez mais os principais portais brasileiros como Terra, Globo e Uol, vêm utilizando do Jquery para aumentar a interação com o usuário.

Em relação ao Genexus, podemos perceber esta influência ao visualizar os User Controls atualmente disponíveis. A grande maioria deles utiliza o Jquery, e alguns inclusive são plugins Jquery sem nenhuma alteração adaptados para serem utilizados como user controls.


Caso o leitor se interesse pelo assunto, poderá aprender um pouco através de apostilas, slides e vídeos distribuídos na internet. Porém como pré-requisitos deve-se conhecer lógica de programação e o próprio Javascript

Recomendo a leitura dos seguintes links: 
  1. http://www.slideshare.net/1Marc/jquery-essentials
  2. http://www.slideshare.net/simon/learning-jquery-in-30-minutes
  3. http://www.youtube.com/watch?v=_iRIPJHrdXg&feature=fvst
Neste post irei demonstrar uma simples utilização do Jquery em um formulário desenvolvido através do Genexus. Neste simples exemplo os "inputs" disponíveis em tela irão alterar o seu estilo quando focados.

Para isto irei utilizar o plugin disponível em http://buildinternet.com/live/jqueryform/jqueryform1.php.

O primeiro passo para a utilização da biblioteca Jquery é adicionar um link para a biblioteca que contém os métodos ou funções.

No evento Start inserimos:
Form.HeaderRawHTML = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.js"></script>'

Após isto será criado o documento formulario.css que contém as definições dos estilos serem inseridos. Este documento será criado na pasta web da aplicação e irá conter somente o código:
<style type="text/css">
    #status{
        width:50%;
        padding:10px;
        height:42px;
        outline:none;
    }
    .focusField{
        border:solid 2px #73A6FF;
        background:#EFF5FF;
        color:#000;
    }
    .idleField{
        background:#EEE;
        color: #6F6F6F;
        border: solid 2px #DFDFDF;
    }        
</style>

Assim como a biblioteca Jquery, este documento .css será inserido na aplicação através do código:
Form.HeaderRawHTML += '<link rel="stylesheet" type="text/css" href="formulario.css"/>'

Após, o código Jquery responsável por realizar a troca dos estilos é inserido no Evento Start, abaixo das adições anteriores:
&Item = "input[type='text']"
Form.HeaderRawHTML += '<script type="text/javascript">'
Form.HeaderRawHTML += '$(document).ready(function() {'
Form.HeaderRawHTML += '$("'+&Item.Trim()+'").addClass("idleField");'
Form.HeaderRawHTML += '$("'+&Item.Trim()+'").focus(function() {'
Form.HeaderRawHTML += '$(this).removeClass("idleField").addClass("focusField");'
Form.HeaderRawHTML += 'if (this.value == this.defaultValue){'
Form.HeaderRawHTML += 'this.value = "";'
Form.HeaderRawHTML += '}'
Form.HeaderRawHTML += 'if(this.value != this.defaultValue){'
Form.HeaderRawHTML += 'this.select();'
Form.HeaderRawHTML += '}'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '$("'+&Item.Trim()+'").blur(function() {'
Form.HeaderRawHTML += '$(this).removeClass("focusField").addClass("idleField");'
Form.HeaderRawHTML += 'if ($.trim(this.value) == ""){'
Form.HeaderRawHTML += 'this.value = (this.defaultValue ? this.defaultValue : "");'
Form.HeaderRawHTML += '}'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '});'
Form.HeaderRawHTML += '</script>'

Ao compilar a aplicação iremos ter o seguinte resultado (o campo em foco irá conter outro estilo):

Genexus Jquery

5 comentários:

  1. Eduardo, não funcionou aqui...

    Deu erro no evento assim :

    error: Unknown function 'Trim' (Events, Line: 19, Char: 36#53eddb0a-1433-4d4d-9cdc-eaa63949a66d)
    error: Unknown function 'Trim' (Events, Line: 20, Char: 36#d7c66cff-3af2-4884-87b8-5ad5e9e1ed7b)
    error: Unknown function 'Trim' (Events, Line: 29, Char: 36#af82df00-6f9c-4c09-9d6e-94e29c3a8f24)

    ResponderExcluir
    Respostas
    1. Boa noite William, adicione a variável &Item como Varchar(40). Provavelmente deva ser isto. Caso o problema continue pode me enviar o código para o email genexus@outlook.com, que lhe auxilío. Abraço

      Excluir
  2. Eduardo, funcionou quase perfeitamente.

    Só que no meu form (transação), quando o controle está com o FOCO, ele não aparece o texto digitado, quando sai o foco, o texto fica cinza.

    O que posso fazer para resolver isso?

    Abraços e muito obrigado

    ResponderExcluir
    Respostas
    1. William, tentei reproduzir a mesma situação e não consegui.

      Provavelmente seja apenas a cor do texto. Você poderá mudar a cor alterando no arquivo "formulario.css", descrito no post, as linhas "color". Esta opção define a cor dos textos quando, estão com o foco (.focusField) e sem o foco (.idleField).

      Por exemplo. Atualmente a classe .focusField contém a propriedade color com o valor "#000", altere para "red" ou "green" para testar.

      Abraço

      Excluir
  3. Olá. Funcionou perfeitamente. Mas gostaria de saber como faço para que funcione em tipos combobox.

    ResponderExcluir