Parte da mágica que o Appeon é converter parte do código em PowerScript para JavaScript. Sim, Javascript… JS… aquele que você utiliza em páginas Web. Isso é interessante do ponto de vista técnico, mas acaba herdando algumas pegadinhas. Veja abaixo o resultado de algumas operações realizadas com variáveis nulas no PowerBuilder e no Appeon.
Os exemplos abaixo foram testados utilizando PowerBuilder 10 e 12.6 em conjunto com o Appeon 2015 e 2016.
Para os exemplos abaixo, considere que as variáveis A e B são nulas.
ID | Operação | Resultado no PowerBuilder | Resultado no Appeon |
---|---|---|---|
1 | A + 1 | null | 1 |
2 | A + B | null | null |
3 | A * B | null | 0 (zero) |
4 | A = 1 (comparação) | null | false |
5 | A <> 1 | null | true |
6 | not (A = 1) | null | true |
7 | A = A (comparação) | null | true |
8 | A = B (comparação) | null | true |
9 | isNull(A=1) | true | false |
Como você pode perceber, existem diferenças significativas de comportamento, mas nem tudo está perdido.
Vamos supor que você esteja recebendo uma string por argumento e concatena ela com outra de instancia. Esta string pode ser nula, se for, você cancela o processamento. Então seria algo assim:
//a variável as_arg é do tipo string e é informada por argumento //a variável is_texto também é do tipo string, mas é de instancia. is_texto += as_arg if isNull(is_texto) then return //Se não é nulo, continua processamento. //....
No PowerBuilder, este tipo de arranjo vai funcionar normalmente, mas no Appeon, a expressão isNull(is_texto) vai retornar sempre nulo.
A forma mais simples que encontrei para contornar esta situação foi:
//a variável as_arg é do tipo string e é informada por argumento //a variável is_texto também é do tipo string, mas é de instancia. if isNull(as_arg) then return is_texto += as_arg //Se não é nulo, continua processamento. //....
No exemplo acima, a variável passada por argumento foi testada para verificar se era ou não nula e isso resolveu o problema.
O exemplo que passei foi ultra simplificado, mas foi com foco didático e a ideia é demonstrar que, apesar das diferenças de comportamento entre a aplicação sendo executada no “modo PowerBuilder” e no “modo Appeon”, a função isNull trabalha de forma consistente.
Referência:
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022