Versão 88
Novidades
Redimensionamento da grade e reordenação de colunas
As grades do sistema passam a permitir o redimensionamento manual da largura das colunas no modo tabela. Para redimensionar uma coluna, basta posicionar o mouse sobre a borda direita do seu cabeçalho e arrastá-la até a largura desejada.

Também é possível redimensionar a altura da grade ao posicionar o mouse sobre a sua borda inferior e arrastá-la até a altura desejada.

Além do redimensionamento horizontal e vertical das grades no modo tabela, agora também é possível reordenar suas colunas. Para alterar a posição de uma coluna, basta arrastar seu cabeçalho para a nova posição desejada, indicada por uma linha vertical, e soltar o botão do mouse.

As customizações no layout da grade definidas pelo usuário passam a ser salvas automaticamente pelo navegador, sendo restauradas sempre que a mesma grade for aberta novamente. É importante observar que essa configuração fica salva no navegador utilizado e associada ao endereço exato da página acessada, portanto, ao trocar de navegador, computador ou acessar o sistema por um endereço diferente, os redimensionamentos e as reordenações personalizadas não serão recuperadas. Caso deseje descartar as alterações realizadas, a opção “Redefinir grade” no menu de ferramentas da grade permite restaurar as larguras e posições padrão a qualquer momento.
Mais detalhes nos tópicos “Redimensionar colunas” , “Redimensionar altura da grade” e “Reordenar colunas” do manual do usuário.
Classe RegExp no runtime JavaScript Ije
O runtime JavaScript Ije passa a disponibilizar a classe global
RegExp
,
seguindo a especificação ECMAScript. Por se tratar de um identificador global, não é necessário
importá-la como módulo, bastando utilizá-la diretamente no código por meio de expressões regulares
literais (/pattern/flags) ou utilizando a classe global (new RegExp('pattern', 'flags')).
O objetivo dessa melhoria é permitir o aproveitamento de códigos JavaScript já existentes, bem como de códigos gerados por ferramentas de inteligência artificial, além de proporcionar uma maior interoperabilidade com o runtime JavaScript V8.
Acompanhando essa novidade, os métodos String.prototype.match(), String.prototype.replace() e
String.prototype.split() do runtime Ije passam a aceitar instâncias de RegExp como argumento,
seguindo a especificação ECMAScript na maior parte dos casos. Também foi implementado o método
String.prototype.search(), antes inexistente no runtime Ije, e criado o método
String.prototype.replaceAll()
.
Algumas diferenças em relação à especificação permanecem, como a falta de suporte a uma função como
argumento de substituição em replace() e replaceAll(). Mais detalhes na documentação do manual
JavaScript
.
Com a introdução da classe RegExp, as seguintes APIs passam a ser consideradas obsoletas:
- O módulo
@nginstack/engine/lib/string/replaceAll.jsfoi substituído pelo método nativoString.prototype.replaceAll(). - O módulo
@nginstack/engine/lib/regexp/replaceAllfoi substituído pelo método nativoString.prototype.replaceAll()ou porString.prototype.replace()com um argumentoRegExp. - A classe
Regex, baseada na biblioteca Qt, foi substituída pela classe globalRegExpem conjunto com os métodosString.prototype.match(),replace(),search()esplit().
Nova geração de PDF baseada no Chrome
A classe HtmlToPdf
foi reformulada e passa a utilizar um motor de renderização moderno baseado no
Chrome
(chrome-headless-shell),
substituindo a biblioteca legada wkhtmltopdf.
A nova implementação traz os seguintes benefícios:
- Fidelidade visual e padrões modernos: suporte completo às especificações modernas de HTML5 e CSS3 (incluindo Flexbox, Grid e fontes web), garantindo que o PDF gerado represente com precisão o leiaute visualizado no navegador.
- Segurança aprimorada: a biblioteca wkhtmltopdf foi descontinuada e não recebe mais manutenção nem correções de segurança. O uso do Chrome garante atualizações regulares de segurança e conformidade com os padrões modernos.
- Melhor controle de escala e margens: eliminação de comportamentos imprevisíveis de
redução automática de conteúdo (smart shrinking) implementados pela biblioteca wkhtmltopdf.
Caso seja necessário ajustar a escala de impressão de documentos para adequá-los ao número
de páginas desejado, basta utilizar a propriedade
scale. Valores próximos de0.78tendem a gerar resultados semelhantes aos da versão legada. - Compatibilidade com distribuições Linux modernas: o uso da biblioteca legada wkhtmltopdf restringia o uso do Engine em distribuições Linux mais atuais que não suportavam mais essa biblioteca por motivos de segurança e manutenção.
A nova versão mantém a compatibilidade com a interface pública da antiga API, mas é importante ter atenção aos seguintes pontos:
- A propriedade
extraArgumentscontinua sendo aceita e traduz automaticamente as principais opções legadas (como parâmetros de margens, orientação e templates de cabeçalho/rodapé). No entanto, o seu uso passa a ser desencorajado, devendo-se preferir as propriedades específicas da classe, comoorientation,pageSize,scale,headerTemplate,footerTemplatee as propriedades individuais de margens. - A implementação anterior foi mantida temporariamente no módulo
@nginstack/engine/lib/pdf/WkHtmlToPdf.jspara facilitar a transição caso alguma customização apresente particularidades de leiaute. O uso desse módulo deve ser revisto e evitado, pois ele será descontinuado e removido em versões futuras.
Alterações significativas
Novas dependências do Engine em servidores Linux
Com a adoção de uma nova implementação para a geração de PDFs, o Engine passa a exigir
bibliotecas do sistema operacional Linux necessárias para a execução do Chrome. Para simplificar a
gestão e instalação dessas dependências, foi criado o pacote de sistema engine-deps,
disponível para distribuições baseadas em pacotes DEB (Ubuntu, Debian e derivados) e RPM (Red Hat
Enterprise Linux, Rocky Linux e Fedora). Esse pacote deve ser instalado uma única vez em todos os
servidores Linux que executem o Engine, conforme procedimento abaixo:
-
Para sistemas baseados em DEB (Ubuntu, Debian e derivados):
curl -fsSL https://<endereco-servidor>/install/setup-apt.sh | sudo bash -
Para sistemas baseados em RPM (Red Hat Enterprise Linux, Rocky Linux e Fedora):
curl -fsSL https://<endereco-servidor>/install/setup-yum.sh | sudo bash
Para mais detalhes, consulte o tópico Instalação das dependências do sistema (engine-deps) do manual de Suporte ao Linux .
Melhorias
Administração do sistema
- O processo “Administração do sistema > Base de dados > Tabelas e índices” passa a exibir, na grade de índices, a data e hora da última atualização de estatísticas do índice. No PostgreSQL, por não haver uma data de coleta específica por índice, é exibida a data da última coleta de estatísticas (ANALYZE) da tabela à qual o índice pertence.
Engine
- As credenciais do usuário passam a ser opcionais no método
ProductManager.prototype.createProduct. Caso não sejam informadas, será utilizado o usuário corrente da sessão. - Foi criada a constante
Limits.MAX_AUTH_TOKEN_LENGTHcom o objetivo de indicar o tamanho máximo dos tokens de autorização gerados pelo sistema. O seu valor inicial é de 1024 caracteres.
Web Framework
- Foi criado o método
Process.prototype.confirmUsercom o objetivo de solicitar a reautenticação do usuário logado na sessão corrente. A funcionalidade exibe um diálogo de confirmação de identidade, sendo indicada para validar a segurança em operações sensíveis. Caso o usuário tenha acessado o sistema por meio de um provedor de identidade externo, o diálogo exibirá também a opção de revalidar a identidade com o respectivo serviço. - O método
XLSXWriter.prototype.writeStringpassa a ter como padrão a formatação “General” do Excel. O comportamento anterior passa agora a ser realizado pelo novo métodoXLSXWriter.prototype.writeText, que aplica por padrão a formatação de texto nos valores escritos.
Extensão VS Code
- A pesquisa textual passa a contar com estatísticas de performance. Para ativar, basta
utilizar o comando
Engine DevTools: Toggle Search Statistics. As estatísticas são apresentadas na guia “Output”, no canal “Engine Search Statistics”.
Defeitos corrigidos
Administração do sistema
- Ao clicar no botão “Exibir índices não utilizados” do processo “Administração do sistema > Base de dados > Tabelas e índices” ocorria o erro “getTime is not a function” quando a base de dados PostgreSQL não possuía uma data de redefinição das estatísticas conhecida. O processo passa agora a utilizar outras datas menos confiáveis como referência para o cálculo de dias sem utilização dos índices e passa a sugerir ao usuário que solicite ao DBA a execução do comando de redefinição das estatísticas para tornar o cálculo mais preciso.
Engine
- A classe
Pop3poderia realizar uma alocação de memória excessiva durante a leitura de mensagens. Para melhorar o tratamento de mensagens de tamanho desconhecido, o métodoretrievepassou a suportar a limitação do tamanho máximo dos dados lidos por meio do parâmetromaxSize.
Web Framework
- A carga da página “/sistema” poderia travar no navegador Chrome.
- Links em relatórios em árvore poderiam falhar ao restaurar os parâmetros informados no momento da escrita da coluna.
- O favicon do sistema não considerava corretamente o esquema de cores (claro ou escuro) definido no navegador.
- Ao exportar dados para Excel, o arquivo era gerado com colunas numéricas formatadas incorretamente como texto. A exportação passa a respeitar o tipo de dado, definindo a formatação com base nos dados da coluna.
Outras alterações
Engine
- O módulo
@nginstack/engine/lib/print/HtmlToPdf.jsfoi movido para@nginstack/engine/lib/pdf/HtmlToPdf.js. O caminho anterior foi mantido apenas para fins de compatibilidade com os códigos existentes.
Web Framework
-
A largura do grupo de colunas da grade no modo tabela passa a respeitar estritamente a largura dos campos. Anteriormente, o grupo forçava a expansão dos campos além desse limite. Como consequência, os títulos de grupos poderão ser truncados caso excedam o espaço definido.
-
Os seguintes processos foram revistos para serem compatíveis com a autenticação e confirmação de usuários por meio de provedores de identidade externos:
- Administração do sistema > Auditoria > Reversão de alterações
- Administração do sistema > Cache local > Descarte dos caches de dados e de chaves
- Administração do sistema > Ferramentas para chaves > Substituição de referências
- Desenvolvimento > Produtos > Migração de chaves entre produtos
- Desenvolvimento > Produtos > Recriação de faixa de chaves
- Desenvolvimento > Produtos > Licenciamento > Criação de licença
- Perfil do usuário > Segurança
-
A opção de informar campos customizados no chatbot Octadesk foi desativada. Essa opção pode ser reativada por meio de um chatbot customizado, seguindo orientação do suporte da Octadesk. Mais detalhes em Chatbot .
-
A função
newSettingsGridpassa a gerar nomes derivados a partir desettingsIdcaso não seja informado um nome explicitamente. Essa alteração tem o objetivo de garantir que as preferências do usuário das grades de configuração sejam preservadas mesmo quando o nome não é explicitamente informado. Um efeito colateral dessa alteração é que passa a ser obrigatório informar o nome das grades de configuração, caso seja necessário criar mais de uma grade para o mesmosettingsIdem um mesmo processo.