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 )

}

} )