Describe Evaluate passando Date para Function que recebe DateTime

Describe Evaluate passando Date para Function que recebe DateTime

Overview

Bem-vindo ao mundo dinâmico do PowerBuilder, onde o Evaluate se destaca como uma ferramenta poderosa, mas com suas peculiaridades. Neste post, mergulhamos nas profundezas do Evaluate, explorando suas sutis diferenças com o PowerScript e revelando dicas cruciais para evitar armadilhas comuns, especialmente aquelas relacionadas ao tratamento de datas. Se você está em busca de conhecimento para aprimorar suas habilidades de codificação dinâmica e garantir a precisão nos seus projetos, você está no lugar certo!

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.​