Versão 42
Novidades
Acesso à árvore da UFS na extensão do VS Code
A extensão do VS Code passa a contar com a opção de abrir a árvore da UFS no explorador de arquivos.
Mais detalhes em https://nginstack.com/pt/docs/vscode/ufs-tree/.
Melhorias
Engine
- Foram criados os parâmetros de comando de linha
--enableProfiler
e--enableAutoProfiler
com o objetivo de desabilitar o profiler na configuração padrão ou com instrumentação automática. O Engine também passa a permitir essa configuração por meio da variável de ambienteNGIN_PROFILER
. Mais detalhes disponíveis no manual Configuração do Engine. - Foi criada a propriedade
Profiler.prototype.enabled
com o objetivo de identificar se o profiler do Engine está ativo. - Foi otimizado o método
DBCache.prototype.refresh
quando informado o parâmetrowait
com o valortrue
. O tempo de execução foi reduzido em aproximadamente 40% quando não há alterações significativas a serem sincronizadas. - A classe
HtmlToPdf
passa a permitir a definição do tempo de timeout, em milissegundos, do processo de impressão. Por padrão será considerado um tempo de espera de 3 minutos. - O identificador único de uma instância do Engine passa a ser renovado automaticamente caso seja detectado que o diretório de instalação do Engine tenha sido indevidamente duplicado.
- Os recursos temporários utilizados pelos scripts executados remotamente em um Engine passam a ser descartados imediatamente após a execução do script.
- Foram criadas as classes
SHA256
eSHA512
com o objetivo de gerar hashes criptograficamente seguros. Diferentemente das classesMD5
eSHA1
, a representação hexadecimal do hash retornada pelo métodohexDigest
das novas classes passa a ser normalizada em caixa baixa, mesma convenção empregada pela maioria das ferramentas de geração de hash. É recomendado que o uso do métodohexDigest
das classesMD5
eSHA1
seja revisto para aplicar as funçõestoLowerCase()
outoUpperCase()
no resultado gerado, tornando explícito o formato desejado. - Foram criadas as colunas “iSize” e “iContentSHA256” nas tabelas “iVfs” e “iLob” com o objetivo
de armazenar o tamanho e o hash SHA-256 dos arquivos. Essas colunas serão atualizadas pelas classes
VirtualFileSystem
eLobStorage
sob demanda, na criação de novos arquivos e na modificação dos existentes.
Extensão VS Code
- Passa a ser possível configurar por meio da interface do VS Code em quais colunas devem ser
abertas as ferramentas de execução de código, visualização de chave e visualização do plano de
execução. As opções são: coluna ativa (active) e coluna ao lado (beside). Também é possível
alterar essa configuração para o executor de códigos diretamente pelo comando
Engine DevTools: Change Code Runner Column Config
. O VS Code também conta com a configuração “Workbench> Editor: Open Side By Side Direction”, onde o usuário pode configurar aberturas de colunas lado a lado (beside) para serem abertas embaixo (por padrão, são abertas à direita). Mais detalhes aqui.
Defeitos corrigidos
Admin
- A opção “Registra alteração de referência na iLog” do processo “Admin > Ferramentas para chaves > Substituir referências” era aplicada apenas para as tabelas que fazem parte do cache local. Para as demais tabelas, era gerado apenas um registro de log simplificado indicando o comando de alteração enviado para o SGBD, sem detalhes dos registros alterados. Agora, quando essa opção está ativa, passa a ser gerado o log completo das alterações de todas as tabelas modificadas.
Desenvolvimento
- O relatório com o resultado da atualização do sistema poderia apresentar uma quantidade de alterações na base de destino superior a de fato realizada.
- O processo “Desenvolvimento > Base de dados > Criar cópia” falhava com o erro “Engine peer request timeout error” caso a criação da cópia demorasse mais que 16 horas. Apesar do erro, o arquivo com a cópia da base de dados era gravado com sucesso no diretório informado no servidor.
- O script de atualização do sistema agendado no Scheduler falhava caso não fosse informada a lista de produtos a serem atualizados.
- Durante a execução do processo “Desenvolvimento > Base de dados > Migração > Criar cópia” ocorria a criação de arquivos temporários no diretório do Engine que eram desnecessários e poderiam duplicar o espaço em disco requerido para a criação da cópia da base de dados.
- Ao executar o processo “Desenvolvimento > Atualização > Atualizar sistema” poderia ocorrer o erro “Field of memo type can’t be indexed” caso a primeira coluna de uma tabela não fosse a “iKey” ou “CHAVE”.
- A atualização do sistema poderia falhar com o erro “It’s not possible to convert the value “x” of the field “y” to an int32 value” caso o Engine da base atualizada estivesse na versão 34 ou inferior.
- Ao configurar uma coluna de uma visualização de uma fonte de dados com a dimensão “!IMAGE”
não ocorria a exibição da imagem caso a propriedade
classKey
da coluna não fosse informada. - A propriedade
Column.prototype.mergeDuplicatedValues
era ignorada quando utilizado o métodoSimpleLayout.prototype.writeColumn
.
Engine
- Ao executar o método
Database.prototype.executeDDL
era gerado indevidamente o alerta “there is no transaction in progress” nos logs do PostgreSQL. - O método
Array.prototype.sort
poderia falhar se oarray
contivesse ao mesmo tempo valores inteiros e fracionários, ou quando informada uma função de comparação que retornasse um valor superior à capacidade de um inteiro de 32 bits. - Os caches de chaves dos Engines poderiam não ser completamente descartados após a execução do processo “Admin > Cache local > Descartar os caches de dados e de chaves”.
- Scripts agendados no Scheduler relacionados ao registro de entrada e saída do usuário no sistema poderiam ficar presos em situação de erro caso o usuário fosse removido.
- Ao iniciar o sistema, o cache local sincronizava todas as alterações dos arquivos da Virtual File System ocorridas no período em que o Engine ficou desligado em vez de sincronizar apenas as últimas alterações.
Extensão VS Code
- Execução de scripts e validação de modelos de classe não codificavam corretamente no servidor os caracteres com acento presentes no código fonte enviado.
Web Framework
- O método
Connection.prototype.executeScript
poderia falhar com o erro “Anonymous user can’t execute remote scripts” quando a senha do usuário era alterada no início da sessão por motivo de expiração.
REST Framework
- O cabeçalho “access-control-allow-origin” não era configurado corretamente quando ocorria um erro não capturado no atendimento de uma rota, impedindo a leitura do erro caso a requisição fosse originada de um navegador e ela ocorresse em um cenário que exigisse o pré-envio do CORS.
Outras alterações
Engine
- O método
UnionFileSystem.prototype.getLastUpdateTimestamp
passa a retornar um timestamp em milissegundos em vez de segundos. - As colunas “iCreationUTC”, “iCreationUTCHour”, “iLastModifiedUTC” e “iLastModifiedUTCHour” da tabela “CLASSE” e “iVFS” foram substituídas pelas colunas “iCreatedAt” e “iUpdatedAt”. As novas colunas armazenam a mesma informação de uma forma mais otimizada, por meio de um timestamp em milissegundos.