sexta-feira, 9 de setembro de 2011

Evitando o pior

Sempre que escrevemos um programa esperamos que nosso usuário tenha uma atitude imaculada, preferencialmente que ele siga exatamente a seqüência que definimos para a operação do programa, ou que, ‘extensivamente’ testamos com apenas um único e determinado valor, :)  E claro, nunca esperamos o pior, principalmente que ele saia dessa linha, pois vai que o programa responda errado.

O Genexus dá conta da questão da integridade no relacionamento entre as tabelas, mas e quanto ao conteúdo dos campos, será que devemos fazer algo a respeito? A resposta é sim, a menos que você permita que em seu sistema o usuário crie nomes do tipo @#!$Joao*&SdeOliveira#$%S1lv@.

Com certeza o mecanismo mais simples para detectar coisas estranhas em textos são as expressões regulares, tal como caracteres especiais onde não deveriam ser permitidos, e apesar da dificuldade de entendê-las, algumas mais simples podem ser muito úteis.

Impedindo Caracteres Estranhos
Por exemplo, para que o usuário não digite caracteres especiais em um determinado atributo, em uma transação, teríamos uma regra Error com a seguinte expressão.

Error('Caracteres inválidos no Usuario') if UsuarioNome.IsMatch("[,.@!#$ +=]");

Essa pequena expressão devolveria erro em caso do usuário utilizar algum dos caracteres listados entre [ ... ]

Aceitando Somente Letras e Números
A expressão a seguir somente permite a entrada de números e letras de A a Z.

Error('Caracteres inválidos) if not UsuarioNome.IsMatch("[0-9a-zA-Z]");

Para expressões como as apresentadas acima, é possível substituir a regra Error, pela propriedade Validation presente nos Atributos ou mesmo do próprio Domínios, o resto o Genexus faz.
 
Portanto, é muito recomendado gastar um tempinho ajustando os valores a serem aceitos, para não se ter surpresas no final, principalmente as desagradáveis.