Archive for August, 2008

Saudades do velho GeneXus? SIM, pero no mucho.

Thursday, August 28th, 2008

A primeira vez que vi GeneXus na minha vida, foi quando fui convidado a participar na revisão do primeiro Tutorial de GeneXus na versão Windows 5.01.
Para mim não existia muita diferença no ambiente, porque estava cursando ainda a faculdade, e tinha feitos alguns programas em Visual C++. Depois disso fiz o curso de GeneXus e comecei a trabalhar na Administração Nacional de Correios de Uruguai e na empresa HEXA, sempre com a versão Windows.
Certo dia recebi uma proposta da empresa Equital, a qual tinha um sistema de Gerenciamento de Abonados de TVCable muito completo, e me pareceu fantástica a ideia de trabalhar ai.
No primeiro dia, O SUSTO!, tela azul no fundo quando cliquei no atalho para entrar a GeneXus… não, não, não foi problema de Windows, a versão de GeneXus era a 3.3 para MS-DOS!
Vou lhes contar, que aprendi muito rápido e logo me adaptei, era muito fácil, para fazer workpanels, não tinha que estar acomodando os campos com o mouse, eles caiam um do lado do outro e com a tecla enter conseguia baixar o campo e deixar todos alinhados.
Relatórios, nossa, uma maravilha, um campo do lado do outro, e ele já saia perfeito. Zero, preocupação. Definição de variáveis, era simples usar a regra “define” e copiar e colar para qualquer lugar.
NOSSA que saudades! Era tão simples!
Depois disso vivi todas as mutações de GeneXus, passei por todas as versões, números e nomes que podem parecer estranho para quem não é uruguaio, lembram de Solis, Ceibo….
Bem e no final meus amigos, chegou a Rocha, associada ao estado Rocha de Uruguai, mas para mim, sempre a associei com Pedro Virgilio Rocha (da cidade de Salto, como eu, jogador de Peñarol, São Paulo, Palmeiras e Coritiba) conhecido como o “Verdugo”.
E eu acho que realmente é a melhor associação, e me desculpem os rochenses, em especial Eugenio Garcia da ARTech.
A versão GeneXus X é o Verdugo das anteriores. Gente, na primeira impressão você não entende nada, cadê os objetos?, como faço para usar minhas velhas funcionalidades… O CHOQUE realmente é muito grande, o mesmo sentimento que tive quando passei da versão WIN para a versão DOS, você na primeira impressão sente que está ficando velho, que esse mundo já não é seu, e sente que não vai se adaptar, nem falar quando está escrevendo um procedimento e da aquele famoso “Control + A” para inserir um atributo e a tela fica toda azul, porque você na realidade agora com isso, você faz um “Select All”, são muitas coisas!
Mas… a versão GeneXus X tem centos de novas funcionalidades, e objetos novos, que ajudam e MUITO!.
DataProvider, DataSelector, o novo diagrama de tabelas, muito útil ter os campos no diagrama, antes eu tinha que fazer isso não mão, o novo tratamento das imagens, web panels em modal dialog (a solução para tanto código javascript), por fim tiraram o objeto relatório que todos concordávamos que poderia ser um procedure, e agora o novo objeto Query no preview do U2, que provavelmente vai causar revolução, tal vez seja parecido ao nosso gerador de relatórios que esperamos a muito tempo, ou pelo menos vai ajudar e muito.
Bem não vou falar o que realmente você vai descobrir quando usar, mas vale a pena.
GeneXus X, é SHOW DE BOLA!, eu recomendo.

Fabricio De los Santos
Gerência de Projetos – Consultoria GeneXus –
ERP – Sistemas de Missão Crítica – Bancos de Dados.

Veja meus blogs em:
www.fabriciodelossantos.com

ORA-12899: VALUE TOO LARGE FOR COLUMN

Wednesday, August 27th, 2008

Tiempo atrás había postado un link que resolvía este problema bajo algunas circunstancias.
Tiempo después me encontré con el mismo problema en una máquina con otro sistema operativo, y tuve que aplicar otra solución y en ese momento no publiqué como lo solucioné. A pedido de Carlos, amigo visitante de mi sitio, quien me preguntó por email si existia alguna otra forma de solucionar este problema, acudí a mis apuntes y estoy dejando aquí 2 pasos que solucionaron mi problema particular en aquella época.

Básicamente este problema está relacionado con la conversión de caracteres de oracle, de un banco para otro. Léase NLS_CHARACTERSET.
Por tal motivo pido atención a ver cual es su problema en particular, para saber cual procedimiento aplicar, es por eso que dejo links relacionados, que me ayudaron a encontrar la solución en aquel momento.

Problema 1

c:\sqlplus /nolog
conn / as sysdba;

select parameter,value from nls_session_parameters where parameter=’NLS_LENGTH_SEMANTICS’;
alter system set nls_length_semantics=CHAR scope=both;

shutdown e startup para verificar.

Problema 2

c:\sqlplus /nolog
conn / as sysdba;
shutdown;
startup restrict;
Alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup open;

A continuación links de apoyo, que me ayudaron mucho y les estoy muy agradecido.

http://www.oracle.com/technology/oramag/oracle/03-mar/o23sql.html
http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch2charset.htm#g1015066
http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/applocaledata.htm#i635016
http://users.telenet.be/oraguy.be/Characterset1.htm
http://www.oracle-base.com/articles/10g/CharacterSetMigration.php

Usted elija la opción y el character set que corresponda.

Fabricio De los Santos
Gerencia de Proyectos –
Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com

Erro de Oracle, reorganizando um atributo Caracter para um tamanho menor com GeneXus X

Monday, August 25th, 2008

Simplesmente tinha um campo Character(40) onde o tamanho era muito grande para o string a ser guardado nele.
A decisão foi de mudar para Character(9).
Na hora de reorganizar tive um erro que não podia reorganizar para um campo menor porque os dados não entravam na coluna.
Olhando os dados nenhum deles era maior a 9.
Existe uma diferença no banco de dados no tratamento de atributos CHAR e VarChar, espacio reservado, etc, para o tipo Varchar é menor.
Solução sem entrar no detalhe de porque isso estava acontecendo (ja que depois não consegui reproduzir novamente o erro), simplesmente passei o campo CHARACTER(40) para VARCHAR(40), e depois para VARCHAR(9), para por ultimo passar para CHAR(9) e não deu problemas.
Conclusão: O erro não sei porque aconteceu, mas o que sim é seguro que o length do string antes da conversão, não era maior que 9, já que após esses 3 passos CHAR -> VARCHAR -> CHAR, a tabela ficou como desejava sem problemas.

Não reportei este caso porque não consegui reproduzir, então acho que é um workaround válido se volta a acontecer.

Fabricio De los Santos
Gerência de Projetos – Consultoria GeneXus –
ERP – Sistemas de Missão Crítica – Bancos de Dados.

Veja meus blogs em:
www.fabriciodelossantos.com

Renomear um atributo em GeneXus X

Thursday, August 21st, 2008

Quando queremos renomear um atributo em GeneXus X, dependendo da ordem ou da complexidade do que queremos fazer, podemos ter algumas dores de cabeça, por exemplo se estamos falando de um atributo foreign key.

Para evitar alguns problemas, o primeiro que temos que fazer é tirar a constraint de null nas trns onde sejam referenciados. Após isso, em Workwith Atributes, com F4 para cada atributo podemos renomear ele.
Logo F5 para gerar o impacto da base de dados.
Uma vez executada a reorganização novamente em GeneXus colocamos a propriedade para não permitir o atributo nulo.

Fabricio De los Santos
Gerência de Projetos – Consultoria GeneXus –
ERP – Sistemas de Missão Crítica – Bancos de Dados.

Veja meus blogs em:
www.fabriciodelossantos.com

ORA-01400 GeneXus X e Oracle

Wednesday, August 20th, 2008

Este erro está prometido para ser corrigido em GeneXus logo em breve.
O problema é porque criamos uma tabela com uma chave primaria numérica.
E depois decidimos que ela seja autonumérica.
Então fomos nas propriedades do atributo e marcamos ele para autonumber = true.
Executamos a reorganização e tudo parece certo.
Mas na hora de executar, nos encontramos com esse problema.
O que aconteceu e que GeneXus não criou o trigger correspondente, e sim a sequência.

Bem, a solução é entrar no GeneXus novamente e marcar esse atributo para autonumber = false.

Executar F5 e GeneXus vai mostrar a sequência e o trigger a ser apagado.

Só que não vamos a apagar nada, vamos pegar a sentencia do trigger por exemplo:

DROP TRIGGER AN$ZZZNossoAtributo

(tem que marcar e com botão direito copiar, senão não vai)

para criar a mão o trigger no oracle da seguinte forma.

create or replace TRIGGER AN$ZZZNossoAtributo BEFORE INSERT ON NossaTabela FOR EACH ROW BEGIN SELECT NossoAtributo.NEXTVAL INTO :new.NossoAtributo FROM DUAL; END;

ZZZ é o número interno que identifica o atributo en GeneXus.

Listo, agora voltamos a GeneXus, cancelamos a reorganização e colocamos o atributo novamente com a propriedade de autonumber = true.

Fabricio De los Santos
Gerência de Projetos – Consultoria GeneXus –
ERP – Sistemas de Missão Crítica – Bancos de Dados.

Veja meus blogs em:
www.fabriciodelossantos.com