Boa tarde.
Preciso filtrar usando LIKE em um dataset Interno (de formulário) usando createConstraint em dois campos.
Porém não estou conseguindo.
Exemplo

Preciso retornar todos os registros que tenham “VALOR X” em um dos campos
var c01 = DatasetFactory.createConstraint("campo1", cPesquisa, cPesquisa, ConstraintType.SHOULD, true);
var c02 = DatasetFactory.createConstraint("campo2", cPesquisa, cPesquisa, ConstraintType.SHOULD, true);
cFiltro.push(c01);
cFiltro.push(c02);
var dataset = DatasetFactory.getDataset("dsSolicitadosEmp", null, cFiltro, null)
Se eu uso SHOULD, está trazendo todos.
Se eu uso MUST retorna nenhum.
Alguém sabe como resolver?
At
Rodrigo de Oliveira.
Rodrigo, como mencionado pelo Daniel, se o filtro estiver sendo feito dentro de um outro dataset, o correto é utilizar método setLikeSearch para indicar que se trata de uma constraint like.
Somente quando o dataset é acessando no fonte que passamos na construção da constraint o valor de true como último parâmetro para indicar que se trata do like.
No seu caso, caso esteja tentando acessar de algum script do backend, deve ficar assim:
var c01 = DatasetFactory.createConstraint("campo1", cPesquisa, cPesquisa, ConstraintType.SHOULD);
var c02 = DatasetFactory.createConstraint("campo2", cPesquisa, cPesquisa, ConstraintType.SHOULD);
c01.setLikeSearch(true);
c02.setLikeSearch(true);
cFiltro.push(c01);
cFiltro.push(c02);
var dataset = DatasetFactory.getDataset("dsSolicitadosEmp", null, cFiltro, null)
Obs.: como se trata de um dataset customizado, recomendo que verifique se sua implementação está tratando o parâmetro de like para a construção dos dados. Se foi um construído a partir do próprio Fluig (Painel de Controle), já contem o padrão e por isso deveria funcionar.
Obrigado pela resposta @daniel.cabral.
Fiz um teste conforme documentação, mas não funcionou. Apresenta erro no console do navegador:
Uncaught TypeError: c01.setLikeSearch is not a function
Estou executando este dataset através de uma widget.
No arquivo view.ftl tenho a chamada para o arquivo vcXMLRPC.js.
@alefvinicius
Estou fazendo o filtro em um dataset interno, não é um dataset customizado.
É um dataset criado pelo próprio sistema, depois de publicar um formulário.
Há mais alguma sugestão?
At
Rodrigo de Oliveira.
Oi @redschenko
A função setLikeSearch é usado apenas quando o valor enviado possui %. Adicione o símbolo de % antes e depois da variável cPesquisa
https://tdn.totvs.com/display/public/fluig/Acessando+Datasets