Versão 23
Melhorias
Admin
- Ao criar um usuário com uma política de autenticação SSPI (Active Directory) será gerado um
alerta para deixar claro para o administrador que a senha deve ser definida no sistema operacional
ou no Active Directory em vez do sistema. O mesmo alerta também ocorrerá na tentativa de alterar a
senha do usuário.
Engine
- As funções e constantes
Number.isInteger()
, Number.isSafeInteger()
, Number.MIN_SAFE_INTEGER
e Number.MAX_SAFE_INTEGER
passam a ser definidas via polyfill no runtime JavaScript padrão do
Engine, conforme especificação ECMAScript 2015.
- Foi criada a função
replaceAll
com
o objetivo de substituir as múltiplas ocorrências de uma substring, implementada de uma forma
compatível com os runtimes JavaScript Ije e V8.
- Foi criada a função
escapeRegExp
com o objetivo de substituir os caracteres especiais de expressões regulares por suas representações
literais por meio de sequências de escape.
- Foi criada a função
toFormattedString
com o objetivo de formatar valores numéricos e datas de forma equivalente aos métodos
Number.prototype.toString(format)
e Date.prototype.toString(format)
. A possibilidade do
formatar valores via toString
é um característica do runtime JavaScript Ije que não existe no
V8 e o uso dessa função passa a ser forma recomendada de realizar essa formatação. Ela também
é publicada como ngin.text.toFormattedString()
para uso em arquivos da Virtual File System
que não são estruturados como módulos JavaScript.
- As funções
Math.isZero()
e Math.decimalRound()
passam a também ser publicadas como
ngin.math.isZero()
e ngin.math.decimalRound()
, permitindo o seu uso no runtime V8.
- É possível agora configurar o Engine para usar pastas diferentes do padrão, para o armazenamento
de arquivos permanentes, logs, e temporários. Isso permite que pastas, como a pasta
dbs
que
armazena os bancos de dados locais do Engine, não necessitem estar no mesmo diretório dos arquivos
binários do Engine. Novas propriedades foram definidas no objeto
engine
para acessar a configuração corrente. É necessário que scripts que utilizem a propriedade
engine.applicationPath
ou repository['applicationPath']
para localizar a pasta onde arquivos
permanentes são armazenados, sejam revistos para ficarem compatíveis com futuros cenários de uso
do Engine onde as novas propriedades serão explicitamente definidas. Essa nova API de configuração é
classificada como experimental.
- Foram criadas as propriedades
engine.platform
e engine.arch
para auxiliar na identificação
de características da plataforma de execução do Engine. Mais detalhes na documentação de
referência do objeto
engine
.
- A variável global
globalThis
passa a ser publicada no runtime JavaScript Ije.
Desenvolvimento
- O script auxiliar de execução de testes unitários
runTests
passa a aceitar a
opção -v8
para indicar que deve ser utilizado o V8 como runtime JavaScript padrão durante a
execução dos testes.
Defeitos corrigidos
Admin
- O processo
Admin > Segurança > Grupos, papéis e usuários > Grupos e Papéis
não impedia que
usuário vinculasse um grupo ou papel a ele mesmo, ou vinculasse um grupo ou papel de um produto do
sistema, como o Engine, a um produto que não fosse uma dependência dele, como o Erp Core.
Desenvolvimento
- O processo
Desenvolvimento > Atualização > Atualizar Sistema
não criava corretamente
campos combo
com valores do tipo DBKey
.
Engine
- A alteração do usuário corrente via
session.login
na guia iDBC sql da IDE estava sendo
persistida nas execuções de scripts seguintes.
- A autenticação de um usuário poderia falhar caso houvesse uma política com autenticação SSPI
(Active Directory) configurada, mas não associada diretamente ao usuário ou um dos seus grupos.
- O campo “Prioridade” das políticas de segurança de usuários e redes poderia ser ignorado caso
o usuário tivesse mais de uma política de segurança configurada nos seus grupos.
- Ao atribuir objetos do tipo
ResourceString
em um campo de DataSet
ocorria a gravação da
string
“[object ResourceString]” em vez do conteúdo da ResourceString
.
- Ao informar um parâmetro do tipo
DKey
em uma mensagem de log formatada ocorria o erro
“format invalid or incompatible with argument”.
Web Framework
- Campos com a propriedade
Field.prototype.height
definida estavam sendo exibidos com uma linha
a mais do que o configurado no navegador Firefox.
- A abertura do menu de navegação sempre criava uma nova árvore de elementos DOM em vez de
reaproveitar a existente caso houvesse mais de um menu configurado. Esse comportamento aumentava
o consumo de memória do navegador desnecessariamente.
- A propriedade
Grid.prototype.userKeyToValidatePermissions
configurada
em uma grade mestre não era considerada pelas detalhes.
Outras alterações
Engine
- O método
Security.prototype.getUserAndGroupKeys
passa a ignorar as chaves dos grupos que não existem no cache local. O motivo dessa alteração é
garantir que o usuário possa logar no sistema mesmo que haja uma falha de integridade na
configuração dos grupos, permitindo assim que ele possa corrigir o problema. Os erros de integridade
passarão a ser registrados apenas nos arquivos de log.
- O usuário administrator passa a sempre utilizar a política de autenticação padrão,
onde as senhas de usuários são gerenciadas pelo Engine, mesmo que haja uma política de segurança
com autenticação SSPI (Active Directory) configurada. Esse comportamento é necessário para
garantir que o usuário administrator possa ser utilizado para corrigir uma eventual configuração
errada na política de autenticação.
- A alteração ou expiração da senha de um usuário passa a gerar um erro caso esteja sendo
utilizada uma política de autenticação SSPI (Active Directory). O objetivo dessa alteração é
tornar claro para o administrador que a alteração é inócua, pois a autenticação da senha será
realizada com base nas credenciais gerenciadas pelo sistema operacional ou Active Directory.
- No runtime V8, a leitura de campos inteiros por meio de propriedades do
DataSet
e DBKey
passa a retornar o primitivo number
em vez de instâncias de DBKey
. A abordagem de sempre
retornar um DBKey
tinha o objetivo de garantir que a leitura encadeada de propriedades a
partir de chaves (ds.classe.mae.nome
) funcionaria sem um esforço maior de revisão de códigos. No
entanto, essa abordagem introduz outras incompatibilidades, pois o tipo DBKey
era
retornado para campos que eram inteiros e não eram chaves, e esse tipo opera de forma diferente do
number
em condições lógicas. Essas diferenças de comportamento poderiam alterar
silenciosamente o funcionamento dos códigos e optou-se então por retornar um tipo que falhe de forma
mais clara caso seja necessária uma revisão de código para que ele funcione no V8. Nesse runtime, os
métodos
DataSet.prototype.val
e suas variações passam ser a forma recomenda de leitura encadeada de campos.
Web Framework
- Ao logar no Web Framework com o navegador Internet Explorer, o usuário será alertado que esse
navegador não é mais suportado e será direcionado para uma página com sugestões de download dos
navegadores suportados.
Última atualização em 13 Oct 2020