Versão 29
Novidades
Módulos JavaScript da plataforma passam a ser APIs estáveis
A partir da versão 29, os módulos públicos da plataforma nginstack passam a ser considerados APIs estáveis. Com essa sinalização, passa-se a garantir que o caminho e o comportamento documentado de um módulo não será alterado sem uma prévia notificação e um período de depreciação adequado.
Com essa alteração, os módulos passam a poder ser utilizados diretamente nos códigos-fonte de processos, relatórios e definições de classes da Virtual File System, editados via IDE do Engine, sem a necessidade de scripts de adaptação. Exemplo:
// Uso da API com script de adaptação
__includeOnce('ufs:/ngin/string/string.js');
ngin.string.replaceAll('Test failed', 'failed', 'OK'); // => 'Test OK'
// Uso direto do módulo
var replaceAll = require('@nginstack/engine/lib/string/replaceAll');
replaceAll('Test failed', 'failed', 'OK'); // => 'Test OK'
Importante: apenas os módulos documentados em https://api.nginstack.com devem ser considerados públicos. Ao ler os códigos fontes desses módulos, pode-se observar a utilização de outros módulos não documentados na mesma árvore de códigos, sem nenhum tipo de sinalização de privacidade. Módulos, propriedades e métodos que não estejam documentados publicamente no site devem ser considerados como APIs privadas ou experimentais e não há nenhuma garantia de estabilidade sobre elas. Atualizações do sistema podem remover ou alterar o comportamento dessas APIs não documentadas sem nenhum tipo de aviso.
Escopos de autorização
O Engine passa a implementar um novo controle de segurança chamado de Escopos de Autorização. Essa nova funcionalidade tem o objetivo de gerenciar os privilégios dos usuários no uso das APIs do sistema, de forma complementar ao modelo já existente de permissões de classes de dados e arquivos.
Além de permitir um melhor controle das APIs HTTP, os escopos de autorização passam a tornar mais claro o tratamento dado a alguns grupos do sistema, como Administradores e Desenvolvedores. Os privilégios especiais dados aos usuários desses grupos passam a ser explicitamente definidos por escopos de autorização atribuídos a esses grupos, como a permissão de um usuário modificar a senha de um outro usuário ou a de atualizar o sistema. Uma outra vantagem dessas regras serem explicitamente definidas via escopos de autorização é que elas podem ser aplicadas para outros grupos e papéis de forma mais seletiva e adequada à realidade organizacional da empresa.
APIs HTTP que tenham sido revistas para utilizar o novo conceito de escopos de autorização passam
a poder ser autorizadas diretamente pelo administrador do sistema por meio do novo
botão “Autorizar API” do processo Admin > Segurança > Tokens de autorização
.
Mais detalhes sobre essa nova funcionalidade podem ser obtidos nos manuais Escopos de Autorização, Tokens de Autorização e Rotas.
Melhorias
Admin
- Foi criado o processo
Admin > Segurança > Escopos de autorização
com o objetivo de relacionar os escopos de autorização necessários para a utilização das APIs HTTP. Mais detalhes no manual Escopos de autorização. - O relatório
Admin > Segurança > Permissões > Análise de permissões
passa a exibir os escopos de autorização atribuídos ao usuário, grupo ou papel analisado. - O processo
Admin > Segurança > Tokens de autorização
passa a indicar a data e hora da última utilização do token.
Desenvolvimento
- A grade “Operações agrupadas por nome” do processo “Análise do log do Profiler” passa a exibir uma representação mais amigável do tempo decorrido no modo formulário.
Engine
- A IDE do Engine passa a suportar o arquivo de configuração
.editorconfig
para definir a quantidade de espaços a ser utilizada na indentação dos arquivos. Para mais detalhes sobre essa configuração, consulte a documentação da IDE. - O Engine passa a identificar no profiler as funções executadas por meio dos métodos
Function.prototype.apply
eFunction.prototype.call
se a opção “Automatic Profiler Active” estiver habilitada. - O Engine configurado como cliente não respondia em todas as portas HTTP e HTTPS configuradas no Manage.
- Ao modificar a propriedade
AuthToken.prototype.description
não ocorria a alteração do valor padrão definido na construção do objeto.
REST Framework
- Rotas HTTP que retornam instâncias de
EntitySet
foram significativamente otimizadas, sendo observadas reduções no tempo de execução superiores a 10x. - A conversão de resultados do tipo
DataSet
em JSON realizada pelas rotas HTTP foi otimizada e passou a ser aproximadamente 30% mais rápida.
Web Framework
- O envio de relatórios por e-mail passa a suportar a conta SMTP configurada no Manage
do servidor. No diálogo de envio de e-mail passa a ser sugerida a conta “Padrão” se
houver uma conta configurada. Essa melhoria simplifica a configuração inicial do sistema ao
tornar desnecessária a configuração de servidores SMTP por usuários e grupos, caso a empresa
utilize uma única conta SMTP. Caso desejado, esse novo comportamento pode ser desativado
pela propriedade
useEngineSmtpServer
da configuraçãoConfiguração > Web Framework > Ambiente
. - Os eventos emitidos por grades detalhes passam a ter as propriedades
masterGrid
emasterData
definidas, simplificando a obtenção dos dados da grade mestre nos listeners desses eventos. As propriedadesgrid
eprocess
também passam a ser definidas para todos os eventos de campos, quando eles são emitidos por grades.
Defeitos corrigidos
Desenvolvimento
- Ao atualizar arquivos do diretório raiz da Virtual File System utilizando o processo
Desenvolvimento > Atualização > Atualizar VFS
ocorria o erro “A classe final informada (-2100000000) não pertence as filhas da classe inicial informada (-2010000000)”. - Ao utilizar o método
DBKey.prototype.hasOwnProperty
ocorria o erro “Key xxx found but field hasOwnProperty not found”.
Engine
- A IDE e a classe
VirtualFileSystem
permitiam criar arquivos com nomes contendo caracteres de controle, o que não é suportado pela maioria dos sistemas de arquivos. A criação desses arquivos impediam o funcionamento de alguns processos do sistema, como o de gestão de Permissões. - Funções retornadas pelo método
Function.prototype.bind
eram registradas no profiler com uma string vazia em vez do seu nome quando a opção “Automatic Profiler Active” estava habilitada. - Após alterar a senha do usuário autenticado via
Security.prototype.changePassword
ocorria uma falha de autorização nas APIs de acesso remoto a outros Engines, exigindo que o usuário reiniciasse a sessão para que o acesso fosse normalizado.
Web Framework
- Ao abrir a opção “Atalhos” do menu ocorria o erro “the node id “xxxxxx” (“xxxxx”) already exists” caso um processo ou relatório fosse relacionado mais de uma vez na configuração “Atalhos” dos grupos e papéis associados ao usuário logado.
- Não era possível visualizar corretamente no modo tabela os valores dos campos com altura (propriedade height) maior que 1, quando o conteúdo exibido ultrapassava o tamanho da coluna.
- A combinação de teclas “Shit + Enter” não quebrava a linha em campos com suporte a múltiplas linhas (textarea).
- Ao exportar um relatório para um arquivo CSV (formato Excel) poderia ocorrer a conversão
indevida de um código numérico para um número, o que provocava a substituição do caractere
ponto (”.") por uma vírgula (”,"). O
SimpleLayout
foi alterado para realizar essa conversão automática apenas quando os primeiros 50 valores de uma coluna forem numéricos. A detecção automática do tipo de uma coluna pode ser desativada definindo a propriedadeColumn.prototype.type
. - Ao exportar os dados de um relatório ocorria o erro “Não há como realizar a exportação de dados deste relatório, pois ele não possui nenhum objeto de exportação de dados associado” quando as as variáveis informadas filtravam todos os dados. Agora o sistema passa a gerar a uma mensagem mais clara indicando que a pesquisa não retornou dados.
- Ao enviar um relatório por e-mail ocorria o erro “A resposta enviada pelo servidor é inválida” caso o usuário tivesse aberto um processo com gráficos anteriormente.
- O evento
afterChange
de um campo de uma grade poderia ser executado em duplicidade se o evento alterasse a interação corrente utilizando o métodoProcess.prototype.setNextInteraction
.
Outras alterações
Admin
- Os cadastros “Grupos e Papéis” e “Usuários”, localizados em
Admin > Segurança > Grupos, Papéis e Usuários
, foram reorganizados com objetivo de simplificar a apresentação dos dados. Foram realizadas as seguintes modificações:- Os campos “Política de segurança”, “Estado” e “Última alteração de senha” foram movidos para o grupo “Segurança”.
- Os campos “Atalhos” e “Processo inicial” foram movidos para o grupo “Menu de navegação”, que passa a ser contraído por padrão.
- As grades “Temas”, “Ambientes” e “Imagens” foram movidas para o grupo “Aparência e personalização”, que passa a ser contraído por padrão.
Engine
- A API HTTP “/api/classes/v1” passa a requer o escopo de autorização “api.classes”.
- A API HTTP “/api/datasources/v1” passa a requer o escopo de autorização “api.datasources”.
- Foi criado o método
Security.prototype.setPassword
, tornando obsoleto oConnection.prototype.setPassword
. - O parâmetro
offlineAuth
do construtorAuthToken
foi tornado obsoleto e todos os tokens de autorização passam a ser autenticados de forma online. Os tokens que foram criados com essa flag ativa continuarão válidos e não precisarão ser recriados.
Desenvolvimento
-
Os processos de atualização do sistema passam a requerer que o usuário na base destino tenha o escopo de autorização “system.update”. Esse escopo é atribuído por padrão ao grupo “Administradores”, portanto os usuários desse grupo continuarão a poder utilizar os processos de atualização.
-
Associar um usuário ao papel “Atualização do Sistema” concedia ao usuário dois privilégios:
- Na base origem da atualização, de visualizar e executar os processos de atualização.
- Na base destino, de autorizar que uma atualização fosse recebida.
Esses privilégios eram muito amplos e agora o papel passa a exclusivamente dar permissões aos processos de atualização. A autorização da atualização na base destino passa a ser restrita apenas aos participantes do grupo “Administradores” e aos usuários com o escopo de autorização “system.update”.
Web Framework
- O tema padrão do Web Framework passa a preservar o valor padrão do atributo
font-size
(16px) dos elementoshtml
ebody
, restaurando assim o comportamento esperado da unidade de medida relativarem
do CSS. Temas ou processos com leiautes HTML escritos sem o uso dos componentes do Web Framework poderão precisar ser revistos para definir o tamanho da fonte do conteúdo escrito, caso eles estejam escrevendo conteúdo diretamente no corpo da página sem nenhum tipo de estruturação de tags (p, div, span, table, etc.).