Foram criadas as funções
stringCompare e
dateCompare
com o objetivo de comparar valores de forma equivalente aos métodos
String.prototype.compare() e Date.prototype.compare(). Essas extensões das classes nativas do
JavaScript são uma característica do runtime JavaScript Ije e elas não existem no
V8. Elas também são publicadas como ngin.text.compare() e ngin.date.compare()
para uso em arquivos da Virtual File System que não são estruturados como módulos JavaScript.
Foram criadas as funções
toSqlString
e toHtmlString
com o objetivo de formatar valores para serem inseridos em expressões SQL e HTML de forma equivalente
aos métodos Object.prototype.toSqlString() e Object.prototype.toHtmlString(). Essas funções
também são publicadas como ngin.text.toSqlString() e ngin.text.toHtmlString() para uso em
arquivos da Virtual File System que não são estruturados como módulos JavaScript.
Foi criada a função
truncateTimePart
com o objetivo de remover a parte de tempo de uma data de forma equivalente ao realizado pelo
ApplyUpdates na gravação de colunas do tipo date.
O Engine passa a suportar o parâmetro de linha de comando --v8-flags="<args>" com objetivo
de configurar as flags do runtime JavaScript v8. Mais detalhes no manual
Configuração do Engine.
O método DataSet.prototype.sum
foi otimizado. Nos casos mais comuns de uso, ele passou a ser aproximadamente 3 vezes mais rápido
que a versão anterior.
Foi criado o método
TaskProgressStatusArray.prototype.item
com o objetivo de obter um elemento de um TaskProgressStatusArray de forma compatível com o
runtime JavaScript V8.
Ao criar um arquivo na Virtual File System relacionado a um produto (chave negativa) não era
verificado se o produto associado ao arquivo poderia depender do produto associado ao diretório
onde o arquivo estava sendo criado.
Web Framework
No diretório de configuração do tema, o Web Framework passa a carregar todos os arquivos
CSS que iniciem com os prefixos “environment” e “simpleLayout”, permitindo que os temas padrões
do sistema possam ser customizados sem a necessidade duplicar a configuração completa do tema.
É importante ressaltar que essa é uma configuração avançada voltada para parceiros e não deve
ser utilizada pelos clientes finais do sistema. Os nomes das classes CSS são detalhes internos
da implementação do Web Framework e podem ser alterados a qualquer momento sem aviso prévio.
Configurações sobre essas classes podem deixar de funcionar após uma atualização de sistema,
exigindo uma revisão da customização.
Defeitos corrigidos
Administração do sistema
O filtro “Módulos” dos relatórios “Administração do sistema > Segurança > Permissões >
Análise de permissões” e “Administração do sistema > Segurança > Permissões > Diferenças de
permissões” não exibia os módulos filhos da classe /Menu.
Em determinadas situações o relatório “Administração do sistema > Segurança >
Permissões > Diferenças de permissões” poderia gerar o erro “JSON parse error”.
Em determinadas situações, a atualização do sistema poderia gerar o erro
“ORA-01442: column to be modified to NOT NULL is already NOT NULL” no banco de dados Oracle.
Os registros da tabela iLog associados às alterações realizadas pelo processo
“Desenvolvimento > Atualização > Atualização de permissões de papéis” não indicavam o processo de
origem no campo “iReferrer”, o que dificultava a rastreabilidade dessas modificações.
A ordem de execução dos “Scripts Pós-Atualização” durante a atualização do sistema era
indeterminada. Esse comportamento poderia provocar erros durante a atualização de bases com versões
muito defasadas, quando os scripts mais recentes dependiam dos dados inseridos por scripts mais
antigos. Agora a execução passa a ser ordenada pela data de criação do script.
A rotina de ajuste de permissões executada durante a criação do diretório /Menu na
Virtual File System poderia criar permissões duplicadas caso houvesse permissões na classe
Raiz configuradas com o modo de aplicação “Classe e filhas”. Foi criada uma rotina de
pós-upgrade para corrigir os eventuais erros introduzidos por essa rotina.
Os processos “Atualização de permissões de papéis” e “Atualização do sistema” poderiam criar
registros inválidos de permissões de papéis, caso a base de origem da atualização contivesse
permissões duplicadas. Os processos foram alterados para não propagar o erro da base
de origem e eles passam a excluir as permissões inválidas criadas pelas versões
anteriores do sistema.
Engine
O construtor new Date() criava datas inválidas quando era informado valores negativos de
milissegundos.
O método DataSet.prototype.sum
gerava uma totalização incorreta caso um dos campos a ser totalizado também fosse incluído na lista
de campos a serem agrupados. Agora o sistema passa a gerar um erro para indicar que essa operação
não é suportada.
Web Framework
Em determinadas situações os relatórios com grupos contraídos não podiam ser expandidos.
Scripts “x-find” que dependiam da variável global classKey poderiam falhar caso houvesse
uma classe filha redefinido a pesquisa de uma classe mãe.
Outras alterações
Desenvolvimento
Nos processos “Atualização do sistema” e “Atualização de estrutura”, os comandos de criação de
índices deixam de adicionar a opção compute statistics quando utilizado o banco de dados
Oracle. Essa opção deixou de ser recomendada desde o Oracle 10g, conforme
manual.
Web Framework
A função persistDataSets
passa a ignorar DataSets que não possuem o campo Classe caso não haja dados a serem gravados na
base de dados. Esse alteração tem o objetivo de permitir a criação de grades detalhes com
dados com estruturas não convencionais, desde que a grade mestre se responsabilize pela
efetivação desses dados.
Os campos calculados das grades de variáveis de relatórios deixam de ser exibidos como filtros
no cabeçalho do relatório gerado. Esses campos normalmente são criados com a finalidade de
auxiliar o usuário no preenchimento do relatório e exibição deles como filtros gerava uma
poluição visual desnecessária no relatório.