Versão 28

Melhorias

Admin

  • Foi criado o processo Admin > Monitoramento > Engines com o objetivo de apresentar de forma consolidada informações e estatísticas de todos os Engines clientes e servidores ativos de uma base de dados.
  • Foi criado o processo Admin > Monitoramento > Sessões de aplicativos com o objetivo de apresentar uma visão geral de todas as sessões JavaScript que tenham monitoramento ativo. Por padrão, as sessões JavaScript utilizadas na interface padrão Web do sistema serão monitoradas dada a sua relevância no consumo de recursos dos servidores.
  • Foi criado o cadastro auxiliar Admin > Segurança > Aplicativos. Inicialmente ele será utilizado para cadastrar os aplicativos que têm o monitoramento de sessões JavaScript ativo.

Engine

  • Rotas HTTP agora podem ser definidas diretamente em pacotes JAZ, sem a necessidade de criar arquivos auxiliares no diretório Configuração > Rotas HTTP. Mais detalhes no manual https://nginstack.com/pt/docs/rest-framework/routes/.
  • A classe DetailedError passa a exibir mensagem de erro mais simples, sem o prefixo ‘Error: ‘, quando possuir apenas a propriedade error.
  • Foi criada a função listJazPackages com o objetivo de obter informações acerca dos pacotes JAZ instalados na base de dados.
  • Foi criada a propriedade Session.prototype.scope com o objetivo de simplificar e otimizar a obtenção do escopo do token de autorização utilizado para autenticar a sessão do usuário.
  • O parâmetro scope do construtor da classe AuthToken passa a receber uma lista de escopos separados por espaço, possibilitando a autorização de múltiplos scripts. Os escopos também deixaram de ser obrigatoriamente caminhos da VFS e UFS, podendo agora ser identificadores livres a serem validados por outras APIs.
  • Foi criada a propriedade RouteDef.prototype.scope com a finalidade de indicar os escopos necessários para autorizar o uso da rota.

REST Framework

  • Foi criado o processo Desenvolvimento > APIs HTTP > Rotas com objetivo de relacionar todas as rotas das APIs HTTP atendidas pelo Engine.

Web Framework

  • Foi criada a propriedade tooltip na classe ViewDef. Por meio desta, passa a ser possível editar via x-class/x-view a tooltip (dica de contexto) que é exibida para a respectiva classe em um menu. Por padrão, a tooltip é o caminho da classe.
  • Foi criado o método fileAttributes na classe ViewDef. Este método sobrescreve ModelDef.prototype.fileAttributes, adicionando ao objeto retornado a propriedade tooltip, através da qual passa a ser possível editar, via x-class/x-view, as tooltips dos arquivos nos menus. Por padrão, a tooltip obedece ao formato "chave-do-arquivo, nome-do-arquivo".
  • A propriedade GlobalAction.prototype.targetKey passa a poder ser definida dinamicamente durante o evento onShow, permitindo que uma mesma ação possa ser direcionada para mais de um processo alvo.
  • Os recursos alocados pela sessão do usuário passam a ser liberados de forma mais rápida quando o usuário fecha diretamente a aba do navegador em vez de clicar no botão “Sair”.
  • A ajuda do processo passa a exibir o nome e a chave do produto nos detalhes técnicos.

Defeitos corrigidos

Engine

  • Ao efetuar a deleção de registros de bancos locais Ido, esporadicamente o arquivo ficava corrompido.
  • A conversão de string para número realizada pelo constructor Number() falhava quando era utilizado o Engine 32 bits.
  • A função DBKey.isLike considerava que um número de ponto flutuante poderia ser uma chave caso o valor fosse informado como uma string em vez de um number.
  • O construtor new Date() e a função Date.parse() tratavam incorretamente o fuso horário de datas no formato ISO 8601 com precisão de milissegundos.
  • A falha na carga de uma definição de rota interrompia a carga das demais definições de rotas, impedindo o funcionamento do roteador HTTP.
  • O uso do método ScriptRunner.prototype.readGlobalProperty provocava o erro “Invalid Variant to JSValue conversion”.
  • O método UnionFileSystem.prototype.list retornava uma lista incompleta em algumas situações.

Web Framework

  • Confirmação de saída do sistema apresentava inconsistência na contagem de abas de processo abertas caso uma customização adicionasse elementos iframe ao ambiente.
  • Ao informar um valor não numérico para a propriedade ViewDefField.prototype.column ocorria a quebra do leiaute do modo formulário da grade. Agora o sistema passa a tentar converter o valor para um número e será gerado um erro caso não seja possível.
  • Grades com a propriedade canEdit configurada para false ou Grid.NEVER permitiam edição de campos no modo formulário.
  • Ao excluir ou editar um registro de uma grade detalhe, a grade mestre passa a entrar em edição antes do registro da detalhe ser editado ou excluído, permitindo que a grade mestre possa bloquear a alteração do usuário caso a edição não seja permitida. Esse comportamento já ocorria na inserção de registro e agora ele passa a ser adotado para os três tipos de modificações.
  • O menu com os atalhos de um campo da grade poderia ser fechado logo após a sua exibição caso o registro da grade estivesse em modo de inserção.
  • As propriedades readOnly e width não funcionavam corretamente em todos os tipos de campos suportados pelo FormDialog.
  • Os arquivos temporários criados pela exportação de dados das grades e relatórios não estavam sendo excluídos após 30 minutos.
  • O redirecionamento para HTTPS na página de login falhava se a porta fosse informada no endereço do servidor.
  • A pesquisa global do sistema pesquisava na tabela Virtual File System, exibindo no resultado registros não relevantes e inacessíveis para o usuário final. Agora passam a ser exibidos apenas os processos e relatórios que são visíveis para o usuário no menu do sistema.
  • A seleção de uma faixa de registros da grade utilizando shift + click não respeitava a propriedade Grid.prototype.maxSelectedRecords
  • Em algumas ocasiões, a seleção de registros da grade, quando performada usando click simples e shift + click de maneira alternada, apresentava comportamento inesperado.
  • Campos do tipo “date” de um FormDialog retornavam uma representação textual da data em vez de uma instância de Date.
  • Campos do tipo “boolean” de um FormDialog retornavam a string “true” quando marcados, em vez do valor configurado na propriedade Field.prototype.stringIfTrue.

Outras alterações

Engine

  • As palavras “interface”, “package”, “private”, “goto”, “implements”, “protected” e “static” deixam de ser consideradas palavras reservadas pelo runtime JavaScript “Ije”, tornando-o mais compatível com a especificação atual da linguagem JavaScript.
  • A implementação do objeto “Barcode” (e da URL “/CreateBarcode”) utilizava uma biblioteca disponível apenas no ambiente Windows, sendo substituída por outra biblioteca multiplataforma. A documentação do objeto Barcode foi atualizada para descrever as funcionalidades atualmente suportadas. A implementação anterior foi classificada como deprecated, sendo provisoriamente possível de ser ativada por meio do parâmetro de inicialização do Engine “–WindowsBarcode”. O método Barcode.getJPEGImage passa a retornar um ArrayBuffer. Os métodos File.write, Email.addRelatedContent e Email.addAttachment passam a poder receber um ArrayBuffer ou uma string.
  • Ao consultar as referências de um registro que será excluído, o Engine passa a utilizar o banco de dados para pesquisar as eventuais referências no cache local, evitando a criação de índices pouco utilizados nas demais operações. A única exceção para essa regra são os campos lookup múltiplos que continuam a ser pesquisados diretamente no cache local por uma questão de eficiência.

Desenvolvimento

  • O processo Desenvolvimento > Revisão de códigos > Revisor de códigos passa a ignorar alterações nos arquivos JAZ (application/jaz).

Web Framework

  • Os arquivos temporários utilizados nas operações de exportação de dados, que antes eram criados no diretório “exportations” na pasta de instalação do Engine, passam agora a ser gravados em um diretório temporário em engine.tempDir.