Versão 79
Novidades
Compressão automática de imagens
Imagens importadas para o sistema passam a ser comprimidas automaticamente. A compressão obedece aos perfis de compressão definidos no processo “Administração do sistema > Armazenamento de arquivos > Perfis de compressão de imagens”. Neste processo, também é possível simular uma compressão e comparar o resultado lado a lado com a imagem original.
Mais detalhes na documentação.

Alterações significativas
Desativação da impressão em texto dos relatórios
A funcionalidade “Imprimir em texto” foi desativada nos relatórios do sistema. Ela dependia do uso de impressoras com suporte aos comandos de controle ESC/POS, como impressoras matriciais, e não funcionava bem em relatórios com muitas colunas ou com estilizações exclusivas dos navegadores Web.
Relatórios que necessitem de impressão em texto devem ser revistos para criar um botão com essa finalidade, devendo esse botão ser responsável por criar um leiaute textual equivalente ao relatório HTML e enviar diretamente para a impressora matricial.
Melhorias
Engine
- Foi criada a classe
ImageCompressorProfile, responsável por criar instâncias deImageCompressorpara perfis de compressão de imagens. O construtor recebe a chave de um perfil e os métodos criam umImageCompressorque atenda a uma regra do perfil específica para um formato de imagem informado. Os métodos podem receber como parâmetro o formato da imagem diretamente (getCompressor), ou inferir o formato a partir de um arquivo (getCompressorFromFile, passando um caminho, ougetCompressorFromBytes, passando um conteúdo binário). - Foi criada a propriedade
DataSet.prototype.stringOverflowModecom o objetivo de indicar o tratamento que uma instância específica de DataSet deve adotar quando o valor atribuído a um campo do tipo “string” ultrapassar o tamanho do campo. Caso essa propriedade não seja informada, será utilizado o valor definido na nova propriedadeDataSet.defaultStringOverflowMode. Essa nova propriedade substitui os métodos estáticosDataSet.setStringOverflowModeeDataSet.getStringOverflowModeque foram mantidos apenas para fins de compatibilidade. - O sistema passa a permitir que um usuário possa criar tokens de autorização em nome de outros usuários sem requerer as credenciais dos usuários autorizados. Para isso, o usuário que criará o token deve ter permissão ao escopo de autorização “security.issueImpersonationToken”. Esse novo escopo de autorização não deve ser atribuído para grupos ou usuários normais do sistema e deve ser utilizado apenas em fluxos bem controlados e restritos onde a autorização por representação é necessária, como em serviços de autenticação alternativos ou complementares ao do sistema.
- Foram criados os métodos
grantScopeerevokeScopena classeSecuritycom o objetivo de atribuir e revogar escopos de autorização para usuários, grupos ou papéis de forma programática. - O método
Security.prototype.deleteUserpassa a remover automaticamente os tokens de autorização associados ao usuário excluído.
Web Framework
- A busca no menu do sistema agora prioriza correspondências nos nomes de processos e relatórios em relação aos termos buscados, dando menor peso para correspondências no caminho dos itens.
- Ao definir uma coluna de um relatório, passa a ser possível informar o tipo da coluna como “memo”. Colunas do tipo “memo” permitem a escrita de conteúdos com tamanho superior ao limite atual de 100.000 caracteres. Mais detalhes em Como escrever grandes volumes de texto em uma coluna de um relatório?.
- O método
SimpleLayout.prototype.writeIconagora aceita os parâmetrosiconSizeeiconColorpara definir o tamanho e a cor do ícone a ser exibido em uma coluna. A propriedadeiconSizepermite definir o tamanho do ícone em pixels, eiconColorpode ser uma string representando uma cor hexadecimal (exemplo:#FF0000) ou uma variável CSS pré-definida do Web Framework (exemplo:var(--wfd-color-success)).
Defeitos corrigidos
Engine
- O método
getFileContentda classe VirtualFileSystem poderia obter o conteúdo desatualizado se chamado logo apóssetFileContent, caso a classe do arquivo possuísse a propriedadecachedVfsContentfalsa. - A atribuição de um limite muito restrito na configuração “Max Stateless Sessions per Realm” na página “Configuration > General” do Manage poderia provocar a corrupção do cache local.
Web Framework
- A abertura do menu do sistema falhava caso o usuário não tivesse permissão de visão para o processo inicial configurado.
- O diálogo de notificação de troca de senha poderia ser apresentado sobreposto aos diálogos gerados pelo processo inicial.
Extensão VS Code
- Desenvolvedor ficava por um breve período impedido de criar arquivos na Virtual File System com o mesmo nome de um arquivo recém excluído. Erro de arquivo existente era apresentado.
- Era possível criar arquivos com nome duplicado ao alternar o endereço de conexão da base entre local e remoto, caso o cache ainda não estivesse sincronizado.
Outras alterações
Web Framework
- O método
Process.prototype.prompt
deixa de apresentar opções com rótulo “Cancelar” se os valores delas forem igual ao valor
informado na opção
cancelReturnValue, evitando assim que o diálogo apresente para o usuário uma opção com o mesmo rótulo do botão “Cancelar”. - O cabeçalho dos relatórios passa a adotar uma cor de fundo baseada na cor de origem do tema.