novo comportamento da pesquisa combinatoria
Por questões de perfomance foram realizadas várias alterações na pesquisa combinátoria tornando-a mais otimizada.
Uma das alterações mudou um comportamento antigo da pesquisa que seria lógicamente anômalo. O algoritmo agora não mais pesquisa classes associadas juntamente com filtros que possuem dados exatos.
Por exemplo: se exitir erradamente um registro na tabela de dados/parâmetros com campos RECURSO e CLASSERECURSO (sendo este associado ao filtro RECURSO) preenchidos, o novo algoritmo não encontrará este registro. Ele assume que apenas um dos dois estará preenchido. Diminuindo a quantidade de combinações necessárias a pesquisaCombinatoria.
Ressaltamos então a importância de ser revisto todos os scripts que utilizam a pesquisa combinatória e validado o x-class de todos os cadastros para que não ocorram resultados inesperados na buscas da pesquisa.
Faz-se necessário que os campos que possuem filtros associados do tipo TipoFiltro.CLASSE no x-class de configuração da pesquisa não permitam que sejam preenchidos ao mesmo tempo na tabela de dados que a pesquisa irá utilizar.
Vejamos um exemplo prático:
O x-class de configuração possui o filtro "recurso" que é associado ao filtro de classe "classerecurso"
var filtro = this.filtro( "recurso" )
filtro.prioridade = --prioridade
filtro.filtroAssociado = "classerecurso"
var filtro = this.filtro( "classerecurso" )
filtro.prioridade = --prioridade
filtro.classeLimite = -2007800000 /* Recursos * /
filtro.tipo = TipoFiltro.CLASSE
Ao montar os filtros para realizar a busca utlizando a pesquisa é necessário que somente o filtro recurso seja preenchido. Vejamos o código abaixo que está ERRADO, o código em vermelho não é mais necessário e deve ser removido deste script:
this._pesquisaTarefa.filtro[ "recurso" ] = recurso ? recurso : null
this._pesquisaTarefa.filtro[ "classerecurso" ] = recurso.classe ? recurso.classe : null
É necessário também que seja validado no x-class de cadastro para que os dois não sejam preenchidos ao mesmo tempo, a sugestão é que todos utilizem a api de Cadastro já existente, abaixo em azul os trechos de código que precisam serem inseridos no seu x-class ou grid para que a validação ocorra. Qualquer dúvida verificar jsdoc do objeto Cadastro.
includeOnce -1897036341 /* /products/INTEQerp infrastructure/library/cadastro/Cadastro.ijs */
...
this.fieldClass = FieldCadastro
...
var fld = this.field( "RECURSO", "integer" )
fld.nomeCampoExclusao = "CLASSERECURSO"
var fld = this.field( "CLASSERECURSO", "integer" )
fld.nomeCampoExclusao = "RECURSO"
var fld = this.field( "ESTABELECI", "integer" )
fld.nomeCampoExclusao = "CLASSEESTABELECI"
var fld = this.field( "CLASSEESTABELECI", "integer" )
fld.nomeCampoExclusao = "ESTABELECI"
this.onValidate.set( function( registro ){
inherited( registro )
if( registro.state == DataSetStates.EDIT || registro.state == DataSetStates.INSERT ){
var cadastro = new Cadastro( -1894334230 /*Escalas de Trabalho */ )
cadastro.validaRegistro( registro )
}
} )