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 e Function.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ção Configuração > Web Framework > Ambiente.
  • Os eventos emitidos por grades detalhes passam a ter as propriedades masterGrid e masterData definidas, simplificando a obtenção dos dados da grade mestre nos listeners desses eventos. As propriedades grid e process 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 propriedade Column.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étodo Process.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:
    1. Os campos “Política de segurança”, “Estado” e “Última alteração de senha” foram movidos para o grupo “Segurança”.
    2. Os campos “Atalhos” e “Processo inicial” foram movidos para o grupo “Menu de navegação”, que passa a ser contraído por padrão.
    3. 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 o Connection.prototype.setPassword.
  • O parâmetro offlineAuth do construtor AuthToken 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:

    1. Na base origem da atualização, de visualizar e executar os processos de atualização.
    2. 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 elementos html e body, restaurando assim o comportamento esperado da unidade de medida relativa rem 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.).