sexta-feira, 7 de setembro de 2012

Certificação Genexus

Neste post vamos entender um pouco sobre como funciona as Certificações para Analista Genexus, onde fazer, quanto custa e a estrutura das provas. Além disso, a partir de hoje irei postar questões semelhantes às questões que são aplicadas nas provas de certificação, e um breve comentário sobre a resposta correta.

Então.., como estas provas são aplicadas?

Todas as provas para Analista são objetivas e existe uma prova específica para cada nível. O percentual mínimo de aprovação é de 70% para qualquer nível e o tempo para a realização da prova é de cerca de 180 minutos. O blog possui um tópico específico sobre a experiência de um profissional na realização destas provas de certificação. Para acessá-lo clique aqui.

Qual destas certificações é a ideal para mim?

Atualmente existem 5 certificações disponíveis, são elas:
  1. ANALISTA GENEXUS JUNIOR
    1. descrição: certificação inicial, menor nível de exigência;
    2. exame: online com perguntas do tipo múltipla escolha e certo/errado. Poderá ser feito no lugar físico que o postulante desejar;
    3. custo: R$ 180,00;
    4. inscrição: poderá ser realizada através deste link 
  2. ANALISTA GENEXUS PLENO
    1. descrição: certificação intermediária, requer bons níveis de conhecimento;
    2. exame: online com perguntas do tipo múltipla escolha e certo/errado. Será realizado nos centros de distribuição ou centros de capacitação que a Artech determinar;
    3. custo: R$ 470,00;
    4. inscrição: é necessário enviar email para apieroni@genexus.com ou training@genexus.com, com nome, cidade, nome da empresa e certificação desejada.
  3. ANALISTA GENEXUS SÊNIOR
    1. descrição: certificação avançada, recomendada para aqueles analistas que possuem ótimos níveis de conhecimento;
    2. exame: online com perguntas do tipo múltipla escolha e certo/errado. Será realizado nos centros de distribuição ou centros de capacitação que a Artech determinar;
    3. custo: R$ 700,00
    4. inscrição: é necessário enviar email para apieroni@genexus.com ou training@genexus.com, com nome, cidade, nome da empresa e certificação desejada.
  4. INSTRUTOR GENEXUS 
    1. pré-requisito: certificação Analista Genexus Sênior;
    2. descrição: certificação avançada, recomendada para aqueles que possuem ótimos níveis de conhecimento com perfil de docente. Além de possuir uma teoria clara é necessário saber transmiti-la aos alunos de forma coesa. Aqueles que possuem esta certificação podem ministrar cursos em qualquer centro de capacitação da Artech;
    3. exame: avaliação oral e presencial de aproximadamente 1 hora de duração;
    4. custo: R$ a verificar
    5. inscrição: é necessário enviar email para apieroni@genexus.com ou training@genexus.com, com nome, cidade, nome da empresa e certificação desejada.
  5. DOCENTE GENEXUS 
    1. descrição: certificação para docentes de universidades que são parceiras da Artech e habilitadas a ministrar cursos Genexus dentro da universidade;
    2. exame: online com perguntas do tipo múltipla escolha e certo/errado. Será realizado nos centros de distribuição ou centros de capacitação que a Artech determinar;
    3. custo: R$ a verificar
    4. inscrição: é necessário enviar email para apieroni@genexus.com ou training@genexus.com, com nome, cidade, nome da empresa e certificação desejada.
Obs.: Os valores das certificações foram orçados junto a Artech na data de 11/09/2012.

EXEMPLO DE QUESTÃO
1. Considere uma aplicação Genexus para uma montadora de automóveis. São efetuadas montagens de distintas marcas de carros. Um carro possui uma marca, porém pode haver diversos carros com a mesma marca. Determine o desenho das transações que considera correto para representar esta realidade.

Curso Genexus

Resposta: B - única alternativa que contém  relacionamento de N-1 entre carro e marca.
----------------------------------------------------------------------------------------------------------

Siga o restante do simulado através dos links:
      1. Certificação Genexus - Simulado Parte II
      2. Certificação Genexus - Simulado Parte III
      3. Certificação Genexus - Simulado Parte IV
      4. Certificação Genexus - Simulado Parte V

Deixe um comentário com o seu email e posso repassar o documento pdf que contém esta e mais 16 questões!


domingo, 2 de setembro de 2012

Genexus SDT - Criação de Log da Aplicação

Genexus Curso
Bem-vindos a mais um tutorial sobre SDTs no Genexus Developers Blog! Neste tutorial iremos começar a criar um Log para as nossas aplicações a partir de objetos SDTs e Data Providers. Neste Log iremos gravar a inserção/alteração/exclusão realizada na sua respectiva Data/Hora e por qual Usuário e IP.

A Parte I - criação deste tipo de dado, e a Parte II - inserção de valores nos darão a base para esta continuidade.

Antes de começarmos precisamos entender o que é e para que serve este objeto Data Provider. Este objeto não é capaz de realizar modificações na nossa base de dados, ele serve resumidamente para processar dados de forma estruturada (SDT), ou seja, povoar a nossa variável SDT sem precisarmos de todas aqueles comandos (for each, Add, new()).

Neste tutorial irei realizar o seguinte:
  1. Explicar a criação do Objeto Data Provider com case em um SDT;
  2. Explicar os atributos necessários para gravar um histórico;
  3. Explicar a criação da árvore de eventos necessário para a gravação dos logs. 
Através destes conhecimentos, será possível realizar Logs de históricos de dados para as suas aplicações de maneira bem simples.

OK vamos ao trabalho..

Primeiro Passo - Criação das Transações (Cliente, Log)

Para a gravação dos Logs irei utilizar a seguinte estrutura:
Genexus Transação

Onde:
  • Id = Numeric(4)  - AutoIncrement;
  • IP = Character(15);
  • Atividade = Character(1) - Enum Values: C (Cliente);
  • Operação = Character(3) - Enum Values: INS (Inserção); UPD (Alteração); DLT (Exclusão);
  • Historico = LongVarChar;
  • UsuarioLogin = Usuário que realizou a operação.

Já a transação de exemplo terá a seguinte estrutura:
Genexus Curso

Segundo Passo - Criação do SDT e Data Provider (Cliente, Log)

Para cada transação onde será aplicado o o log será necessário criar 1 objeto SDT e 1 objeto Data Provider.

Logo para a Transação Cliente, criamos o objeto SDT_Cliente e arrastamos a transação para dentro, entaão este objeto terá a seguinte estrutura:
Genexus Curso

Após, criamos o objeto DP_Cliente (Data Provider), e arrastamos para dentro de Source o SDT que criamos (SDT_Cliente). Após será necessário incluir a condição where, onde as chaves primárias da transação serão iguais as suas variáveis recebidas como parâmetro:

parm(in:&ClienteCod);
SourceRules

Terceiro Passo - Criação da Procedure de Gravação do Log

Assim que os passos anteriores forem efetuados, podemos criar a nossa Procedure que irá realizar a gravação dos logs. Esta procedure irá receber os parâmetros:
parm(inout:&Atividade, in:&Operacao, in:&LogHistorico, in:&LogAtividadeId);

E o seguinte código (source):

//=====Captura o Usuário que efetuou a operação=====
&UsuarioLogin.FromString(&WebSession.Get('UsuarioLogin'))

//=====Captura o IP=====
&LogIP = RemoteAddr()

//=====Insere novo Log=====
new
 LogDataHora = ServerNow()
 LogHistorico = &LogHistorico 
 LogAtividade = &Atividade
 LogOperacao = &Operacao
 UsuarioLogin = &UsuarioLogin
 LogIp = &LogIP
 LogAtividadeId = &LogAtividadeId
endnew

Quarto Passo - Inserção na Transação das Regras de Inserção

Na transação Cliente, deve adicionar o seguinte código em "Rules":
//=====Adiciona o Tipo de Atividade=====
&Atividade = Atividade.Cliente;

/*
Gravação dos dados no SDT
Se inserção: grava os campos antes do COMMIT
Se alteração ou exclusão: grava os campos antes de se realizar alguma alteração
*/
&SDT_Cliente = DP_Cliente.Udp(ClienteCod) 
 if insert on beforecomplete;
&SDT_Cliente = DP_Cliente.Udp(ClienteCod) 
 if delete or update;
 
/*
Chamar a Procedure de inserção do Log
A Procedure é chamada assim que se realizar o COMMIT
Se alteração: só irá chamar se ocorrer alguma modificação
*/
&LogAtividadeId = ClienteCod.ToString.Trim();

InserirLog.Call(&Atividade, &Mode, &SDT_Cliente.ToXml(), &LogAtividadeId) 
 if insert or delete on aftercomplete;
InserirLog.Call(&Atividade, &Mode, &SDT_Cliente.ToXml(), &LogAtividadeId) 
 if update and Modified() on aftercomplete;

Agora é só homologarmos! Para testar podemos inserir, alterar ou excluir registros através da transação Cliente, teremos um resultado semelhante a este:
Genexus Curso

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

segunda-feira, 20 de agosto de 2012

Download de Arquivos - Web

Bom dia pessoal, este post é bem simples, iremos ver como podemos possibilitar a opção de "Salvar como" arquivos gerados por nossa aplicação para o usuário final.
Utilizando este método podemos controlar o tipo de documento que será salvo e o nome padrão que irá aparecer para o usuário. Dessa forma podemos gerar Logs Diários das alterações do Banco de Dados em .txt passando a Data como Nome Padrão.
Em alguns casos necessitamos gerar documentos, por exemplo .txt, em nossa aplicação web para que o usuário possa exportar este arquivo gerado. Porém se utilizarmos uma variável do tipo blob, nossas ações estarão limitadas aos métodos default do Genexus.
Assim, ao realizar a soliticação a opção de Salvar irá aparecer:
Genexus Blog

Neste exemplo adicionei um botão à minha WebPanel, com o Evento "Salvar", logo quando este botão for clicado o seguinte evento irá ocorrer:

Event 'Salvar'
 //=====Extensao do Arquivo=====
 &Extensao = 'txt'
 do case
  case &Extensao = 'txt'
   &contenttype = 'text/plain'
 endcase
 
 //=====Nome a ser gerado=====
 &Date = ServerDate()
 &Nome = &Date.Year().ToString().Trim()+PadL(&Date.Month().ToString().Trim(),2,'0')+
 PadL(&Date.Day().ToString().Trim(),2,'0')+'.txt'
 
 //=====Source do Arquivo=====
 &Arquivo = 'Destino\Teste.txt'
 
 RealizaDownload.Call(&contenttype,&Arquivo,&Nome)
EndEvent

No código acima, uma Procedure (RealizaDownload) é chamada passando 3 parâmetros:
  1. contentType (tipo do documento) - aqui você encontra os tipos existentes (xls/doc/etc);
  2. Arquivo (Caminho onde o arquivo se encontra);
  3. Nome(Nome padrão do Documento a ser Salvo).
Já  procedure terá o seguinte código:

Rules:
parm(in:&contenttype,in:&filepath,in:&DocumentoNome); 

Events:
&HttpResponse.AddHeader('Content-Type', &contenttype)
&HttpResponse.AddHeader('Content-Disposition',"attachment;filename="+&DocumentoNome)
&HttpResponse.AddFile(&filepath)

Properties:
Main program: true
Call protocol: Http

segunda-feira, 6 de agosto de 2012

Genexus SDT - Parte III

Nesta terceira parte sobre o assunto Genexus SDTs, iremos aprender um pouco sobre como apresentar os SDTs em Web Panels.

A Parte I - criação deste tipo de dado, e a Parte II - inserção de valores nos darão a base para esta continuidade.

Porém para ampliar a nossa percepção de utilidade deste tipo de dado (SDT), irei utilizar um novo exemplo, ao fim do nosso exercício iremos ter um formulário semelhante a este:

Genexus SDT


Primeiramente iremos criar o Objeto SDT, que será o nosso Grid da tela, semelhante a este:
Genexus X
Após iremos inserir as variáveis que iremos utilizar para desevolver este formulário:
Genexus Variables
OK, após adicionar as nossas variáveis, iremos criar a tela, neste exemplo foram inseridos 3 botões, Retornar para retornar para a página anterior, Avançar para avançar para a próxima página do formulário e Adicionar Linha para adicionarmos uma nova linha ao nosso Grid SDT.

Para inserirmos as variáveis SDTs na tela, na Toolbox clicamos em "Attribute/Variables" e arrastamos até a célula que desejamos. Ao arrastar, o Genexus irá abrir uma tela com os atributos e variáveis disponíveis, neste caso clicamos sobre a variável "SDT_Projeto", a variável principal do SDT criado.

Ao clicar sobre esta variável irá abrir a seguinte tela:
Os itens em azuis são aqueles que queremos inserir, clicamos em todos, o check box "ReadOnly" só iremos marcar quando desejamos deixar as variáveis como desabilitadas, e o checkbox "Free Style Grid" só será marcado caso desejamos substituir o Grid em linha pelo Grid Free Style.

Ao clicar em OK, o SDT será inserido na nossa WebPanel, agora podemos controlar a exclusão e adição de linhas ao nosso grid apresentado.

Para inserir o botão de excluir linha (primeiro a esquerda na imagem), clicamos com o botão direito sobre o Grid e após em "Columns..". Com a tela Arrange Columns aparecendo, iremos selecionar a opção "Add", e selecionar a nossa variável "excluir" (Bitmap). Após a adição da variável ao Grid, precisamos escrever os seguintes códigos:

Inserção de Imagem, Tooltip e um comando javascript de confirmação (este comando será executado ao clicar sobre a variável):

No evento Start:

Genexus SDT
Inserção do código de exclusão de linha.
Genexus X

Para finalizar precisamos inserir o código para o Grid iniciar default contendo uma linha, e a opção de adicionar novas.

Observação: os objetos WebPanels não recebem SDTs como parâmetro, para isto é necessário utilizar o método WebSession através dos comandos ToXML() e FromXML(), ou ToJson() e FromJson().

No evento Start:
Genexus X

Inserir nova linha ao Grid:


Para finalizar, procurem sempre salvar este SDT em sessões (WebSession) ao clicar nos botões "Avançar" e "Retornar".