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
.
Última atualização em 13 Dec 2022