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