Describe Evaluate passando Date para Function que recebe DateTime

O Evaluate, na forma dw_control.Describe(“Evaluate(‘<Expressão>’, ” + <NumeroDaLinha> + “)”), é muito utilizado como meio de executar código dinamicamente no PowerBuilder.Contudo, o Evaluate não usa o mesmo compilador do PowerBuilder para validar a sintaxe da expressão, a primeira evidência disso é que ele não apresenta mensagens amigáveis sobre erros na sintaxe, simplesmente indica linha e coluna onde há erro.

Outra evidência é que a gramática do Evaluate é um pouco diferente do PowerScript pois aceita expressões como “variável IN ()” ou “IF (then, else)” ou ainda “CASE WHEN … THEN …”. Até aqui tudo bem, nada de novo.

O problema começa quando funções globais que recebem como parâmetro de entrada um DateTime, se for passado uma variável Date, a função não rejeita a sintaxe (como ocorre no PowerScript), e pior, ele descarta o valor passado como Date e trata como “01/01/1900”, podendo portanto acarretar em cálculos errados.

Portanto, se for utilizar uma função global que recebe datas no Evaluate, assegure-se de que ela seja declarada recebendo tipos DateTime e que sejam passados valores DateTime nas chamadas.​

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, PowerBuilder and tagged , , , , , , , , , .