Foi criado o processo
Administração do sistema > 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
Administração do sistema > 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.
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.
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.