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.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, PowerBuilder and tagged , , , , , , , , , .