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.

UFS Tree

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 ambiente NGIN_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âmetro wait com o valor true. 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 e SHA512 com o objetivo de gerar hashes criptograficamente seguros. Diferentemente das classes MD5 e SHA1, a representação hexadecimal do hash retornada pelo método hexDigest 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étodo hexDigest das classes MD5 e SHA1 seja revisto para aplicar as funções toLowerCase() ou toUpperCase() 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 e LobStorage 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étodo SimpleLayout.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 o array 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.